两个服务器之间的通信 - Amazon SQS/SNS?
我有两台服务器。简单来说,服务器 #1 整天在运行一个脚本,当它完成后,我需要给 服务器 #2 发送一个通知,让它去运行其他一些脚本。
我现在在使用亚马逊的AWS工具,并且用的是Python,所以我想知道有没有人能推荐一个简单、安全、易于编程的方法来:
- 在服务器 #1 完成脚本运行时设置一个标志
- 从服务器 #2 去检查这个标志
- 当标志处于活动状态时,在服务器 #2 上运行脚本
- 当服务器 #2 上的脚本运行完成后,从服务器 #1 移除这个标志
我应该使用亚马逊的SNS还是SQS?或者说这两者都不太合适,如果是这样的话,有没有更好的推荐?我倾向于使用AWS工具,因为我已经安装了boto,并且觉得使用起来很方便。
2 个回答
1
假设服务器 #1通过定时任务在运行一个脚本,那么你完全可以用ssh远程去修改服务器 #2。我觉得如果你使用弹性IP地址,可能不会算作带宽使用。
如果不这样做,我会选择使用SNS。这个过程大概是这样的:
- 服务器 #1 通知服务器 #2(脚本开始运行)
- 服务器 #1 开始运行脚本
- (可选)服务器 #1 通知服务器 #2 进度
- 服务器 #1 通知服务器 #2(脚本完成),然后启动服务器 #2 的脚本
- 服务器 #2 在完成后通知服务器 #1
在这种情况下,你需要设置一个简单的网络服务器来接收这些通知。简单的CGI脚本可以做到,但安全性不是最好的选择。
只有在太多脚本同时尝试运行时,我才会考虑使用SQS。如果你是分批处理“先处理服务器 #1,然后处理服务器 #2”,那就不太需要这个了。
1
你可以考虑看看AWS的简单工作流服务(Simple Workflow Service,简称SWF)。使用SWF,你可以很方便地在多台机器之间协调工作流程类型的活动。