模擬問題集 › GCP-PCD › 練習問題 4

GCP-PCD 練習問題 4|アプリケーションと Google Cloud サービスの統合

Professional Cloud Developer・無料公開(全 200 問中 15 問を無料公開中)

問題
あなたは、頻繁にアクセスされるデータを Memorystore for Redis Cluster インスタンスに保存するアプリケーションを構築しています。アプリケーションをネットワークの問題に対して回復性のあるものにしたいと考えています。中断を最小限に抑え、アプリケーションの安定性を確保するために、Redis インスタンスからのクライアントの切断をアプリケーションが適切に処理できるようにする必要があります。どうすればよいですか。

選択肢と解説

  • 1
    Redis の切断を検出したら直ちにアプリケーション インスタンスを終了して再起動を強制し、アプリケーションが利用可能になり次第クライアントがキャッシュに再接続するのを待つ。
  • 2
    固定の 60 秒の遅延の後に再接続するよう Redis クライアントを構成する。
  • 3
    Memorystore の自動フェイルオーバー メカニズムを使用して、Redis キャッシュをセカンダリ ゾーンで利用できるようにする。
  • ✓
    切断後に再接続する際に、ジッター付きの指数バックオフを実装する。短時間の停止中にデータを提供できるよう、クライアントサイド キャッシュを構成する。

解説

【正解】D

【0からの解説】
①前提知識:Memorystore for Redis Cluster は、Google Cloud が運用するフルマネージドの Redis(インメモリ キー・バリュー ストア)で、複数のシャードにデータを分散して高いスループットを得るサービスです。マネージド サービスであってもメンテナンス、フェイルオーバー、スケーリング、ネットワークの一時的な瞬断などで、クライアントとの接続が切れることは避けられません。そのため「接続が切れたときにアプリ側でどう振る舞うか」はアプリケーション開発者の責任範囲です。
・指数バックオフ(exponential backoff):再試行の待ち時間を 1 秒、2 秒、4 秒…と失敗のたびに倍々で延ばしていく方式です。障害直後にサーバーへ再接続要求が殺到するのを防ぎます。
・ジッター(jitter):待ち時間にランダムな揺らぎを加えることです。多数のクライアントが同じタイミングで一斉に再接続する「サンダリング ハード(thundering herd)」を防ぎます。Google Cloud は API 呼び出しやデータストアへの接続の再試行で、ジッター付き指数バックオフを推奨しています。
・クライアントサイド キャッシュ:アプリケーション プロセス内のメモリに、直近に読んだ値を短時間保持しておく仕組みです。Redis に一時的に届かない間も、ローカルにある値で読み取りに応答できます。

②要件の整理:「ネットワークの問題に対して回復性がある」「クライアントの切断を適切に(gracefully)処理する」「中断を最小限に」「アプリの安定性を確保」。つまり、アプリ側で自動的かつ過負荷を起こさない形で再接続し、その間もサービスをできるだけ継続することが求められています。

③正解の理由:D は、(1) ジッター付き指数バックオフで、瞬断なら素早く、長引く障害ならサーバーを圧迫しないペースで自動再接続し、(2) クライアントサイド キャッシュで再接続を待つ短い間も読み取りに応答できるため、ユーザーへの影響(中断)を最小化できます。これは Google Cloud のドキュメントが再試行のベスト プラクティスとして示す考え方そのものであり、要件をすべて満たします。

【誤りの選択肢】
A:切断を検出するたびにアプリケーション インスタンスを終了・再起動するのは、一時的な瞬断を「アプリの停止」という大きな障害に拡大させる対応です。再起動中はリクエストを処理できず、多数のインスタンスが同時に再起動すると再接続の集中も起こります。「中断を最小限に」「安定性を確保」という要件に真っ向から反します。
B:固定 60 秒の遅延は、数百ミリ秒〜数秒で回復する瞬断でも必ず 60 秒待つため、不必要に長い中断を生みます。また全クライアントが同じ間隔で再試行するため、ジッターがなく一斉再接続(thundering herd)を防げません。指数バックオフ+ジッターに比べて応答性・安定性の両面で劣ります。
C:自動フェイルオーバー(レプリカを使ったゾーン障害時の切り替え)はサーバー側の可用性を高める機能で、それ自体は有用です。しかし、フェイルオーバーの最中やネットワークの瞬断時にはクライアントの接続はやはり切断されるため、「クライアントの切断をアプリケーションが適切に処理する」という問われている課題の解決策になっていません。アプリ側の再接続ロジックは別途必要です。

【参考】
Memorystore for Redis の高可用性
再試行の方法 | Cloud Storage
← 練習問題 3練習問題 5 →
GCP-PCD の模擬問題集は全 200 問

本番形式の練習テスト 4 回を、試験モード/演習モードで受験できます。 全問に解説付き、ドメイン別の弱点分析にも対応。模試プラン(月額 ¥980)からご利用いただけます。

GCP-PCD の模試を受ける料金プランを見る

GCP-PCD の無料公開問題

問題 1問題 2問題 3問題 4問題 5問題 6問題 7問題 8問題 9問題 10問題 11問題 12問題 13問題 14問題 15