ちょっと話題の記事

[アップデート] Google Cloud の新 RDBMS である AlloyDB for PostgreSQL が一般提供になりました!

話題の Google Cloud の新 RDBMS である AlloyDB for PostgreSQL が GA になりました!!!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

2022年5月に Google I/O 2022 で新しいデータベースである AlloyDB for PostgreSQL が発表され、プレビューとして使用できていましたが、一般提供(GA)になりました!

AlloyDB

AlloyDB の概要について、改めてご紹介します。詳細については発表時のブログを御覧ください。

AlloyDB for PostgreSQL は要求の厳しいエンタープライズ データベース ワークロードに対応するフルマネージドの PostgreSQL 互換データベースサービスです。

AlloyDB の主な機能

フルマネージド データベース サービス

AlloyDB は業界をリードするパフォーマンス、可用性、スケーラビリティを備えたフルマネージドの PostgreSQL 互換データベース サービスです。バックアップ、レプリケーション、パッチ適用、容量管理など管理タスクを自動化して、PostgreSQL のバキューム管理、ストレージとメモリの管理、データ階層化、分析の高速化に適応型アルゴリズムと機械学習を使用するためアプリケーションの構築に集中できます。

高速なトランザクション処理

トランザクションワークロードでは、AlloyDB は標準の PostgreSQL の4倍以上高速で、要求の高いエンタープライズ ワークロードに適しています。読み取り接続は低レイテンシのスケールアウトするリードレプリカでスケールします。

高可用性

AlloyDB はメンテナンスを含めて 99.99% のアップタイムの SLA を提供します。ほとんどのデータベース障害をデータベースのサイズや負荷に関係なく 60 秒以内に自動的に検出して回復します。

リアルタイムのビジネス インサイト

AlloyDB は分析クエリで標準の PostgreSQL の最大 100 倍の速度でビジネス インテリジェンス、レポート、ハイブリッド トランザクションおよび分析ワークロード(HTAP)の実行時に運用パフォーマンスへ影響しません。

わかりやすい料金体系

料金は明瞭で予測可能であり、高価で制限付きのライセンスではなく、I/O 料金もありません。

全体概要

  • クラスタ:AlloyDB はクラスタにすべてのリソースが含まれます。必要に応じてスケールするストレージ レイヤを全インスタンスで共有します。
  • プライマリ インスタンス:プライマリ インスタンスはクラスタ内の読み取り/書き込みの接続ポイントを提供します。
  • フェイルオーバー レプリカ:フェイルオーバー レプリカはユーザーが直接アクセスすることはできませんが、プライマリ インスタンスに障害が発生したときに自動的にフェイルオーバーする先のインスタンスです。
  • 読み取りプール:読み取りプールはクラスタ内の読み取り専用の接続ポイントを提供します。プールを複数作成したり、プール内のインスタンスのスペックやインスタンス数を変更できます。

パフォーマンス

パフォーマンスの傾向については、以下のブログに記載しています。

AlloyDB は標準的な PostgreSQL と比較して 4 倍、競合の類似サービスと比較して 2 倍のトランザクションを処理します。また、標準的な PostgreSQL と比較して分析クエリが最大 100 倍高速です。

特に分析クエリは、頻繁にアクセスするデータをメモリ内でカラム型フォーマットで保持して、スキャン、ジョイン、集計を高速化します。

SLA

AlloyDB for PostgreSQL はメンテナンスを含めて 99.99% のアップタイムの SLA を提供します。SLA の対象はマルチゾーン インスタンスとなっており、高可用性のプライマリ インスタンスか少なくとも2つのノードの読み取りプール インスタンスとなっています。そのため、本番ワークロードで読み取りプールを使用する場合には、各々のプールで2つ以上のノードを設定したほうが良いと思われます。

SLO を満たしていない場合は以下の金融クレジットを受け取ることが可能です。返金を受け取るには30日以内にユーザーがテクニカルサポートへ、ダウンタイム機関と発生日時を示すログファイルと共に通知する必要があります。

月間稼働率 金融クレジット
99.0% - < 99.99% 10%
95.0% - < 99.0% 25%
< 95.0% 50%

