レプリケーションとパフォーマンス

レプリケーションを有効にすると、Bigtable インスタンスのパフォーマンスに影響します。その影響は、一部の指標ではプラスですが、その他の指標ではマイナスになります。レプリケーションの有効化を決定する前に、パフォーマンスに与える可能性のある影響を理解する必要があります。

読み取りスループット

特に複数クラスタ ルーティングを使用する場合は、レプリケーションによって読み取りスループットが向上します。さらに、レプリケーションで、Bigtable データをアプリケーションのユーザーから地理的に近い場所に配置することで、読み取りのレイテンシを短縮できます。

書き込みスループット

レプリケーションによって可用性と読み取りパフォーマンスが向上する可能性はありますが、書き込みスループットは向上しません。1 つのクラスタへの書き込みは、インスタンス内の他のすべてのクラスタに複製される必要があります。したがって、各クラスタは、他のクラスタから変更を pull する目的で CPU リソースを消費します。レプリケーションでは各クラスタが追加の処理を行う必要があるので、実際には書き込みスループットが低下する可能性もあります。

たとえば、単一クラスタ インスタンスがあり、そのクラスタに 3 つのノードがあるとします。

3 つのノードがある単一クラスタ インスタンス

クラスタにノードを追加した場合に書き込みスループットに及ぶ影響は、インスタンスに 3 ノードクラスタをもう 1 つ追加してレプリケーションを有効にする場合とは異なります。

元のクラスタにノードを追加する場合: 3 つのノードをクラスタに追加して、合計 6 つのノードにできます。インスタンスの書き込みスループットは 2 倍になりますが、インスタンスのデータは 1 つのゾーンでのみ利用可能です。

6 つのノードがある単一クラスタ インスタンス

レプリケーションがある場合、あるいは、3 つのノードを持つ 2 番目のクラスタを追加できます(合計 6 つのノード)。インスタンスは、各データを 2 回書き込むようになります。書き込みが最初に受信されたときと、それがもう一方のクラスタに複製されるときです。書き込みスループットは向上せず、低下する可能性もありますが、2 つの異なるゾーンでデータを利用できるというメリットがあります。

6 つのノードがある 2 クラスタ インスタンス

こうした例における単一クラスタ インスタンスでは、複製インスタンスが処理できる 2 倍の書き込みスループットを処理できます(各インスタンスのクラスタに合計 6 つのノードがある場合でも)。

レプリケーション レイテンシ

複数クラスタ ルーティングを使用する場合、Bigtable のレプリケーションは結果整合性があります。一般に、遠距離間でデータを複製するには時間がかかります。異なるリージョンの複製クラスタは、通常、同じリージョンの複製クラスタよりもレプリケーション レイテンシが高くなります。

ノードの使用状況

書き込みスループットで説明したように、インスタンスでレプリケーションを使用する場合、インスタンス内の各クラスタは、アプリケーションから受け取る負荷に加えて、レプリケーションの作業を処理する必要があります。このため、マルチクラスタ インスタンスのクラスタでは、同様のトラフィックを持つ単一クラスタ インスタンスのクラスタよりも多くのノードを必要とすることがよくあります。

アプリ プロファイルとトラフィック ルーティング

使用例によっては、Bigtable トラフィックを転送するために 1 つ以上のアプリ プロファイルを使用します。各アプリ プロファイルは、複数のクラスタ ルーティングまたは単一クラスタ ルーティングを使用します。ルーティングの選択はパフォーマンスに影響を与える可能性があります。

複数クラスタ ルーティングは、レイテンシを最小限に抑えることができます。複数クラスタ ルーティングを使用するアプリ プロファイルは、アプリケーションの観点から、インスタンス内の最も近いクラスタに自動的にリクエストをルーティングします。その後、書き込みはインスタンス内の他のクラスタに複製されます。このように最短距離が自動的に選択されるため、レイテンシが可能な限り最小限に抑えられます。

単一クラスタ ルーティングを使用するアプリ プロファイルは、ワークロードの分離や単一クラスタでの read-after-write セマンティクスを使用するなど、特定の使用例には最適ですが、複数クラスタ ルーティングのようにレイテンシを低減することはできません。

こうした使用例に合わせてアプリ プロファイルを構成する方法については、レプリケーション設定の例をご覧ください。

行範囲の削除

可能であれば、レプリケーションを使用するインスタンスでは行範囲を削除しないでください。このオペレーションは低速で、オペレーション中に CPU 使用率が増加するためです。

次のステップ