🔖

AlloyDB Omni を試してみる

2023/11/20に公開

はじめに

こんにちは、クラウドエース データML ディビジョン所属の後藤です。

データML ディビジョンでは、Google Cloud が提供しているデータ領域のプロダクトについて、新規リリースをキャッチアップするための調査報告会を毎週実施しています。
新規リリースの中でも、特に重要と考えるリリースを記事としてまとめ、本ページのように公開しています。

今回紹介するリリースは、10月11日のリリースで一般提供となった、「AlloyDB Omni」についてです。

AlloyDB Omni とは

AlloyDB Omni は、PostgreSQL 互換データベースサービスである AlloyDB のダウンロード版です。
コンテナ化された AlloyDB データベースエンジンを独自の Linux ベースのコンピューティング環境で実行できます。

詳細については、公式ドキュメントを参照してください。

ここでは、特徴の一部を取り上げて紹介します。

特徴

AlloyDB Omni には、以下のような AlloyDB の主要な機能が備わっています。

  • PostgreSQL 互換のデータベースサーバー
  • 使用パターンに基づいて、クエリのパフォーマンスを向上させることのできる新しいインデックスを推奨する、インデックスアドバイザー
  • カラムナエンジン
  • 自動メモリ管理などの PostgreSQL サーバーに対するさまざまな最適化と機能強化

また、パフォーマンスに関連する特徴は以下のようなものがあります。

  • 高速なトランザクション処理
    • Google のパフォーマンステストでは、トランザクションワークロードに対して、標準の PostgreSQL より2倍以上高速
  • リアルタイムのビジネス分析情報
    • Google のパフォーマンステストでは、標準のPostgreSQL と比べて最大100倍高速
  • 組み込みの生成 AI(AlloyDB AI)
    • 標準の PostgreSQL と比べて最大10倍高速にベクトルクエリを実行できる
    • AlloyDB のローカルモデルと Vertex AI でホストされているリモートモデルの両方にアクセス可能
    • LangChain などの オープンソースの生成 AI ツールに保存されているデータにアクセスし、AlloyDB 内のデータと組み合わせることも可能
    • 記事執筆時点(2023/11/14)では、プレビュー機能

システム要件

AlloyDB Omni をインストールするためには、以下の要件を満たす必要があります。

  • Debian や Ubuntu などの Debian ベースの OS、または Red Hat Enterprise Linux バージョン 8 以降を実行するマシン
  • x86/AMD64 アーキテクチャを備えた2つ以上の CPU
  • 最低 2 GB の RAM
    最適なパフォーマンスを得るには、各 CPU に8GBの RAMを割り当てることを推奨
  • 少なくとも 20 GB の利用可能なストレージ
  • OS内の無制限の root アクセス
  • Docker バージョン 20.10 以降
  • Linux カーネル バージョン 4.18 以降
    最高のパフォーマンスを得るには、カーネル バージョン 5.3 以降を推奨
  • Linux cgroup v2 が有効である
  • Google Cloud CLI が利用できる
  • TCP ポート 5432 が他のサービスで利用されていない

公式ドキュメント上では、AlloyDB Omni を Google Cloud の VM インスタンスにインストールする場合、上記要件を満たすことのできる、n2-highmem インスタンスの利用が推奨されています。

ユースケース

実稼働でのユースケースとしては、以下のような場合が考えられます。

  • 規制やデータ主権に関する要件のため、クラウド環境を利用できない場合
  • クラウドへの移行に向けて、データベースを移行してモダナイズしたい場合
  • ローカルのデータベースが必要な場合
  • インターネットやクラウドから切り離しても稼働し続けるデータベースが必要な場合
  • レイテンシを最小限にするために、ユーザーの近くでデータベースを稼働させる必要がある場合
  • 同じデータベースを複数のクラウドで運用する必要がある場合

また、開発におけるユースケースとしては、以下のような場合が考えられます。

  • ローカルに開発用のデータベースが必要な場合
  • データ移行やパフォーマンスの検証が必要な場合

料金

料金の詳細は AlloyDB Omni pricing をご参照ください。

記事執筆時点(2023/11/14)の料金体系は、以下のようなサブスクリプションのプランとなっております。

  • デベロッパー
    • 無料
    • 趣味や個人利用、その他の非本番稼働のユースケースに最適
  • スターター
    • 本番環境ワークロード向けのプラン
    • 16個の vCPU が利用可能
    • 月額1,295 USD
  • 標準
    • 本番環境ワークロードのスケーリング向けのプラン
    • 100個の vCPU が利用可能
    • 月額6,995 USD
    • 1年契約で15%オフ、3年契約で30%オフ

