8


Amazonのクラウドサービスを統合したrailsアプリケーションを作成します。

  • やりたくないパブリックサブスクリプションの機能を提供するAmazonのSNSサービスを探索しました。特定の加入者にのみ通知したい。たとえば、1つのトピックに5人のサブスクライバーがいる場合、通知は特定のサブスクライバーに送信されます。
  • また、キューのメッセージを監視するポーラーを作成する必要があるAmazonのSQSについても調べました。SQSにもロックメカニズムがありますが、問題は、SQSが分散されているため、プロセスのキューの別のコピーから同じメッセージを取得する可能性があることです。

私は行くための可能なアプローチが何であるかを知りたいです。

4

1 に答える 1

15

SQSはあなたが望むもののように聞こえます。

キュー内のメッセージをめぐって競合する複数の「ワーカー」プロセスを実行できます。各メッセージは1回だけ消費されます。あなたが言及する「ロック」/タイムアウトの背後にあるロジックは次のとおりです。メッセージをダウンロードした後、処理する前にワーカーの1人が死亡した場合、そのメッセージは最終的にタイムアウトになり、処理のために再ダウンロードする必要があります。別のノードで。

はい、SQSはポーリングモデルに基づいて構築されています。たとえば、細かくcronジョブを使用してキュー内の新しいメッセージをポーリングし、見つかったメッセージに対してアクションを実行するユースケースがいくつかあります。このパターンは、作成が簡単で、多くのユースケースで驚異的に機能します。メッセージをキューにプッシュする便利な小さな「クライアント」スクリプトと、1分程度でそのメッセージを処理するcronアクティブ化スクリプトです。

メッセージパターンが非常にまばらである場合(たとえば、1日に数メッセージしかない場合)、キューが空のときに絶えずポーリングするのは無駄に思えるかもしれません。それはほとんど問題ではありません。

私の当初の計算では、1分間のcronジョブのコストは1か月あたり0.04ドル(現在は0.02ドル)でした。それ以来、SQSは、アイドルキューをポーリングするために20秒ごとに1つの「long-poll」メッセージを送信することにより、新しいメッセージの処理で1秒未満の遅延を実現できる「Long-Polling」機能を追加しました。さらに、彼らは価格を50%下げました。つまり、1か月あたりのメッセージ数は131k(〜$ 0.06)で、少し高価ですが、ほぼリアルタイムのリクエスト処理が必要です。

私が説明した分単位のcronジョブは、リクエストのロード(30d * 24h * 60m * 1c / 10k msgs)で月額$0.04しかかからないことに注意してください。したがって、詳細なクリップでは、コストはここでは実際には問題になりません。毎秒ポーリングしても、価格は月額$ 2.59までしか上昇せず、正確には銀行の破産者ではありません。

ただし、SNSHTTPメッセージを受け取るWebサービスを使用して頻繁なポーリングを回避することは可能です。このようなアーキテクチャは次のように機能します。クライアントはメッセージをSNSにプッシュします。SNSはメッセージをSQSにプッシュし、HTTPリクエストをWebサービスにルーティングして、キューをドレインするようにトリガーします。HTTPリクエストがドロップされた場合に備えて、キューを1時間ごとまたは1日ごとにポーリングすることをお勧めします。しかし、結局のところ、そのような複雑さを本当に正当化するシナリオを思いつくことができるかどうかはわかりません。単純なcronジョブでキューをポーリングするために、月に0.04ドル払うほうがずっといいです。

于 2011-05-16T19:15:27.047 に答える