LinuCレベル4 システムアーキテクト 可用性の設計 問15
可用性の設計/負荷分散と障害の局所化画像変換の処理を、メッセージキューを介してワーカー群に処理させる。ワーカーには性能の異なるサーバーが混在し、台数も負荷に応じて頻繁に増減する。1件の処理時間は数秒〜数十秒とばらつきが大きい。ピーク時にも、特定のワーカーが処理しきれない量を抱えてタイムアウトや失敗を起こさないようにしたい。メッセージの伝達方式の設計として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「可用性の設計」に対応。実際の試験問題ではありません)
- Aブローカーが到着したメッセージをワーカーへ順番に送り込むpush方式にし、全ワーカーへ均等な件数を割り当てる
- B各ワーカーが処理を終えるたびにキューから次のメッセージを取りに行くpull方式にし、同時に抱える件数に上限を設ける
- Cキューを使わずにL4ロードバランサでワーカーへ同期的に振り分け、ラウンドロビンで要求を均等に分配する
- Dブローカーがワーカーに届けたメッセージを届いた時点で削除するAt-most-onceにし、再配信による重複をなくす
正解:B
解説
pull方式では、ワーカーが自分の処理能力に余裕ができたときにだけ次のメッセージを取得するため、性能の異なるワーカーが混在していても、それぞれが処理できる分だけを引き受けます。ワーカーが増えれば取りに行く主体が増えるだけなので、台数の増減にも追加の設定なしで追従できます。処理しきれない分はキューに溜まり、ピークの負荷を平準化できます。push方式でも、ワーカーごとに未処理の件数の上限を設ける流量制御を組み合わせれば近い効果を得られますが、均等に割り当てるだけでは遅いワーカーに仕事が滞留します。
選択肢ごとの解説
- A誤り。均等に割り当てると、性能の低いワーカーや処理時間の長いメッセージを抱えたワーカーに未処理分が溜まり、タイムアウトや失敗につながります。
- B正しい。各ワーカーが処理能力に応じて取りに行くため負荷が自然に配分され、同時に抱える件数の上限で過負荷も防げます。台数の増減にもそのまま対応できます。
- C誤り。同期的な振り分けではピークの要求を溜めておけず、ワーカーが処理しきれない分は失敗になります。ラウンドロビンは処理時間のばらつきや性能差も考慮しません。
- D誤り。At-most-onceはワーカーの障害時にメッセージを失うことを許す方式で、過負荷の防止にはなりません。取りこぼしを避けたい処理ではAt-least-onceと冪等な処理を組み合わせます。