AlloyDB Omni を VM インスタンスにインストール

それでは、Google Cloud の Compute Engine を利用して、AlloyDB Omni をインストールしてみましょう。

VM インスタンスの構成

注意が必要な点は、以下の3つです。

  • vCPU が2個以上であること
  • メモリが vCPU の数 × 8 GB 以上であること
  • ブートディスクのサイズが20 GB 以上であること

今回、AlloyDB Omni をインストールする環境は以下のとおりです。

  • リージョン
    • asia-northeast1
  • ゾーン
    • asia-northeast1-b
  • マシン構成
    • e2-highmem-2(2 vCPU、 1 コア、16 GB メモリ)
  • ブートディスク
    • オペレーティングシステム
      • Debian
    • バージョン
      • Debian GNU/Linux 11(bullseye)
    • サイズ(GB)
      • 20 GB

インストール手順

以下の手順でインストールしていきます。

  1. Docker インストール

AlloyDB Omni の起動には、Dockerのインストールが必要なため、事前にインストールします。

sudo apt-get update
sudo apt-get -y install ca-certificates curl gnupg lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. AlloyDB Omni インストール用ディレクトリの作成

AlloyDB Omni のインストール用ディレクトリも事前に作成しておきます。

mkdir /home/$USER/alloydb-data
  1. AlloyDB Omni CLI のインストール

AlloyDB Omni CLIをインストールします。
今回は利用するリージョンがasia-northeast1であるため、asis-apt.pkg.devから取得します。
利用するリージョンに応じて、us-apt.pkg.deveurope-apt.pkg.devに置き換えます。

curl https://asia-apt.pkg.dev/doc/repo-signing-key.gpg | sudo apt-key add -
sudo apt update
echo "deb https://asia-apt.pkg.dev/projects/alloydb-omni alloydb-omni-apt main" \
| sudo tee -a /etc/apt/sources.list.d/artifact-registry.list
sudo apt update
sudo apt-get install alloydb-cli
  1. AlloyDB Omni サーバーのインストール

事前に作成した AlloyDB Omni のデータ用のディレクトリに、AlloyDB Omni のサーバーソフトウェアをインストールします。

sudo alloydb database-server install --data-dir=/home/$USER/alloydb-data

AlloyDB Omni をインストールした際に、以下のようにシステム要件のチェックが行われます。

Starting system check for AlloyDB Omni on local machine...

Checking for minimum of 2 vCPUs...SUCCESS
└─Detected 2 vCPUs.
Checking for minimum of 2.00GB of RAM...SUCCESS
└─Detected total RAM: 15.63GB.
Checking for Linux kernel...SUCCESS
└─Linux kernel detected.
Checking Linux kernel version is 4.10+...SUCCESS
└─Linux kernel version: 5.10.0-26-cloud-amd64
Checking Linux distribution is Debian-based or RHEL...SUCCESS
└─Compatible Debian-based distribution detected.
Checking cgroups v2 is enabled...SUCCESS
└─cgroups v2 is enabled.
Checking Docker is installed...SUCCESS
└─Docker installation found.
Checking Docker daemon is running...SUCCESS
└─Docker service is currently active.
Checking Docker server version is 20.10+...SUCCESS
└─Compatible Docker server version: 24.0.7
Checking for conflicting pre-existing users...SUCCESS
└─No conflicting pre-existing users found.
  1. AlloyDB Omni の起動

インストールした AlloyDB Omni を起動します。

sudo alloydb database-server start

AlloyDB Omni を起動した際にも、以下のようにシステム要件のチェックが行われます。

Starting system check for AlloyDB Omni on local machine...

Checking for minimum of 2 vCPUs...SUCCESS
└─Detected 2 vCPUs.
Checking for minimum of 2.00GB of RAM...SUCCESS
└─Detected total RAM: 15.63GB.
Checking for Linux kernel...SUCCESS
└─Linux kernel detected.
︙

データベース接続

以下のコマンドを実行すると、AlloyDB Omni に接続が可能です。
接続後は、標準の PostgreSQL と同様の操作が可能です。

sudo docker exec -it pg-service psql -h localhost -U postgres

データベースを作成し、サンプルデータを追加後、検索した結果は以下の様になります。

