クラスタの CPU 使用率などの指標に基づいて、Cloud Bigtable クラスタをプログラムによってスケールすると便利な場合があります。たとえば、クラスタの負荷が大きく CPU 使用率が極めて高い場合に、CPU 使用率が下がるまでクラスタにノードを追加できます。また、クラスタの使用率が高くないときにノードを削除すれば、コストを節約できます。
このページでは、プログラムによって Cloud Bigtable クラスタをスケールする方法について説明し、開始点として使用できるコードサンプルを示します。また、プログラムによるスケーリングを設定する前に認識しておく必要がある制限事項についても説明します。
プログラムによって Cloud Bigtable をスケールする方法
Cloud Bigtable では、Cloud Monitoring API を介してさまざまな指標が公開されています。クラスタに関するこれらの指標をプログラムによってモニタリングし、いずれかの Cloud Bigtable クライアント ライブラリまたは gcloud
コマンドライン ツールを使用して、現在の指標に基づいてノードを追加または削除できます。クラスタのサイズを変更した後は、Cloud Console からそのパフォーマンスをモニタリングできます。また、Cloud Monitoring カスタム ダッシュボードやプログラムからも、モニタリングできます。
Monitoring API の指標
Monitoring API には、クラスタの現在の状態をモニタリングするために使用できるさまざまな指標が用意されています。プログラムによるスケーリングに最も役立つ指標には、次のようなものがあります。
bigtable.googleapis.com/cluster/cpu_load
: クラスタの CPU 負荷。bigtable.googleapis.com/cluster/node_count
: クラスタ内のノードの数。bigtable.googleapis.com/cluster/storage_utilization
: 合計ストレージ容量のうち使用されている量。bigtable.googleapis.com/server/latencies
: サーバーのテーブル リクエストのレイテンシ分布。
サンプルコード
プログラムによる独自のスケーリング ツールの開始点として、以下のいずれかのサンプルツールを使用できます。
これらのサンプルツールは、Cloud Bigtable クラスタの CPU 負荷が指定した値を超えたときに、クラスタにノードを追加します。同様に、Cloud Bigtable クラスタの CPU 負荷が指定した値を下回ったときは、クラスタからノードを削除します。サンプルツールを実行するには、GitHub にある各サンプルを手順に沿って操作してください。
これらのサンプルツールは、以下のコードを使用してクラスタの CPU 負荷に関する情報を収集します。
Java
Python
CPU 負荷に応じて、サンプルツールは Cloud Bigtable クライアント ライブラリを使用してクラスタサイズを変更します。
Java
Python
クラスタのサイズを変更した後は、Cloud Console または Cloud Monitoring カスタム ダッシュボードを使用して、時間の経過でパフォーマンスがどう変化するかをモニタリングできます。
制限事項
Cloud Bigtable クラスタのプログラムによるスケーリングを設定する前に、必ず以下の制限事項を考慮してください。
パフォーマンス改善の遅延
クラスタにノードを追加した後、クラスタのパフォーマンスが大幅に向上するまでに、負荷のかかった状態が最大 20 分間続く可能性があります。そのため、短期的にアクティビティが増大するワークロードでは、CPU 負荷が上昇した後でクラスタにノードを追加しても、Cloud Bigtable がデータをリバランスし終わるまでにアクティビティの急増が終了してしまうので、パフォーマンスは向上しません。
この問題を解決するため、クラスタへの負荷が増加する前に、プログラムまたは Google Cloud Console を使用してクラスタにノードを追加できます。この方法により、Cloud Bigtable が追加のノード間でデータをリバランスするための時間が得られます。
スケールダウンが速すぎることによるレイテンシの増加
クラスタ内のノード数を減らしてスケールダウンする場合、10 分間に 10% を超えるクラスタサイズの縮小は行わないようにしてください。スケールダウンが速すぎると、クラスタ内の残りのノードが一時的に過負荷になる場合にレイテンシが増加するなど、パフォーマンス上の問題が発生する可能性があります。
スキーマ設計に関する問題
テーブルのスキーマ設計に問題がある場合は、Cloud Bigtable クラスタにノードを追加してもパフォーマンスが向上しないことがあります。たとえば、テーブル内の 1 つの行に対して多数の読み取りまたは書き込みを行うと、すべての読み取りまたは書き込みがクラスタの同じノードで行われるため、ノードを追加してもパフォーマンスは向上しません。一方、読み取りや書き込みがテーブル内の複数の行に均等に分散している場合は、ノードの追加によって一般にパフォーマンスが向上します。
Cloud Bigtable の効果的なスケーリングが可能なスキーマを設計する方法について詳しくは、スキーマの設計をご覧ください。
次のステップ
- Cloud Bigtable のパフォーマンスの詳細を学習する
- プログラムおよび Google Cloud Console を使用してインスタンスをモニタリングする方法を確認する
- Cloud Bigtable
loadtest
ツールを使用して、Cloud Bigtable クラスタに負荷を発生させる - Cloud Bigtable の効果的なスケーリングが可能なスキーマを設計する方法を学習する