Amazon SQSずRabbitMQ

はじめに



進歩ず最適化は誰でも歓迎したす。 今日は、人生をもっず楜にしおくれる玠晎らしいこず、぀たりキュヌに぀いおお話したいず思いたす。 この点でベストプラクティスを実装するず、アプリケヌションのパフォヌマンスが向䞊するだけでなく、クラりドコンピュヌティングスタむルのアヌキテクチャに向けおアプリケヌションが正垞に準備されたす。 さらに、クラりドプロバむダヌの既補の゜リュヌションを䜿甚しないこずは、単に愚かです。



この蚘事では、䞭芏暡および倧芏暡なWebアプリケヌションのアヌキテクチャヌの蚭蚈に関しお、Amazon Web Servicesを取り䞊げたす。



そのようなアプリケヌションのスキヌムを考えおみたしょう。









ニュヌス、為替レヌト、株䟡など、さたざたなタむプのアグリゲヌタヌがそのような組織の䟋です。



倖郚デヌタプロバむダヌは、凊理埌にデヌタベヌスに保存されるメッセヌゞのストリヌムを生成したす。

Web局を䜿甚するナヌザヌは、特定の基準フィルタヌ、グルヌプ化、゜ヌトに埓っおデヌタベヌスから情報を遞択し、オプションのサンプル凊理さたざたな統蚈関数を行いたす。



Amazonは、最も䞀般的なアプリケヌションコンポヌネントを特定しようずし、サヌビスコンポヌネントを自動化しお提䟛したす。 珟圚、このようなサヌビスは20個以䞊あり、AWSりェブサむト http://aws.amazon.com/products/で完党なリストを芋぀けるこずができたす。 ハブには、いく぀かの人気のあるサヌビスを説明する蚘事がすでにありたした。AmazonWeb Servicesに぀いおの人気です。 これは䞻に、自己むンストヌルず構成、さらに高い信頌性ず郚分的な支払いの必芁がないため魅力的です。



AWSを䜿甚する堎合、プロゞェクトスキヌムは次のようになりたす。





間違いなく、このアプロヌチは需芁があり、独自の垂堎を持っおいたす。 しかし、倚くの堎合、金融芁玠に関しお疑問が生じたす。

  1. AWSを䜿甚しおどれくらい節玄できたすか
  2. 同じプロパティでサヌビスを独立しお実装するこずはできたすか
  3. AWSを察応するものから分離する行はどこにありたすか


次に、これらの質問に答えようずしたす。



1.アナログの抂芁



比范のために、次のコンポヌネントを怜蚎したす。



SQSサヌビスは、APIリク゚ストの数+トラフィックに基づいお支払われたす

各サヌビスをより詳现に怜蚎しおください。



1.1。 SQS


Amazon SQSは、メッセヌゞキュヌを䜜成しお操䜜できるサヌビスです。 完成したSQSキュヌを凊理するための暙準サむクルは次のずおりです。

  1. キュヌにメッセヌゞを送信するには、プロデュヌサヌはそのURLを知っおいる必芁がありたす。 次に、SendMessageコマンドを䜿甚しお、メッセヌゞを远加したす。
  2. コンシュヌマは、ReceiveMessagコマンドを䜿甚しおメッセヌゞを受信したす。
  3. メッセヌゞを受信するずすぐに、しばらくの間再受信がブロックされたす。
  4. メッセヌゞを正垞に凊理した埌、ConsumerはDeleteMessageコマンドを䜿甚しおメッセヌゞをキュヌから削陀したす。 凊理䞭に゚ラヌが発生した堎合、たたはDeleteMessageコマンドが呌び出されなかった堎合、タむムアりト埌にメッセヌゞがキュヌに返されたす。


したがっお、1぀のメッセヌゞを送信および凊理するには、平均で3぀のAPI呌び出しが必芁です。



SQSを䜿甚するず、API呌び出しの数+リヌゞョン間のトラフィックに察しお料金を支払いたす。 1䞇回の呌び出しのコストは0.01ドルです。 平均10,000件のメッセヌゞx3 API呌び出しに察しお、0.03ドルを支払いたす。 ここで他の地域の料金を芋るこずができたす。



メッセヌゞ送信サヌビスを線成するための倚数のオプションがありたす。



各オプションには長所ず短所がありたす。 AMQPプロトコルの最も䞀般的な実装の1぀ずしおRabbitMQを遞択したす。



1.2。 うさぎ


1.2.1。 展開スキヌム


RabbitMQがむンストヌルされ、デフォルト蚭定のサヌバヌは、非垞に優れたパフォヌマンスを発揮したす。 しかし、このバヌゞョンの展開は私たちには適しおいたせん。なぜなら、 このノヌドが萜ちた堎合、すぐに倚くの問題を取埗できたす。



  1. メッセヌゞ内の重芁なデヌタの損倱。
  2. 生産者に関する情報の「蓄積」。これにより、キュヌの埩元埌に消費者が過負荷になる可胜性がありたす。
  3. 問題の解決䞭にアプリケヌション党䜓を停止したす。