AlloyDB Service Level Agreement (SLA)

リージョン

Cloud Console で確認すると以下の 6 リージョンで AlloyDB を利用できるようです。

  • asia-northeast1 (東京)
  • asia-southeast1 (シンガポール)
  • europe-west1 (ベルギー)
  • europe-west3 (フランクフルト)
  • us-central1 (アイオワ)
  • us-west4 (ラスベガス)

AlloyDB の料金

AlloyDB の料金は、CPU と メモリの料金、ストレージの料金、ネットワークの料金で構成されます。プレビュー期間中は無料で利用できましたが、引き続き 2022 年 12 月 31 日まで無料で利用できます。 なお、プレビュー期間中は AlloyDB を無料で利用できます。

AlloyDB for PostgreSQL pricing

AlloyDB の料金ページでは 13 リージョンで料金が設定されていますが、サービスが提供されている6リージョンについて述べます。

CPU と メモリの料金

CPU とメモリは以下の単価の料金となっています。高可用性のプライマリ インスタンスの場合はフェイルオーバー レプリカがあるため2倍の料金になります。

リージョン vCPUs Memory
Tokyo $0.08458 / vCPU時 $0.01434 / GB時
Singapore $0.08128 / vCPU時 $0.01378 / GB時
Belgium $0.07269 / vCPU時 $0.01232 / GB時
Frankfurt $0.07797 / vCPU時 $0.01322 / GB時
Iowa $0.06608 / vCPU時 $0.0112 / GB時
Las Vegas $0.07467 / vCPU時 $0.01266 / GB時

東京リージョンでは、1ヶ月 730 時間換算で以下の料金となります。高可用性のプライマリ インスタンスの場合は料金が2倍になります。

マシンタイプ 1ヶ月:東京(asia-northeast1)
2 vCPU, 16 GB $290.978/月
4 vCPU, 32 GB $581.956/月
8 vCPU, 64 GB $1163.912/月
16 vCPU, 128 GB $2327.824/月
32 vCPU, 256 GB $4655.648/月
64 vCPU, 512 GB $9311.296/月

ストレージの料金

ストレージ料金は、以下となります。ストレージはインスタンス数に関わらず、クラスタ毎に発生する費用です。また料金はストレージサイズ飲みに発生し、ストレージ I/O は無料です。

リージョン 1時間:GB  1ヶ月:TB
東京 $0.000526 / GB時 $383.98 / TB時
シンガポール $0.0005054 / GB時 $368.942 / TB時
ベルギー $0.000452 / GB時 $329.96 / TB時
フランクフルト $0.0004849 / GB時 $353.977 / TB時
アイオワ $0.0004109 / GB時 $299.957 / TB時
ラスベガス $0.0004643 / GB時 $338.939 / TB時

ネットワークの料金

AlloyDB の内向きへのネットワークは無料です。外向きのトラフィックは宛先によって異なります。

以下のリージョン間ネットワーク下り料金は、クロスリージョンの AlloyDB レプリカ間のトラフィックと、AlloyDB から他のリージョンの GCP サービスに送信されるトラフィックに適用されます。同じリージョン内の AlloyDB からの送信は無料です。

Northern America Europe Asia Indonesia Oceania Latin America
Northern America $0.02/GB
Europe $0.05/GB $0.02/GB
Asia $0.08/GB $0.08/GB $0.08/GB
Indonesia $0.10/GB $0.10/GB $0.10/GB N/A
Oceania $0.10/GB $0.10/GB $0.10/GB $0.08/GB $0.08/GB
Latin America $0.14/GB $0.14/GB $0.14/GB $0.14/GB $0.14/GB $0.14/GB

やってみる

AlloyDB を起動してアクセスしてみます。

AlloyDB を起動する

まずは Cloud Console で AlloyDB for PostgreSQL のメニューを開きます。上か下のCREATE CLUSTERをクリックして AlloyDB クラスタを作成していきます。

クラスタタイプを選択します。シングルゾーンのクラスタはまだサポートされていません。ここでは高可用性で読み取りプールを含むHighly available with read poolsを選択してCONTINUEをクリックします。

