【问题标题】:How to manage python function calls between EC2 instances如何管理 EC2 实例之间的 python 函数调用
【发布时间】:2022-01-22 06:21:50
【问题描述】:

我有两个 python 进程,process1process2。它们以这样的方式交互:

p1_output = process1_output()
p2_output = process2_output(p1_output)
update_process1(p2_output)

process1process2 具有不同的硬件要求,导致 process1process2 将在不同的 EC2 实例中运行。

我想知道在不同 EC2 实例之间进行函数调用的最佳方式是什么。

我的第一个猜测是构建一个简单的 Flask 应用程序来运行 process2。然后将process1 的输出打包到process2flask 应用的HTTP 请求中,然后等待响应。

有没有更好的方法来做到这一点? boto3 中是否有可以轻松在 EC2 实例之间发送调用的函数?

【问题讨论】:

  • 我认为典型的 API 方法是 HTTP 或 WebSocket,因为您需要 2 路通信(请求 - 响应)。如果是一种方式,那么发布订阅/消息传递(例如 MQTT)也可以。所以 Flask HTTP 绝对是可以接受的。但是 HTTP 是否比 WebSocket 更好真的取决于你的用例。

标签: python amazon-web-services amazon-ec2


【解决方案1】:

另一种方法是通过 Amazon SQS 队列“松散耦合”应用程序:

  • process1 将向 Amazon SQS 队列发送消息
  • process2 会不断轮询等待消息的队列(使用 WaitTimeSeconds = 20 减少调用次数)
  • 收到消息后,process2可以处理消息中包含的数据

更难的部分是如何让“回复”回到process1。您可以使用另一个队列,但是很难将响应与原始请求相匹配。如果process1 正在等待响应并且在此期间没有发送更多消息,那么它可以简单地等待第二个队列中的响应,然后继续处理。

否则,您使用 HTTP 调用触发process2 的想法似乎也可行。只需确保安全组设置允许两个实例相互通信。使用两个单独的安全组,或者如果您使用单个安全组,则将其配置为允许从“自身”访问。

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 2016-05-31
    • 2015-07-13
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2022-09-27
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多