システムデザイン

ソリューションアーキテクト問題解説「その2:Amazon SQSの「空の応答」削減」

こんにちは、エム・フィールドグループの教育部門SITCのYouTubeチャンネル「MACADEMY」を担当している山口格と申します。

本日は、「ソリューションアーキテクト問題解説その2:Amazon SQSの「空の応答」削減」の問題解説をご紹介します。このコンテンツはYouTube動画の書き起こしとなっておりますので、動画視聴をご希望の方は、こちらからご覧ください。

今回の目標は
「ソリューションアーキテクト試験合格に向けて試験問題の解き方を学ぶ」ことです。

今回も、
1「解き方のコツ」で問題を解く上で気を付けるべきポイント、
解き方の概要をお伝えします
2「問題文」でこれから実際に解く問題をご紹介し、
3「解き方のコツに沿って問題を解く」に進みます。

3で解いた問題の正答の根拠となるドキュメントをご紹介をし、
最後にまとめ、という流れですすめていきます。



解き方のコツは3つあります。
1:「知らないキーワードを調べる」
2:「問題で求められていることを読み取る」
3:「選択肢に当てはまるか検討する」

問題文や選択肢に知らないキーワードがあると、正しいか誤りか判断ができなくなるので、まず最初に問題文の中の知らない単語を無くすことが重要です。
次に問題文が何を求めているのか探りましょう。そこから読み取った内容に対して、1つずつ選択肢を検討していきます。それでは、実際に解く問題を読んでいきます。

この問題を先ほどの問題のコツに沿って解いていきます。


■知らないキーワードを調べる


それではまず初めに、「知らないキーワードを調べる」ところから始めていきます。
この問題文から、分かりにくい単語を抜き出してみると、以下の赤文字になるのではないでしょうか?

これらの単語を調べていきましょう。

非同期処理とは
あるタスクが実行をしている際に、他のタスクが別の処理を実行できる方式のことをいいます。

AmazonSQSは
Amazonが提供するメッセージキューイングサービスです。メッセージキューとは、異なるソフトウェア間でのデータの送受信をする手法のことで、第三者にデータを一時預けることで好きなタイミングでデータの送受信ができるというものになっております。

ポーリングリクエストとは
処理をするサーバからメッセージキューに向けてのリクエストのことをいいます。処理するデータがあればそれを受け取り、無ければ空の応答を返します。ポーリングは、10秒ごとなど定期的に行われるのが一般的です。

リドライブポリシーですが、
ここで気を付けなければいけないのが、「リトライポリシー」の誤訳である、ということです。AWSドキュメントは英語から翻訳したものなのでこういった誤訳や、分かりにくい言い回しがあることに注意が必要です。

リトライポリシーとは、
正常に処理できなかったメッセージ(AWSではデッドレターキューといいます)これを再処理するためのポリシーのことです。これによりエラーのあるメッセージを何度も受信することを避けることができます。

可視性タイムアウトは
SQSでは処理するサーバにメッセージを送信した後、一定時間同じメッセージを、ほかのサーバに見えないようにする機能があります。これにより、他のシステムが二重に同じ処理をしなくて済みます。

■問題で求められていることを読み取る


ここでは問題で求められていることを読み取るために
問題文中で大切なキーワードを探します。

今回は
「ポーリングリクエストからの空の応答件数を最小限に抑える」
「キューの」が対象です。

「ポーリングリクエストからの空の応答件数を最小限に抑える」というキーワードは、
本題での達成すべき案件になります。処理する側のサーバからの応答に対して、
キューが「空の応答」を少なくすることを目的として考えることが重要です。

「キューの」というキーワードは、全ての選択肢で共通している部分です。
キューとはAmazon SQSのことを指すため、SQSのどの機能で「空の応答」を少なくするのかを考えていくことになります。

この問題を解くうえで、知っておきたいAWSのサービス、または機能を紹介します。


