【正解】D
【0からの解説】
①前提知識:Bigtable は、IoT やセンサーの時系列データのような大量の書き込みを低レイテンシで処理できるフルマネージドのワイドカラム型 NoSQL データベースです。Bigtable の「インスタンス」は 1 つ以上の「クラスタ」を持ち、各クラスタは 1 つのゾーンに配置されます。インスタンスに複数のクラスタ(同一リージョンの別ゾーンや別リージョン)を追加すると、Bigtable がクラスタ間のレプリケーションを自動で行います。アプリ プロファイルでマルチクラスタ ルーティングを使うと、リクエストは最も近い利用可能なクラスタに自動でルーティングされ、ゾーンやクラスタの障害時も自動フェイルオーバーされるため、高可用性(SLA 99.99% 以上)が得られます。ノードを追加(またはオートスケーリング)すればスループットはほぼ線形に伸び、データの分散(シャーディング)も Bigtable が自動で行います。
②要件と制約語の整理:(1) 大量・低レイテンシの取り込み、(2) レジリエンスが極めて重要(=高可用性)、(3) ワークロードが大幅に増加(=スケーラビリティ)、(4) Google 推奨のプラクティスに従う。
③正解の理由:D は、複数ゾーンにクラスタを配置してレプリケーションを構成することで、ゾーン障害に耐える高可用性を実現します。さらに、負荷テスト(ストレステスト)で想定ピーク時の性能とノード数を事前に検証し、Cloud Monitoring などでパフォーマンス(CPU 使用率、レイテンシ、レプリケーション遅延など)を監視して、増加するワークロードに合わせてスケールできるようにしています。これは Bigtable の公式ドキュメントで推奨される「レプリケーションによる可用性確保」「本番前の性能テスト」「継続的なモニタリング」をすべて含む構成です。なお、厳密には Bigtable のクラスタは単一ゾーンに配置されるため、「マルチゾーンのクラスタ」は「複数ゾーンにクラスタを持つインスタンス」と読み替えて理解してください。
【誤りの選択肢】
A:複数のクラスタ(実質的には別々のインスタンス)にデータを手動でシャーディングし、フォールト トレランスをアプリ側で実装するのは、Bigtable が自動で提供するデータ分散とレプリケーション/自動フェイルオーバーをわざわざ自作することになります。運用負荷とバグのリスクが大きく、Google 推奨のやり方ではありません。
B:単一ゾーンのクラスタはそのゾーンに障害が起きるとサービス全体が停止するため、「レジリエンスが極めて重要」という要件を満たしません。アプリ コードを最適化しても可用性の問題は解決しません。
C:ノード数を増やすとスループット(処理能力)は向上しますが、データの耐久性や可用性は向上しません。Bigtable のデータは Colossus(分散ストレージ)に保存されており、耐久性はノード数とは無関係です。単一クラスタのままではゾーン障害時の可用性も確保できません。
【参考】
レプリケーションの概要 | Bigtableアプリ プロファイルの概要 | BigtableMonitoring | Bigtable