【正解】C
【0からの解説】
①前提知識:Bigtable の
インスタンスは 1 つ以上の
クラスタ(ノードの集まり)を持つことができ、複数クラスタにすると各クラスタ間でデータが自動的に
レプリケーションされます。アプリケーションがどのクラスタにリクエストを送るかは
アプリ プロファイルで制御します。ルーティング ポリシーには、(a)
単一クラスタ ルーティング(指定した 1 つのクラスタにだけ送る)と、(b)
マルチクラスタ ルーティング(最も近い利用可能なクラスタに自動で送り、障害時は自動フェイルオーバー)があります。Google の公式ドキュメントでは、レプリケーションのユースケースとして「
サービング用のトラフィックとバッチ分析のトラフィックを分離する」ことが挙げられ、その場合は用途ごとにアプリ プロファイルを作成し、それぞれ
単一クラスタ ルーティングで別のクラスタを指定する構成が推奨されています。
②要件と制約の整理:既存アプリは一日中高負荷の読み書きを行っている。新たなバッチ分析ジョブは
同じデータを読む必要がある。そして
既存ワークロードに影響を与えない(ワークロードの分離)ことが条件です。
③正解の理由:インスタンスに 2 つ目のクラスタを追加すると、データは自動的に新クラスタにレプリケートされるため、バッチ ジョブも同じデータを読めます。そのうえで、オンライン アプリ用のアプリ プロファイルは既存クラスタへ、バッチ分析用のアプリ プロファイルは新クラスタへ、それぞれ単一クラスタ ルーティングで向ければ、バッチ ジョブの重いスキャンが既存クラスタの CPU を消費することはなく、両ワークロードを物理的に分離できます。なお現在は、Bigtable の
Data Boost(サーバーレスの分離されたコンピューティングで読み取り専用の分析ジョブを実行する機能)も選択肢になりますが、本問の選択肢の中ではアプリ プロファイルによる分離が最適解です。
【誤りの選択肢】
A:ノードを手動追加すると処理能力は上がりますが、オンライン ワークロードとバッチ ジョブは同じクラスタ・同じノードを共有したままです。大規模スキャンによる CPU やディスクの負荷が既存ワークロードのレイテンシに影響する可能性が残り、「影響を与えない」という分離の要件を保証できません。
B:クラスタを追加してもマルチクラスタ ルーティングを使うと、リクエストは最も近い利用可能なクラスタに自動的に振り分けられるため、バッチ ジョブのリクエストが既存アプリと同じクラスタに送られる可能性があります。マルチクラスタ ルーティングは高可用性(自動フェイルオーバー)のための設定で、ワークロード分離には単一クラスタ ルーティングが必要です。
D:自動スケーリングは CPU 使用率などに応じてノード数を増減させますが、A と同様に同じクラスタを共有するため分離にはなりません。また負荷急増からスケールアウト完了までに時間差があり、その間は既存ワークロードが影響を受けます。
【参考】
アプリ プロファイルの概要 | Bigtableレプリケーションの概要 | Bigtableレプリケーション構成の例 | Bigtable