マイクロサービス間の疎結合とリクエストの緩衝
マイクロサービス構成のシステムで、受付サービスがリクエストを即座に受け付けて応答を返し、後段の処理サービスが自身の処理能力に合わせて 1 件ずつ取り出し、処理が完了するまで保持したいと考えています。急増するリクエストを取りこぼさないために最も適した AWS サービスはどれですか。
解説を読む(正解: A)
分散システムでは、送信側と受信側の処理速度が一致しないことが常であり、両者を直接つなぐと受信側の能力を超えた瞬間にリクエストが失われます。Amazon SQS はこの問題を解決するフルマネージドのメッセージキューサービスで、送信側はキューにメッセージを入れた時点で応答を返せ、受信側は自分のペースでポーリングして取り出せます。メッセージは既定で最大 4 日間 (設定で最大 14 日間) 保持され、コンシューマーが取り出している間は可視性タイムアウトによって他のコンシューマーから見えなくなり、明示的に削除されるまで消えないため、処理中にワーカーが落ちても再配信されます。急増したトラフィックをキューが吸収するバッファとして働き、1 件ずつ確実に処理したいという要件にも合致するため、A が正解です。C の Amazon SNS はパブリッシュ/サブスクライブ型で、購読者に即座にプッシュ配信する仕組みです。購読者が処理しきれない状態を待って蓄えておく用途には向かず、ピーク吸収の緩衝装置にはなりません。B の AWS Step Functions は複数のステップからなる業務フローを状態遷移として定義・調整するオーケストレーションサービスであり、処理の順序制御は得意ですが、リクエストの急増を溜め込むキューではありません。D の Amazon EventBridge はイベントをルールに従って各ターゲットへルーティングするイベントバスで、こちらもプッシュ型であり、コンシューマー側が取得ペースを決めて 1 件ずつ引き取るというモデルではありません。
注文処理をキューで疎結合にする
注文受付アプリケーションがバックエンド処理を同期呼び出ししており、負荷急増時に注文が失われています。注文を預けてバックエンドが自分のペースで取り出せ、1 件を 1 つのコンシューマーだけが処理し、完了までメッセージが失われない仕組みを求めています。最も適したサービスはどれですか。
解説を読む(正解: A)
Amazon SQS は、送信側と受信側を切り離すためのフルマネージドなメッセージキューサービスです。送信側はキューにメッセージを入れるだけで処理の完了を待つ必要がなく、受信側は自分の処理能力に合わせてメッセージを取り出せるため、急激な負荷スパイクをキューが吸収するバッファーとして働きます (負荷平準化)。取り出されたメッセージは可視性タイムアウトの間ほかのコンシューマーからは見えなくなり、処理が成功して明示的に削除されるまでキューに残るため、処理途中で障害が起きても再度取り出して処理をやり直せます。設問の「いったん預ける」「消費者のペースで取り出す」「1 件を 1 つのコンシューマーが処理」「完了まで失われない」という条件すべてに一致するため A が正解です。B の Amazon SNS はパブリッシュ/サブスクライブ型の通知サービスで、1 つのメッセージを購読している複数の宛先へ同時にプッシュ配信する仕組みであり、コンシューマーが自分のペースで引き取るバッファーにはなりません。C の AWS Step Functions は複数の処理をワークフローとして順序立てて実行するオーケストレーションサービスであり、キューイングによる負荷吸収が主目的ではありません。D の Amazon Kinesis Data Streams はストリーミングデータをシャードに保持し、複数のコンシューマーが同じレコードを繰り返し読み取れる分析向けのサービスで、1 件を 1 コンシューマーが処理して削除するというキューの動作モデルとは異なります。
注文処理の疎結合とアクセス集中の吸収
EC サイトでセール開始直後に注文が集中し、バックエンド処理が追いつかずに注文が失われています。受け付けた注文をいったん確実に保持し、各ワーカーが自分の処理能力に合わせて 1 件ずつ取り出して処理する構成にしたいと考えています。最も適した AWS サービスはどれですか。
解説を読む(正解: D)
アプリケーション統合サービスは、コンポーネント同士を直接呼び出す密結合をやめ、間にマネージドの仲介層を挟むことで、片方の障害や処理遅延がもう片方に波及しないようにするために使われます。とりわけ、送信側の流量が受信側の処理能力を上回るスパイク型のワークロードでは、メッセージを一時的に貯めるバッファが有効です。D の Amazon SQS はフルマネージドのメッセージキューで、フロントエンドが送信した注文メッセージを耐久性のあるキューに保持し、バックエンドのワーカーが準備できたタイミングでポーリングして取り出します。処理が完了するまでメッセージは削除されないため、ワーカーが落ちても注文は失われず、セール時のスパイクはキューの深さとして吸収されます。したがって D が正解です。B の Amazon SNS はパブリッシュ/サブスクライブ型の通知サービスで、1 つのメッセージを複数のサブスクライバーに同時配信 (ファンアウト) するのが役割であり、コンシューマーが自分のペースで 1 件ずつ引き取るというプル型のバッファリングは提供しません。C の AWS Step Functions は複数のサービス呼び出しをステートマシンとして順序立てて実行するワークフローオーケストレーションであり、処理の流れを可視化・制御するものであってスパイク吸収用のキューではありません。A の Amazon EventBridge はイベントをルールに基づいてターゲットへルーティングするイベントバスであり、疎結合には寄与するものの、ワーカーが自らポーリングして取り出す作業キューとしての用途は SQS が担います。