guestbook=# SELECT * FROM entries;
  guestname   |   content   | entryid 
--------------+-------------+---------
 first guest  | I got here! |       1
 second guest | Me too!     |       2
(2 rows)

リードレプリカの作成

上記で作成した AlloyDB Omni のサーバーをプライマリサーバーとして、リードレプリカを作成していきます。

リードレプリカ用のサーバーの要件

リードレプリカのサーバーにも、AlloyDB Omni をインストールする必要があるため、システム要件を満たす必要があります。
またプライマリサーバーに対して、TCP ポート 5432 を利用した通信が可能な環境であれば、リージョンや他のクラウド、ローカル環境であってもリードレプリカサーバーとしての運用が可能です。
プライマリサーバー側のファイアウォールやネットワークの設定において、リードレプリカサーバーからの TCP ポート 5432 の受信トラフィックを許可する必要はあります。

リードレプリカ用の VM インスタンスの構成

事前に、リードレプリカ用の VM インスタンスを作成します。
今回は、プライマリサーバーとゾーンのみが異なる VM インスタンスを作成します。

  • リージョン
    • asia-northeast1
  • ゾーン
    • asia-northeast1-a
  • マシン構成
    • e2-highmem-2(2 vCPU、 1 コア、16 GB メモリ)
  • ブートディスク
    • オペレーティングシステム
      • Debian
    • バージョン
      • Debian GNU/Linux 11(bullseye)
    • サイズ(GB)
      • 20 GB

プライマリサーバーの設定

  1. /var/alloydb/config/pg_hba.confに以下の2行を追加します
    IP_RANGE は、リードレプリカ用のインスタンスが配置されているサブネットの CIDR で置き換えます
host all         alloydbreplica IP_RANGE trust
host replication alloydbreplica IP_RANGE trust
  1. プライマリサーバーを再起動します
sudo alloydb database-server stop
sudo alloydb database-server start

リードレプリカサーバーの作成および構成

  1. プライマリサーバーと同様に、リードレプリカサーバーにも AlloyDB Omni をインストール
    AlloyDB Omni サーバーのインストールを以下に変更します。
    SOURCE_IP はプライマリサーバーの IP アドレスで置き換えます。
sudo alloydb database-server install \
  --data-dir=/home/$USER/alloydb-data \
  --replica-source-ip=SOURCE_IP
  1. リードレプリカサーバーを起動
sudo alloydb database-server start

リードレプリカのステータスの確認

プライマリサーバーで、以下のコマンドを実行します。

sudo docker exec -it pg-service psql -h localhost -U alloydbadmin -c "select * from pg_stat_replication"

リードレプリカごとに1行出力されます、リードレプリカを1件のみ設定しているため、出力件数が1件であることが、以下の出力から確認できます。

 pid | usesysid |    usename     | application_name | client_addr | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_lsn  | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag | replay_lag | sync_priority | sync_state |          reply_time           
-----+----------+----------------+------------------+-------------+-----------------+-------------+-------------------------------+--------------+-----------+-----------+-----------+-----------+------------+-----------+-----------+------------+---------------+------------+-------------------------------
  80 |    16385 | alloydbreplica | walreceiver      | 10.146.0.3  |                 |       32860 | 2023-11-14 04:32:16.530496+00 |              | streaming | 0/5000060 | 0/5000060 | 0/5000060 | 0/5000060  |           |           |            |             0 | async      | 2023-11-14 04:32:36.606368+00
(1 row)

プライマリサーバーにレコードを1行追加後、リードレプリカに対して検索をすると、以下のように反映されていることが分かります。

guestbook=# SELECT * FROM entries;
  guestname   |   content   | entryid 
--------------+-------------+---------
 first guest  | I got here! |       1
 second guest | Me too!     |       2
 third guest  | replica     |       3
(3 rows)

AlloyDB Omni を利用したオンライン予測を試してみる

記事執筆時点(2023/11/14)でプレビューである AlloyDB AI の機能を利用してみます。
今回は、AlloyDB Omni の DB の中身を、Vertex AI のモデルの入力として与え、結果を返却します。
AlloyDB Omni の追加料金は発生しませんが、Vertex AI の利用による料金は発生するためご注意ください。

事前に、テスト用の VM インスタンスを作成します。
構成は、プライマリサーバーやリードレプリカサーバーと同じです。

