ストーリー
高橋アーキテクト が演習のレビューを終え、振り返りテストを出しました。
クイズ(8問)
合格ライン: 80%(8問中7問正解)
Q1. gRPCがRESTより優れている点として正しいものはどれか?
- A: ブラウザから直接呼び出しやすい
- B: Protocol Buffersによるバイナリ通信で高速
- C: JSONを使うためデバッグが容易
- D: HTTPSが不要でセキュリティの設定がシンプル
回答と解説
正解: B
gRPCはProtocol Buffersによるバイナリシリアライゼーションを使用し、REST(JSON)と比較して5〜10倍高速な通信が可能です。また、HTTP/2を使用しストリーミングもネイティブサポートします。一方、ブラウザからの直接呼び出しは限定的で、バイナリのためデバッグはRESTより難しくなります。
Q2. 非同期通信が同期通信より適切な場面はどれか?
- A: ユーザーに検索結果を即座に返す
- B: 決済の成否を確認してから注文を確定する
- C: 注文確定後にメール通知を送信する
- D: 在庫数をリアルタイムで画面に表示する
回答と解説
正解: C
メール通知はユーザーが即座に結果を知る必要がなく、遅延が許容される処理です。非同期でイベントを発行し、通知サービスが独立して処理するのが適切です。検索、決済確認、在庫表示は即時レスポンスが必要なため同期通信が適切です。
Q3. API GatewayのBFF(Backend for Frontend)パターンの目的はどれか?
- A: フロントエンドのコードをサーバーで実行する
- B: 複数サービスのレスポンスを集約してクライアントに返す
- C: フロントエンドのバンドルサイズを削減する
- D: サービス間の認証を不要にする
回答と解説
正解: B
BFFパターンは、クライアントの1回のリクエストで複数のマイクロサービスを呼び出し、レスポンスを集約して最適化された形で返却します。これにより、クライアントが複数のAPIを個別に呼び出す必要がなくなります。
Q4. サービスメッシュのサイドカープロキシの役割として正しいものはどれか?
- A: ビジネスロジックの実装
- B: サービス間通信の制御(mTLS、リトライ、サーキットブレーカー)
- C: フロントエンドの静的ファイル配信
- D: データベースのクエリ最適化
回答と解説
正解: B
サイドカープロキシ(Envoyなど)は各サービスに併設され、サービス間通信の横断的関心事(mTLS暗号化、自動リトライ、サーキットブレーカー、分散トレーシング、メトリクス収集)を透過的に処理します。アプリケーションコードを変更せずにこれらの機能を利用できます。
Q5. クライアントサイドディスカバリとサーバーサイドディスカバリの違いとして正しいものはどれか?
- A: クライアントサイドはLBが不要だが、サーバーサイドはLBが必要
- B: クライアントサイドはクライアントがLBロジックを持ち、サーバーサイドはLB/プロキシが担当する
- C: サーバーサイドはレジストリが不要
- D: クライアントサイドの方がクライアントの実装がシンプル
回答と解説
正解: B
クライアントサイドディスカバリでは、サービス呼び出し元がレジストリに問い合わせてインスタンスリストを取得し、自分でロードバランシングを行います。サーバーサイドディスカバリでは、LB/プロキシがこれを担当し、クライアントはLBのアドレスだけ知ればよいためシンプルです。
Q6. 分散設定管理でシークレット(DBパスワード等)を管理する最適な方法はどれか?
- A: ソースコードに直接記述する
- B: 環境変数に平文で設定する
- C: AWS Secrets ManagerやHashiCorp Vaultなどの専用サービスを使用する
- D: 設定ファイルをGitリポジトリにコミットする
回答と解説
正解: C
シークレットはAWS Secrets ManagerやHashiCorp Vaultなどの専用サービスで暗号化して管理します。ソースコードへの記述やGitへのコミットはセキュリティリスク、環境変数への平文設定は暗号化されていないため不適切です。
Q7. Feature Flagsの主な利点はどれか?
- A: コードのコンパイル時間を短縮する
- B: デプロイなしに機能の有効/無効を切り替えられる
- C: データベースのパフォーマンスが向上する
- D: テストの自動化が不要になる
回答と解説
正解: B
Feature Flagsを使うと、コードをデプロイし直すことなく、特定の機能を有効/無効に切り替えたり、特定のユーザーグループにのみ新機能を公開(カナリアリリース)できます。これにより、リスクを最小化しながら段階的に機能をロールアウトできます。
Q8. API Gatewayとサービスメッシュの対象とする通信の違いとして正しいものはどれか?
- A: API Gatewayは内部通信、サービスメッシュは外部通信
- B: API Gatewayは外部→内部(North-South)、サービスメッシュは内部↔内部(East-West)
- C: 両方とも同じ通信を対象としており、互換性がある
- D: API Gatewayはデータベース通信、サービスメッシュはHTTP通信
回答と解説
正解: B
API Gatewayは外部クライアントからサービスへの通信(North-South traffic)を管理します。サービスメッシュはサービス間の内部通信(East-West traffic)を管理します。両者は補完的な関係にあり、同時に使用するのが一般的です。
結果判定
合格(7問以上正解)
マイクロサービスの設計原則をしっかり理解しています。Step 3に進んで、イベント駆動アーキテクチャを深掘りしましょう。
不合格(6問以下)
Step 2の各レッスンを復習しましょう。特に通信方式の選択基準とAPI Gatewayの役割を重点的に見直してください。
推定所要時間: 30分