queue1 という名前のパーティション分割されたキューを含む Azure Service Bus 名前空間があります。
今後数週間にわたり、queue1 を介して大量のメッセージを送信する予定です。メッセージの順序はランダムです。個別のパーティションの一時的な障害(一時的な失敗)によるメッセージ送信の中断の可能性を最小限に抑える必要があります。
メッセージ内のパーティションキーの最適な構成を使用する必要があります。
どの構成を使用すべきですか?
正解:D
この問題の核心は、「メッセージの順序がランダムで良い場合に、どうすれば耐障害性を最大化できるか」という点にあります。
1. パーティションキーを null にした場合の挙動
パーティション分割されたキューにメッセージを送信する際、パーティションキーを指定しない(null のままにする)と、Azure Service Bus はメッセージをラウンドロビン方式で各パーティションに振り分けます。 もし特定のパーティションが一時的な障害(transient failures)で利用できない場合、Service Bus は自動的に別の利用可能なパーティションを選択してメッセージを格納します。これにより、送信の中断を最小限に抑えることができます。
2. パーティションキーを指定した場合の挙動
特定のパーティションキー(Message ID や Session ID など)を指定すると、Service Bus はそのキーをハッシュ化し、メッセージを常に特定のパーティションに固定しようとします。
リスク: もしその特定のパーティションがダウンしている場合、他のパーティションが生きていても送信はエラーとなり、送信の中断が発生してしまいます。
3. 問題の要件との照らし合わせ
メッセージの順序はランダム: 順序を保証する必要がないため、特定のパーティションに固定する必要がありません。
中断の可能性を最小限にする: ラウンドロビン(null 指定)であれば、一部のパーティションが故障しても他へ逃がせるため、この要件に最適です。

コメント