アプリ プロファイルについて

アプリケーション プロファイル(アプリ プロファイル)には、アプリケーションから受信したリクエストを処理する方法を Cloud Bigtable インスタンスに指示するための設定が保存されます。アプリケーションが Bigtable インスタンスに接続すると、アプリ プロファイルを指定できるようになります。Bigtable は、この接続でアプリケーションが送信するリクエストに対して、このアプリ プロファイルを使用します。アプリ プロファイルでは、Bigtable が使用するルーティング ポリシーを定義し、単一行のトランザクションを許可するかどうかを制御します。

アプリ プロファイルは、複数のクラスタを使用するインスタンスで特に便利です。インスタンスにクラスタが 1 つしかない場合でも、実行するアプリケーションごと、または 1 つのアプリケーション内のコンポーネントごとに固有のアプリ プロファイルを使用できます。この場合、アプリ プロファイルごとに Bigtable 指標のグラフを表示できます。

このページでは、アプリ プロファイルが制御する設定とアプリケーションでのアプリ プロファイルの機能について説明します。

アプリ プロファイルを使用してクラスタ ルーティング ポリシーを構成している場合は、このページを読む前に、Bigtable レプリケーションの概要を理解する必要があります。

ルーティング ポリシー

アプリ プロファイルでは、各リクエストに対して Bigtable が使用するルーティング ポリシーが指定されます。

  • 単一クラスタのルーティングを指定すると、すべてのリクエストがインスタンス内の 1 つのクラスタにルーティングされます。そのクラスタが使用できなくなった場合、手動で別のクラスタにフェイルオーバーする必要があります。

  • 複数クラスタ ルーティングを指定すると、リクエストが自動的にインスタンス内の最も近いクラスタにルーティングされます。クラスタが利用できなくなった場合、トラフィックは自動的に利用可能な最も近いクラスタにフェイルオーバーされます。Bigtable では、1 つのリージョン内のクラスタは、ゾーンが異なる場合でも、等距離にあると見なされます。インスタンス内の任意のクラスタにルーティングするようにアプリ プロファイルを構成することも、インスタンス内の一部のクラスタのみにルーティングするアプリ プロファイルを指示するクラスタ グループを指定することもできます。

  • クラスタ グループ ルーティング: アプリ プロファイルの設定で指定したクラスタ グループ内で最も近い使用可能なクラスタにリクエストを送信します。

フェイルオーバーの概要は、フェイルオーバーをご覧ください。フェイルオーバーを行う方法については、フェイルオーバーの管理をご覧ください。

単一行のトランザクション

Bigtable のミューテーション(読み取り、書き込み、削除など)は、常に行レベルでアトミックに処理されます。同じミューテーション オペレーションに含まれている限り、単一行の複数の列に対するミューテーションも同様です。Bigtable では、複数の行をアトミックに更新するトランザクションはサポートされていません。

一方、Bigtable では他のデータベースでのトランザクションが必要となる一部の書き込みオペレーションがサポートされています。実際には、Bigtable は単一行のトランザクションを使用してこれらのオペレーションを行います。これらのオペレーションには読み取りと書き込みの両方が該当します。すべての読み取りと書き込みがアトミックに実行されますが、この場合でもオペレーションは行レベルでのみアトミックです。

  • 読み取り - 変更 - 書き込みオペレーションインクリメントや追記などが該当します。読み取り - 変更 - 書き込みオペレーションでは、既存の値の読み取り、既存の値へのインクリメントや追加、更新された値のテーブルへの書き込みが行われます。
  • 確認 - 変更オペレーション。条件付きミューテーションまたは条件付き書き込みとも呼ばれています。確認 - 変更オペレーションでは、Bigtable は行が所定の条件を満たしているかどうかを確認します。行が条件を満たす場合、Bigtable は新しい値を行に書き込みます。

単一行のトランザクション間での競合

Bigtable インスタンスのすべてのクラスタは、読み取りと書き込みの両方を受け付けるプライマリ クラスタです。その結果、単一行のトランザクションが必要となるオペレーションでは、複数のクラスタのインスタンスで問題が発生することがあります。

たとえば、チケット発行システムのデータを保存するために使用するテーブルがあるとします。整数カウンタを使用して、販売されたチケットの数を保存します。チケットが販売されるたびに、アプリは読み取り - 変更 - 書き込みオペレーションを送信してこのカウンタを 1 ずつ増やします。

インスタンスに 1 つのクラスタがある場合、リクエストはその唯一のクラスタが受信した順にアトミックに処理されるため、クライアント アプリで複数のチケットを同時に販売してデータを失うことなくカウンタをインクリメントできます。

