两个服务器之间的通信 - Amazon SQS/SNS?

2 投票
2 回答
536 浏览
提问于 2025-04-17 13:30

我有两台服务器。简单来说,服务器 #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,你可以很方便地在多台机器之间协调工作流程类型的活动。

http://aws.amazon.com/swf/

撰写回答