我有两个EC2实例。我希望如果一个人完成一份工作,它会签署另一份工作来做其他工作 那么,如何进行沟通?我不想使用CURL ..因为它看起来很贵。我认为AWS应该有一些简单的解决方案,但我仍然无法在文档中找到相关的帮助。
:(
另外,如何在没有giong通过SSH的情况下快速地在两个实例之间发送数据?我知道ssh可以做到。但似乎很慢。再一次,EC2提供的任何工具都可以做到这一点?
实际上,我需要两种方法:
1)实例A告诉实例B从实例A中获取数据。
2)一旦实例B获得信号,那么实例A中的数据(EBS)数据需要传输到实例B.即使我压缩它,数据量也可能很大。它大约50 MB。我需要实例B来快速获取数据,以便实例B有足够的时间在下一个间隔进入之前处理数据。
所以,我正在考虑这些方法:
a)实例A具有来自DB的数据转储,上传到S3。然后发出信号实例B.实例B从S3获取数据。
b)实例A具有来自DB的数据转储。然后发出信号实例B.实例B建立到实例A的SSH(或任何连接)并获取数据。
数据可能需要永久存储,但目前不是问题。它主要用于实例B的处理。
这是一个简单的场景。我正在考虑如果我使用多个实例进行扩展,那么正确的方法是什么。 :)
感谢。
答案 0 :(得分:3)
亚马逊为此提供了一项特殊服务 - 它被称为SQS,它允许实例通过特殊队列相互发送消息。有各种语言的SQS SDK,例如Java和PHP。这应该满足您的信号需求。
为了实际发送大量数据,最好使用S3(并在SQS消息中发送对象密钥)。你通过添加额外的中间人来引入延迟是对的,但你会发现S3从EC2实例中快速非常(如果你把它们放在同一个可用区,那个是),而且比性能更重要的是,S3非常可靠。如果您尝试通过SSH自行管理传输,则必须进行大量错误检查并重试S3为您处理的逻辑。您可以使用S3FS轻松地从EC2写入和读取S3。
已编辑以解决您的更新问题。
答案 1 :(得分:1)
您可能需要查看SNS ...这有点像推SQS。
答案 2 :(得分:0)
您需要多快才能进行这种沟通? SSH非常快。我能想到的唯一可能是更快的是原始套接字(从任何程序运行作业)。
答案 3 :(得分:0)
您可以使用分布式工作流管理服务。
如果实例B已经完成任务,它可以继续选择另一个任务。通常,您希望实例B发出信号,表示已经选择了#34;完成一项任务并正在做。然后其他实例应该尝试在列表中选择其他任务。您需要一个中央服务,它知道哪个任务已经被选中,哪些任务可以用来获取。
当实例B成功完成任务时,它应该向中央服务发出信号,表示它对于新任务是免费的,如果还有剩余的话,请选择一个。
如果无法完成任务,中央服务应该能够检测到它(通过您定义的心跳和超时),并将任务放回列表中,以便其他实例可以接收它。
Amazon SWF是中央服务,它将为您提供所有这些。
对于每个实例所需的数据,您应该将其放在像s3这样的中央存储中,并以某种方式配置s3路径,以便每个任务都知道从哪里下载数据,而不必同步。 例如任务1的数据可以放在类似s3:// my-bucket / task1
的内容中