一方、インスタンスに複数のクラスタがあり、アプリ プロファイルでマルチクラスタ ルーティングが許可されている場合、カウンタのインクリメントが同時にリクエストされると、各リクエストが異なるクラスタに送信されてから、インスタンス内のもう片方のクラスタに複製される可能性があります。異なるクラスタにルーティングされる 2 つのインクリメント リクエストを同時に送信した場合、各リクエストがもう片方のリクエストを認識することなくトランザクションが終了します。各クラスタのカウンタは 1 ずつ増えます。 Bigtable は、データがもう片方のクラスタに複製される場合、ユーザーが 2 ずつインクリメントする意図であったことを認識できない可能性があります。

意図しない結果が発生しないようにするために、Bigtable では次のことを行います。

  • 各アプリ プロファイルで、単一行トランザクションを許可するかどうかを指定する必要があります。
  • マルチクラスタのルーティングを使用するアプリ プロファイルで単一行のトランザクションを有効にできなくなります。これは、両方の機能を同時に有効にする安全な方法がないためです。
  • 単一クラスタのルーティングを使用していて、さらにそれぞれ異なるクラスタを参照している場合、単一行のトランザクションを 2 つ以上の異なるアプリ プロファイルで有効にすると、警告が表示されます。このような構成を採用する場合、競合する読み取り - 変更 - 書き込みリクエストや確認 - 変更リクエストを異なるクラスタに送信しないようにする必要があります。

アプリ プロファイルの機能

アプリ プロファイルでは、Bigtable がインスタンスの受信リクエストの処理に使用する設定を指定します。

Bigtable ユーザーの多くは、同じインスタンスに接続している複数のアプリケーションを使用しています。たとえば、あるアプリケーションでデータを顧客の要求に応じて提供し、別のアプリケーションでは、ときどき発生するバッチジョブを実行してデータを解析します。これらの異なるアプリケーションを操作するには、複数のアプリ プロファイル(少なくとも、アプリケーションごとに 1 つ)を作成し、それぞれのアプリ プロファイルを、当該のアプリケーションに適した設定で構成します。このように設定すると、1 つのアプリケーションの設定のみを変更できるようになります。

また、現在のデータの表示や履歴データのクエリなどの複数の機能を 1 つのアプリケーションで実行している場合もあります。これらの各機能を操作するには、機能ごとに 1 つのアプリ プロファイルを作成します。これにより、機能ごとの異なる構成や、1 つの機能の設定のみの更新ができるようになります。

すべてのインスタンスに default アプリ プロファイルがあり、インスタンスごとにカスタムアプリ プロファイルを作成できます。以下のセクションでは、default とカスタムアプリ プロファイルについて説明します。

アプリ プロファイルを使用するには、インスタンスへの接続時にコード内で目的のプロファイルを指定します。アプリ プロファイルを指定しない場合、Bigtable はインスタンスのデフォルトのアプリ プロファイルを使用します。

デフォルトのアプリ プロファイル

インスタンスが作成されると、Bigtable は自動的にそのインスタンスのデフォルトのアプリ プロファイルを作成します。アプリケーションでアプリ プロファイルが指定されていない場合、またはインスタンスへの接続に HBase シェルを使用している場合、Bigtable はデフォルトのアプリ プロファイルの設定を使用します。これらの設定の表示と変更はいつでも可能です。

インスタンスのデフォルト アプリ プロファイルの設定は、最初に作成したときにインスタンス内に存在していたクラスタの数によって異なります。

  • 1 つのクラスタでインスタンスを作成した場合、default アプリ プロファイルはシングル クラスタ ルーティングを使用し、単一行のトランザクションが有効になります。これにより、後でクラスタを追加しても既存のアプリケーションの動作が変わることはありません。
  • 2 つ以上のクラスタでインスタンスを作成した場合、default アプリ プロファイルではマルチクラスタ ルーティングを使用します。単一行のトランザクションはマルチクラスタ ルーティングでは許可されません。

クラスタを追加または削除しても、デフォルトのアプリ プロファイルは変更されません。デフォルトのアプリ プロファイルの設定を変更するには、手動でデフォルトのアプリ プロファイルを更新する必要があります。ただし、ベスト プラクティスとして、デフォルトのアプリ プロファイルを変更するのではなく、新しいアプリ プロファイルを作成して使用することをおすすめします。

カスタムアプリ プロファイル

カスタムアプリ プロファイルは、ユーザーが作成して構成するアプリ プロファイルです。インスタンスには、最大 2,000 件のアプリ プロファイルを設定できます。

次のステップ