事前準備

  1. サービスアカウントの作成

  2. 作成したサービスアカウントのサービスアカウントキーを作成し、JSON 形式でダウンロード

  3. ダウンロードしたサービスアカウントキーを AlloyDB Omni をインストールする VM インスタンスに配置

  4. 作成したサービスアカウントに対して、 Vertex AI を利用できるよう、IAM ロールを付与

以下の、PROJECT_ID および SERVICE_ACCOUNT_ID を、それぞれ利用するプロジェクト ID と作成したサービスアカウントの ID に置き換えて実行します。

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SERVICE_ACCOUNT_ID" \
    --role="roles/aiplatform.user"
  1. AlloyDB Omni をインストール

AlloyDB Omni サーバーのインストールを以下に変更します。
KEY_PATH は VM インスタンスに配置したキーのパスに置き換えます。

sudo alloydb database-server install \
    --data-dir=/home/$USER/alloydb-data \
    --enable-alloydb-ai=true \
    --private-key-file-path=KEY_PATH \
    --vertex-ai-region="us-central1"
  1. AlloyDB Omni サーバーを起動
sudo alloydb database-server start

AlloyDB Omni を利用したオンライン予測

  1. AlloyDB Omni に接続
sudo docker exec -it pg-service psql -h localhost -U postgres
  1. データベースの作成
create database bison;
  1. データベースの切り替え
\c bison
  1. テーブルの作成

本のタイトルと説明を登録する books テーブルを作成します。

CREATE TABLE books(
    id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description VARCHAR(255) NOT NULL
);
  1. データを追加
INSERT INTO
  books (
    title,
    description
  )
VALUES(
  'Momotaro the Peach Boy',
  'Found floating on the river inside a peatch by an old couple, Momotaro grows up and fights the terrible demons who have terrorized the village for years.'
);

検証に使用したいデータの準備ができました。
次は、AlloyDB Omni から オンライン予測を呼び出すための準備を行います。

  1. 拡張機能の google_ml_integration を有効化
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
  1. ユーザー postgres に オンライン予測用の関数 ml_predict_row へのアクセス許可を付与
GRANT EXECUTE ON FUNCTION ml_predict_row TO postgres;

オンライン予測を呼び出す準備ができました。

  1. 生成 AI を利用し、生成された結果を取得

今回は、Vertex AI の text-bison モデルを利用して、生成された概要を取得します。
登録されている本のタイトルと説明をプロンプトに利用しています。

SELECT
  title,
  ml_predict_row(FORMAT('publishers/google/models/%s', 'text-bison'),
    json_build_object(
      'instances', json_build_object('prompt','can you create a summary for the '||title||' based on the following description - '||description||'?'),
      'parameters', json_build_object('maxOutputTokens',256)
    )
  )->'predictions'->0->'content'
FROM
  titles
WHERE
  title='Momotaro the Peach Boy';

結果は以下のようになりました。
登録されている説明をベースに、概要が作成されていることが分かります。

         title          |                                                                                                                                                                                                                                                                                                                                                ?column?                                                                                                                                                                                                                                                                                                                                                
------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Momotaro the Peach Boy | " Momotaro the Peach Boy is a classic Japanese folktale about a boy born from a peach. The story begins when an old couple finds a giant peach floating down the river. They open it and find a baby boy inside, whom they name Momotaro. Momotaro grows up to be a strong and brave boy, and one day he decides to go on a journey to defeat the terrible demons who have been terrorizing the village. \n\nAlong the way, Momottaro meets a dog, a monkey, and a pheasant, who join him on his quest. Together, they face many challenges, but they eventually reach the demons' castle and defeat them. Momotaro and his friends return to the village as heroes, and they live happily ever after.”
(1 row)

まとめ

今回の記事では、AlloyDB Omni についてご紹介しました。

AlloyDB Omni は AlloyDB のダウンロード版であり、任意の場所で実行できるように設計されています。
クラウドが利用できない場合や、複数のクラウドを利用する場合など、幅広い用途で利用できるサービスです。
現在はプレビュー機能である AlloyDB AI が一般提供となった際には、さらなる活用もできるようになるでしょう。

また、AlloyDB Omni は AlloyDB のお試し版としての利用も可能であるように感じました。
AlloyDB Omni をお試しで利用した場合に、AlloyDB を利用することのメリットを得られそうであれば、 AlloyDB の利用も検討すべきでしょう。
バックアップやフェイルオーバー、スケールアウトなどクラウドを利用したサービスならではのメリットを得ることができます。

Discussion