「Amazon SQS」を紹介します。
AmazonSQSはAWSが提供するメッセージキューイングサービスになります。
主な機能として、ショートポーリングとロングポーリング、可視性タイムアウト、遅延キュー、デッドレターキューがあります。
本問題でのキーワードは「空の応答」になります。空の応答はショートポーリング時のSQSの応答のことで、即応答をしてメッセージがなければ返される、という特徴を持ちます。これに対し、ロングポーリングでは最大20秒待つことができ、応答の頻度が減らすことができます。


今までの要素から、問題文の構成図を考えてみましょう。
以下のような図になることが予想されます。

■選択肢が問題で求められていることに当てはまるか検討する

Aはキューの最大メッセージ保存期間を増やす、です。
キューのメッセージ保存期間は1~14日で指定することができます。
しかし、メッセージ保存期間を増やしても、新たなメッセージがなければ
空の応答を返してしまいます。
よって、この選択肢は誤りです。

Bはキューのリドライブポリシーの最大受信数を増やす、です。
キューのリトライポリシーの最大受信数は、1~1000の間で設定できます。
処理サーバが削除せずにメッセージを設定数以上受け取ると、メッセージがデッドレターキューに移動します。
ポリシーの最大受信数を増やしても、空の応答を減らすことと関係がありません。
よって、この選択肢は誤りです。

Cはキューの既定の可視性タイムアウトを増やす、です。
既定の可視性タイムアウトは0秒~12時間の間で設定できます
タイムアウトの時間を増やすことで、ほかの処理サーバからメッセージを見えなくして
再処理を防ぐ時間を長くすることはできますが、ポーリングリクエスト自体は送られるため、空の応答は減りません。
よってこの選択肢は誤りです。

Dはキューの受信メッセージ待機時間を延長する、です。
SQSでは受信メッセージがないときの待機時間を設定することができます。
これをロングポーリングといい、空の応答を減らすことによってコストを削減することができます。
よってこれが正答になります。



■参考になるドキュメント

正答の根拠となるドキュメントです。よろしければご確認ください。

◆What is Amazon Simple Queue Service?(Amazon SQSの解説)https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperG
uide/welcome.html

◆Amazon SQS – Qiita
https://qiita.com/leomaro7/items/296c46ad6366a8dca28c

◆Amazon SQS のクォータ
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperG
uide/sqs-quotas.html

◆Amazon SQS dead-letter queues
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperG
uide/sqs-dead-letter-queues.html

◆Amazon SQS visibility timeout
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html

以上で講義を終わります。ありがとうございました。

■YouTubeチャンネル「MADADEMY」

エム・フィールドグループの教育部門SITCのYouTubeチャンネル
「MACADEMY」では様々な動画を無料で公開し、毎週更新しています!
AI、人工知能、DX、クラウド化など、ご興味のある方は、ぜひご覧ください。
YouTubeチャンネル「MADADEMY」



お問い合わせ

COLORS by m/f は、AIを武器に企業のDX推進をサポートする
株式会社エム・フィールドとグループ会社の情報満載のオウンドメディアです。

D X、A I、クラウドに関する企業研修、新卒研修を提供しています。
未経験からIT業界へ。働きながらキャリアチェンジができる。
次世代I T人材を未経験から育てるトレーニングセンターを開講しています。
ただいま「5日間お試し授業」実施中。
https://www.ambl.co.jp/recruit/trainingcenter/trial/

エム・フィールドグループでは、新卒・中途採用を積極的に行なっています。
Webアプリケーションエンジニア、Python開発プロジェクトリーダー、
クラウドエンジニア、セールスエンジニア、営業ルートセールス、
ネットワークエンジニア、PM/PL候補システムエンジニアを募集しております。
https://www.ambl.co.jp/recruit/

新卒採用情報はこちら
https://job.mynavi.jp/22/pc/search/corp200590/outline.html

ABOUT ME
山口格
これまで業務アプリケーションの開発業務に従事しつつ、インフラエンジニアとしての基本的知識も身に着けてきました。 現在は、SITCで未経験、微経験、もしくはスキルチェンジを希望する方向けに研修を実施しつつ、学習コンテンツの作成をしています。