QUIZ 30分

ストーリー

高橋アーキテクト がイベント駆動の理解度を確認します。

高橋アーキテクト
イベント駆動は分散システムの心臓部だ。ここの理解が浅いと、Step 4の Saga パターンで苦労するよ

クイズ(8問)

合格ライン: 80%(8問中7問正解)


Q1. イベント駆動アーキテクチャの最大のメリットはどれか?

  • A: すべての処理が同期的に完了する
  • B: サービス間の疎結合を実現できる
  • C: データベーストランザクションが不要になる
  • D: テストが容易になる
回答と解説

正解: B

イベント駆動アーキテクチャの最大のメリットは、サービス間の疎結合です。Publisherは誰がイベントを購読するか知る必要がなく、新しいSubscriberの追加も既存サービスの変更なしに行えます。


Q2. 「イベント伝搬(Event-Carried State Transfer)」の特徴として正しいものはどれか?

  • A: イベントに最小限のIDのみ含め、詳細はAPIで取得する
  • B: イベントに必要な情報をすべて含め、API呼び出しを不要にする
  • C: イベントの代わりにRPC呼び出しを使用する
  • D: イベントを永続化せずメモリ上で処理する
回答と解説

正解: B

イベント伝搬は、イベントに処理に必要な情報をすべて含めるパターンです。これにより受信側がPublisherのAPIを呼び出す必要がなくなり、結合度がさらに下がります。ただし、ペイロードが大きくなるトレードオフがあります。


Q3. Kafkaの特徴として正しいものはどれか?

  • A: メッセージは消費後に即座に削除される
  • B: Partition内でメッセージの順序が保証される
  • C: Exchange によるルーティングが可能
  • D: フルマネージドでインフラ管理が不要
回答と解説

正解: B

Kafkaは同一Partition内でメッセージの順序を保証します。メッセージは消費後も設定期間保持され(デフォルト7日)、offsetを指定して再読み込みが可能です。ExchangeはRabbitMQの概念、フルマネージドはSQSの特徴です。


Q4. RabbitMQのExchange TypeのうちFanoutの動作はどれか?

  • A: routing keyが完全一致するキューにのみ配信
  • B: すべてのバインドされたキューにメッセージをブロードキャスト
  • C: ヘッダーの値に基づいてルーティング
  • D: routing keyのパターンマッチでルーティング
回答と解説

正解: B

Fanout Exchangeは、バインドされたすべてのキューにメッセージをブロードキャストします。routing keyは無視されます。Directは完全一致、Topicはパターンマッチ、Headersはヘッダー値によるルーティングです。


Q5. イベントスキーマの「後方互換(Backward Compatible)」な変更はどれか?

  • A: 既存のrequiredフィールドを削除する
  • B: フィールドの型をnumberからstringに変更する
  • C: デフォルト値付きのoptionalフィールドを追加する
  • D: フィールド名を変更する
回答と解説

正解: C

後方互換な変更とは、新しいConsumerが古いスキーマのメッセージも読める変更です。デフォルト値付きのoptionalフィールド追加は、古いメッセージにそのフィールドがなくてもデフォルト値で補完できるため安全です。


Q6. 「At-least-once」配信保証の特徴はどれか?

  • A: メッセージは最大1回配信され、ロストの可能性がある
  • B: メッセージは少なくとも1回配信され、重複の可能性がある
  • C: メッセージは正確に1回だけ配信される
  • D: メッセージの配信順序が保証される
回答と解説

正解: B

At-least-once配信保証では、メッセージが少なくとも1回は配信されますが、ACK失敗時のリトライにより同じメッセージが複数回配信される可能性があります。そのためConsumer側で冪等性を確保する必要があります。


Q7. 冪等性を実現する方法として最も適切なものはどれか?

  • A: すべてのリクエストにタイムスタンプを付与する
  • B: 一意な冪等キーで処理済みかを確認し、重複を排除する
  • C: リトライを無効にしてメッセージロストを許容する
  • D: メッセージの処理速度を上げて重複を減らす
回答と解説

正解: B

冪等性の実現には、一意な冪等キー(イベントID、注文ID等)で処理済みかを確認し、重複を排除するのが最も確実です。タイムスタンプでは一意性が保証できず、リトライ無効はメッセージロストのリスク、処理速度向上は根本的な解決になりません。


Q8. Kafkaで同じ注文IDのイベント順序を保証するために必要なのはどれか?

  • A: Consumer Groupを1つにする
  • B: Topicのパーティション数を1にする
  • C: 注文IDをパーティションキーに設定する
  • D: イベントにタイムスタンプを付与する
回答と解説

正解: C

Kafkaは同一パーティション内の順序を保証します。注文IDをパーティションキーにすると、同じ注文のイベントは常に同じパーティションに送られるため、順序が保証されます。パーティション数を1にすれば全イベントの順序保証はできますが、スケーラビリティが犠牲になります。


結果判定

合格(7問以上正解)

イベント駆動アーキテクチャの基礎をしっかり理解しています。Step 4に進んで、Sagaパターンで分散トランザクションに挑みましょう。

不合格(6問以下)

Step 3の各レッスンを復習しましょう。特にメッセージブローカーの特性と冪等性の実装パターンを重点的に見直してください。


推定所要時間: 30分