システムを「疎結合」にせよ!Amazon SQSで実現する、止まらない・壊れない設計術

AWS

「アクセスが急増してバックエンドの処理が追いつかず、システム全体がダウンしてしまった⋯⋯」
「一部の機能がエラーになったせいで、注文処理全体が失敗してしまった⋯⋯」

そんな悪夢を終わらせるための設計思想、それが「疎結合」です。

私は模擬試験で「注文を受け付けるフロントエンドと、処理を行うバックエンドをどう繋ぐのがベストか?」と問われ、「直接APIで通信すればいいのでは?」と考えました。しかし、それだと一方が倒れた時にもう一方も巻き添えを食らいます。正解は、間に「伝言板(メッセージキュー)」であるAmazon SQSを挟むことでした。

Amazon SQSがもたらす「ゆとり」の設計

SQSは、メッセージ(データ)を一時的に預かってくれる、フルマネージドな「待ち行列(キュー)」サービスです。

  • バッファ(緩衝材になる)
    フロントエンドが秒間1000件の注文を受けても、バックエンドが秒間100件しか処理できなければ、SQSがその差分を預かってくれます。
  • 非同期処理の実現
    「注文を受け付けたら、あとはSQSに入れておしまい」とすることで、フロントエンドは即座にユーザーへレスポンスを返せます。
  • 障害の隔離
    バックエンドが一時的に静止しても、メッセージはSQSに残り続けるため、復旧後に処理を再開できます。データが消える心配はありません。

試験で必ず問われる「標準キュー」と「FIFOキュー」

SQSには2つのタイプがあります。この使い分けはSAA試験の超頻出項目です!

特徴標準キュー(Standard)FIFOキュー
スループットほぼ無制限最大3,000件/秒(バッチ時)
配信の順序ベストエフォート(入れ替わる可能性あり)送信順を厳格に守る
配信の回数少なくとも1回(重複の可能性あり)正確に1回だけ
用途順序を問わない大量のログ処理など銀行取引、在庫管理など順序が重要なもの

「可視性タイムアウト」の罠に注意!

試験でよく出るテクニックが「可視性タイムアウト」の調整です。
メッセージを処理している最中に、他のワーカーが同じメッセージを拾わないようにする「ロック期間」のことです。処理に時間がかかる場合は、この値を適切に伸ばす必要があります。

試験で役立つ!キーワード判別法

システムの安定性や連携の問題で、以下の言葉があればAmazon SQSが正解です。

  • 「疎結合(Decoupling)なアーキテクチャ」
  • 「非同期処理(Asynchronous processing)」
  • 「トラフィックの急増(バースト)を吸収したい」
  • 「メッセージの順序を保証したい」→SQS FIFO

今回の学び:攻略の格言

「直接つながず、SQSを挟め!順序が命ならFIFOを選び、可視性タイムアウトで二重処理を防げ!」

あとがき:一歩ずつ合格へ

最後まで読んでいただき、ありがとうございました!

連載もついに20回。最初は「設定項目が多いな」と感じていたAWSも、こうして「なぜこのサービスを使うのか?」という背景がわかってくると、パズルを解くような楽しさに変わってきますね。

SQSを使いこなせるようになると、単なる「動くシステム」ではなく、「変化に強く、壊れにくいプロフェッショナルなシステム」が設計できるようになります。

それでは、次回の記事でお会いしましょう!