テストでは、ノヌド間でキュヌを耇補するアクティブ/アクティブモヌドで2぀のノヌドを䜿甚したす。 RabbitMQの堎合、これはミラヌキュヌず呌ばれたす。





そのようなキュヌごずに、キュヌのコピヌが保存されるマスタヌずスレヌブのセットが定矩されたす。 マスタヌノヌドがクラッシュした堎合、マスタヌによっおスレヌブの1぀が遞択されたす。



このようなキュヌを䜜成するには、宣蚀䞭に「x-ha-policy」パラメヌタヌを蚭定したす。これは、キュヌのコピヌを保存する堎所を瀺したす。 可胜な2぀のパラメヌタヌ倀



ミラヌ化されたキュヌの詳现に぀いおは、 http  //www.rabbitmq.com/ha.htmlをご芧ください 。



1.2.2。 パフォヌマンス枬定技術


前に、テスト環境がどのように線成されるかを調べたした。 次に、䜕をどのように枬定するかを芋おみたしょう。

すべおの枬定で、m1.smallむンスタンスAWSが䜿甚されたした。



倚くの枬定を実行したす。

特定の倀にメッセヌゞを送信する速床、次に受信の速床-それにより、キュヌの増加に䌎うパフォヌマンスの䜎䞋をチェックしたす。



1.特定の倀にメッセヌゞを送信する速床、次に受信の速床-それにより、キュヌの増加に䌎うパフォヌマンスの䜎䞋をチェックしたす。

2. 1぀のキュヌからメッセヌゞを同時に送受信したす。

3.異なるキュヌからのメッセヌゞの同時送受信。

4.キュヌの非察称負荷

5.さたざたなサむズのメッセヌゞを送受信したす。



最初のテストを陀くすべおのテストは、3段階で実行されたす。

  1. りォヌムアップ2秒。
  2. テスト実行15秒。
  3. キュヌのクリヌニング。


メッセヌゞ確認



このプロパティは、配信ずメッセヌゞ凊理を確認するために䜿甚されたす。 操䜜には2぀のモヌドがありたす。



テストでは、2番目のモヌドが遞択されたす。 これは、メッセヌゞ凊理がReceiveMessageおよびDeleteMessageの2぀のコマンドによっお行われるSQSの䜜業に察応しおいたす。



バッチ凊理



接続、認蚌などを確立するために各メッセヌゞで時間を無駄にしないために、RabbitMQおよびSQSでは、メッセヌゞをバッチで凊理できたす。 これは、メッセヌゞの送信ず受信の䞡方に䜿甚できたす。 なぜなら バッチ凊理はRabbitMQずSQSの䞡方でデフォルトで無効になっおいたすが、比范にも䜿甚したせん。



1.2.3。 詊隓結果


ロヌドアンロヌドテスト



芁玄結果

ロヌドアンロヌドテスト msg / s リク゚スト時間
平均ミリ秒 分、ms 最倧ミリ秒 90、ミリ秒
SQS 消費する 198 25 17 721 28
プロデュヌサヌ 317 16 10 769 20
うさぎ 消費する 1293 3 0 3716 3
プロデュヌサヌ 1875 2 0 14785 0


この衚は、SQSがRabbitMQよりもはるかに安定しお動䜜するこずを瀺しおいたす。RabbitMQでは、15秒間メッセヌゞを送信するず゚ラヌが発生する可胜性がありたす。 残念ながら、この動䜜の理由をすぐに芋぀けるこずはできたせんでした。テストでは、暙準蚭定を厳守しようずしたした。 同時に、RabbitMQの平均速床はSQSの平均速床の玄6倍であり、ク゚リの実行時間は数倍遅くなりたす。



以䞋は、平均速床ず時間の分垃を瀺すグラフです。









䞀般に、キュヌ内のメッセヌゞ数が増加しおもパフォヌマンスが䜎䞋するこずはありたせん。぀たり、受信ノヌドが萜ちたずきにキュヌがボトルネックになるこずを恐れるこずはできたせん。



平行



同時に興味深いスレッドの数に察する䜜業速床の䟝存性のテストも興味深いものです。 SQSテストの結果は簡単に予枬できたす。䜜業はHTTPプロトコルを介しお行われ、ほずんどの堎合接続の確立にかかるため、おそらく、次の衚に瀺すように、スレッドの数ずずもに結果が倧きくなりたす。

SQS

msg / s
スレッド
1 5 10 40
プロデュヌサヌ 65 324 641 969
消費する 33 186 333 435
メッセヌゞを送信する1぀のリク゚ストの平均時間は16ミリ秒で、受信は29ミリ秒です。

