2015-08-22 42 views
0

我在Amazon EC2內部有多個應用程序實例,每個實例運行多個工作進程。我想要的是每個工作進程都訂閱了一些通知(例如配置更改)。這個通知應該基本上是廣播消息,所以一旦發送 - 工作人員每收到一個AWS:在多個實例上運行多個工作進程的廣播通知

我知道SQS不支持廣播消息。通過類似的問題/線索看,我看到使用SNS而不是SQS的建議。由於以下原因,我不確定這對我有用:

  • 應用程序實例是自動縮放組的一部分,因此可以動態添加和刪除它們。在這種情況下,我沒有看到任何明確的方式來取消訂閱每個工作人員(每個實例有多個工作人員),一旦實例終止,這意味着我會在一段時間後結束死亡訂戶的混亂。
  • 用於訂閱的協議也不清楚。 HTTP端點看起來是唯一的選項,這意味着我的每個工作人員都應該在自己的端口上運行HTTP服務器。它也看起來我應該只聽取實例公共IP,這增加了一層複雜性和不安全性。

目前我有一個基於第三方的解決方案 - 我使用的是0MQ pub/sub服務器。但是我正在尋找AWS提供的一些開箱即用的解決方案。

感謝, Vovan

回答

3

想到的是創建一個SNS主題,然後爲每個實例的出的現成AWS解決方案,當實例啓動時,它會創建它自己的SQS隊列並將隊列訂閱到SNS主題,以便您發佈到SNS的每條消息的each individual queue gets a broadcast copy

您希望取消訂閱並刪除實例終止時的這些隊列,這可以使用lifecycle hooks完成。

如果您不想使用服務器來管理生命週期掛鉤的處理(將啓動或終止事件發佈到SNS或SQS),則可以創建AWS API網關端點來啓動AWS Lambda函數,然後使用https將API網關端點訂閱到SNS主題,以處理Lambda中的清理任務,而不需要服務器。

這是幾個服務一起工作,聽起來有點複雜,但會很便宜,需要很少的維護或關注。

0

我想到的另一個解決方案是使用Amazon Kinesis。這裏的含義是,每個用戶必須維護自己的檢查點才能接收最近的通知。

+0

您的Kinesis解決方案是否適合您的預期用途。我假設你想註冊多個監聽器來監聽Kinesis Stream,並且你想發送單個消息給Kinesis流,並且希望每個監聽器都可以對它進行操作 –