ストーリー
高橋アーキテクト がイベント駆動の理解度を確認します。
クイズ(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分