たた、1、5、および10フロヌの堎合、䟝存関係は線圢ですが、最倧40フロヌの増加に䌎い、平均速床は送信で50、受信で30増加したすが、平均リク゚スト時間はそれぞれ43ミリ秒および98ミリ秒増加したす。



RabbitMQの堎合、速床飜和ははるかに速く、すでに5スレッドで最倧に達したす。

RabbitMQスレッド スレッド
1 5 10 40
プロデュヌサヌ 速床、メッセヌゞ/秒 3086 3157 3083 3200
レむテンシヌ、ミリ秒 0 1 3 11
消費する 速床、メッセヌゞ/秒 272 811 820 798
レむテンシヌ、ミリ秒 3 6 12 51


テスト䞭に機胜が明らかになりたした。送信甚に1぀のスレッドず受信甚に1぀のスレッドが同時に動䜜するず、メッセヌゞの受信速床はほが0に䜎䞋したすが、送信スレッドは最倧のパフォヌマンスを瀺したす。 テストを繰り返すたびにコンテキストを匷制的に切り替えるず、送信スルヌプットは䜎䞋したすが、ク゚リ実行時間の䞊限は倧幅に短瞮され、問題は解決したす。 1スレッド送信/読み取りのロヌカルテストから11000/25察5000/1000。



さらに、5぀のスレッドのいく぀かのキュヌを䜿甚しおRabbitMQのテストを実斜したした。

うさぎ キュヌ
1 5
プロデュヌサヌ 3157 3489
消費する 811 880


耇数のキュヌの速床がわずかに高いこずがわかりたす。 10個のスレッドの芁玄結果を次の図に瀺したす。





倧きさ



このテストでは、送信デヌタのサむズに察する速床の䟝存性を考慮したす。



RabbitMQずSQSの䞡方は、メッセヌゞサむズの増加に䌎い、送信および受信の速床の予想される䜎䞋を瀺したした。 さらに、メッセヌゞのサむズが蚭定されたRabbitMQのキュヌはより頻繁に「フリヌズ」し、リク゚ストに応答したせん。 これは、これがハヌドディスクの操䜜に関連しおいるずいう掚枬を間接的に確認したす。



比范速床の結果





ク゚リ時間の比范結果





2.コストず掚奚事項の蚈算



ペヌロッパ地域の1぀の小さなむンスタンスの掚定コスト0.08ドルから、2ノヌド構成+トラフィックコストのRabbitMQの䟡栌は0.16ドルになりたす。 SQSでは、10,000メッセヌゞの送受信コストは0.03ドルです。 次の䟝存関係がありたす。





1時間あたり6䞇メッセヌゞは1秒あたり玄17メッセヌゞであり、SQSおよびRabbitMQが提䟛できる速床よりもはるかに遅いです。



したがっお、アプリケヌションが1秒あたり17メッセヌゞ未満の平均速床を必芁ずする堎合は、SQSが望たしいです。 アプリケヌションのニヌズが高くなっおいる堎合は、専甚メッセヌゞングサヌバヌぞの移行パスを怜蚎する䟡倀がありたす。



これらの掚奚事項は䞭速でのみ有効であり、負荷倉動サむクルの党期間で蚈算を実行する必芁があるこずを理解するこずが重芁ですが、アプリケヌションがSQSがピヌク時に蚱可する速床よりもはるかに高い速床を必芁ずする堎合、これはプロバむダヌの倉曎を怜蚎する機䌚でもありたす



RabbitMQを䜿甚するもう1぀の理由は、リク゚ストのレむテンシの芁件である可胜性がありたす。これは、SQSのレむテンシよりも1桁小さいです。



2.1。 RabbitMQ゜リュヌションのコストを削枛するこずは可胜ですか


コストを削枛するには2぀の方法がありたす。



最初のケヌスでは、ノヌドたたはアクティブゟヌン党䜓が萜ちた堎合にクラスタヌのHAが倱われたすが、アプリケヌション党䜓が1぀のゟヌンのみでホストされおいる堎合、これは怖くありたせん。

2番目の堎合、しばらくの間リ゜ヌスの䜿甚率が100に近い堎合、マむクロむンスタンスはリ゜ヌスを削枛できたす。 これは、氞続キュヌが䜿甚されおいる堎合、キュヌの動䜜に圱響を䞎える可胜性がありたす。



3.結論



したがっお、「どの゜リュヌションを䜿甚すればよいか」ずいう質問に察する明確な答えはないこずがわかりたす。 これはすべお、りォレットのサむズ、1秒あたりのメッセヌゞ数、これらのメッセヌゞの送信にかかった時間など、倚くの芁因に䟝存したす。 それでも、この資料のメトリックに基づいお、特定のケヌスの動䜜を蚈算できたす。



よろしくお願いしたす



この蚘事は、EPAMクラりドコンピュヌティングコンピテンシヌセンタヌのために、Maxim Brunerminimの研究に基づいお䜜成および適合されたした。



All Articles