以下のように設定値を入力してCONTINUEをクリックします。Network で選択した VPC がプライベート サービス コネクトを設定していない場合は設定を行ってください。

項目 設定値 備考
Cluster ID 任意 ここでは test-cluster-1 を設定
Password 任意
Region asia-northeast1(Tokyo)
Network (任意の VPC)

Instance ID に任意のインスタンス ID 名を入力して、マシンタイプを選択して、必要に応じてフラグを設定します。設定が完了したらCONTINUEをクリックします。

読み取りプールを追加するためにADD READ POOLをクリックします。

Read pool Instance ID に任意の読み取りインスタンス ID 名を入力してノード数を設定します。マシンタイプを選択して、必要に応じてフラグを設定します。設定が完了したらADD READ POOLをクリックします。

必要に応じて更に読み取りプールを追加して、完了したらCREATE CLUSTERをクリックします。

クラスタ全体が作成されるまでしばらく待ちます。

作成されると以下のようになります。

プライマリ インスタンスと読み取りプールの Private IP をメモしておきます。

アクセスしてみる

AlloyDB と接続している VPC に Compute Engine を用意して、PostgreSQL クライアントである psql をセットアップしておきます。

psql でログインしてみます。ここではクライアント OS は Rocky Linux 8 を使用しています。psql でログインすると AlloyDB for PostgreSQL は v14.4 として認識されています。

PGPASSWORD=<password> psql -U postgres -h <Primary IP Address>
psql (10.21, server 14.4)
WARNING: psql major version 10, server major version 14.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=> 
[/basj]

デフォルトの状態で拡張機能を確認してみます。プレビュー当初は PL/pgSQL のみでしたが、現在は4個入っています。

- PL/pgSQL:ストアドファンクションなどを作成するための手続き型言語です。
- google_columnar_engine:分析クエリを高速化するカラム型エンジンの機能です。
- google_db_advisor:2022年12月12日にサポートされたインデックスアドバイザーで、処理するクエリに基づき新しいインデックスを推奨する機能です。
- HypoPG:ユーザーがインデックスを使用した場合のプランを作成できる機能です。上記のインデックスアドバイザーで使用しているのかもしれません。



テーブルを作成します。



レコードを挿入します。

[psql]
postgres=> INSERT INTO sample VALUES (1, 'Classmethod, Inc.');
[/sql]

テーブルを確認します。



一度 AlloyDB から切断して psql を終了します。



次に読み取りプールへアクセスします。


PGPASSWORD=<password> psql -U postgres -h <Read pool IP Address>
psql (10.21, server 14.4)
WARNING: psql major version 10, server major version 14.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=>

テーブルを確認します。

postgres=> SELECT * FROM sample;
 id |       data        
----+-------------------
  1 | Classmethod, Inc.
(1 row)

レコードを挿入してみます。読み取りのみなのでエラーになります。

[psql] postgres=> INSERT INTO sample VALUES (2, 'Annotation, Inc.'); ERROR: cannot execute INSERT in a read-only transaction [/sql]

トランザクションが読み取り専用か確認すると、transaction_read_onlyonになっており、読み取り専用であることが分かります。

postgres=> show transaction_read_only;
 transaction_read_only 
-----------------------
 on
(1 row)

さいごに

筆者は 5月に AlloyDB for PostgreSQL のプレビューが開始されてから半年以上経過しましたが、ようやく一般提供となりました。GA になり十分にプロダクションレディーの状態なので、現在 Cloud SQL for PostgreSQL を使用されている利用されている方は AlloyDB for PostgreSQL を検討するのは如何でしょうか。また AlloyDB for PostgreSQL は Migration Database Service に対応しているので、既存で PostgreSQL をご利用の方は移行を試して検証してみてください。

Google Cloud 上で、完全に新規にアプリケーションを作成する場合で RDBMS を必要とするのであれば Cloud Spanner をお勧めすることが多いですが、既存資産がある場合は是非 AlloyDB for PostgreSQL の利用を検討してみてください。