ですから、私の会社のインフラストラクチャ全体がAmazonのAWSに基づいているので、私はAmazonのAWSを手に入れようとしています。
私が正しく理解できなかったコンポーネントの1つは、キューサービスです。Googleをかなり検索しましたが、取得できませんでした。満足のいく答え。 Cronジョブとキューサービスはかなり似ていると思いますが、正しいです私が間違っていたら私。
では、正確に[〜#〜] sqs [〜#〜]は何をするのでしょうか?私の知る限り、AWSの他のコンポーネントがタスクを実行するために使用する単純なメッセージが格納されており、メッセージを送信してそれを実行できます。
この質問では、 通常のウェブサービスで使用されているアマゾンウェブサービスコンポーネントについて誰かに説明してもらえますか? ;答えは、非同期で実行したいタスクをキューに入れるために[〜#〜] sqs [〜#〜]を使用したと述べています。ユーザーにメッセージを返して、後で処理を行ってみませんか? [〜#〜] sqs [〜#〜]が処理を実行するのを待つのはなぜですか?
また、ユーザーが毎日のタスクをスケジュールできるWebアプリがあるとしましょう。[〜#〜] sqs [〜#〜]それに収まるでしょうか?
いいえ、cronとSQSは似ていません。一方(cron)はジョブをスケジュールし、もう一方(SQS)はメッセージを保存します。キューは、メッセージプロデューサーをメッセージコンシューマーから分離するために使用されます。これは、規模と信頼性を設計する1つの方法です。
人気のテレビ番組用のモバイル投票アプリを作成し、500万から2500万人の視聴者がすべて同時に(各パフォーマンスの最後に)投票しているとします。このような短い時間(たとえば15秒)で、これほど多くの投票をどのように処理しますか?あなたcould 1秒あたり数百万のメッセージを処理できる重要なWebサーバー層とデータベースバックエンドを構築しますが、それは費用がかかり、予想される最大のワークロードを事前にプロビジョニングする必要があります。回復力がない(たとえば、データベースの障害やスロットルに対して)。投票した人が少なかった場合は、インフラストラクチャに多額の費用がかかります。投票が狂った場合、投票が失われる可能性があります。
より良い解決策は、投票キューが非常にスケーラブルであるサービスから投票アプリを分離するキューイングメカニズムを使用して、10メッセージ/秒または10 百万メッセージ/秒をうまく吸収できるようにすることです。次に、アプリケーション層がそのキューからメッセージをできるだけ早くプルして、投票を集計します。
@jarmodの優れた簡潔な答えに追加することの1つは、メッセージのsizeが重要であるということです。たとえば、AWSでは、拡張クライアントライブラリを使用しない限り、最大サイズは256 [〜#〜] kb [〜#〜]です。これにより、最大サイズが2GBに増加します。ただし、S3を一時ストレージとして使用することに注意してください。
RabbitMQでは、実際の制限は約100KBです。 RabbitMQにはハードコードされた制限はありませんが、システムは多かれ少なかれ頻繁にストールします。個人的な経験から、RabbitMQは約1 MBのメッセージの安定したストリームを約1〜2時間ノンストップで処理できますが、その後は不規則に動作し始め、しばしばゾンビになり、プロセスを再開する必要があります。