Slide 1

Slide 1 text

pgrollで実現する スキーマブルーグリーンデプロイメント 第44回 PostgreSQLアンカンファレンス 株式会社スリーシェイク 中楯 直希

Slide 2

Slide 2 text

\du 2 株式会社スリーシェイク Sreake事業部 Oracle産まれOracle育ちの自称DBRE兼SRE見習い 最近PostgreSQL・互換DBを触って遊んでます NewSQLとかDB on k8sとかに興味があります 中楯 直希 @nnaka2992 @nnaka2992.bsky.social

Slide 3

Slide 3 text

- pgrollの紹介 - pgrollを使ったスキーマBGデプロイメントの提案 - 背景 - 手法 - デモ - 感想とまとめ Agenda 3

Slide 4

Slide 4 text

pgrollの紹介 01

Slide 5

Slide 5 text

pgrollの紹介 5 pgroll is an open source command-line tool that offers safe and reversible schema migrations for PostgreSQL by serving multiple schema versions simultaneously. pgrollはオープンソースのコマンドラインツールで、複数のス キーマバージョンを同時に提供することで、 PostgreSQLのス キーマ移行を安全かつ可逆的に行います。 https://github.com/xataio/pgroll/blob/main/README.md

Slide 6

Slide 6 text

pgrollの紹介 6 pgrollの機能 - ゼロダウンタイムの移行 - 古いスキーマと新しいスキーマの並行稼働 - 自動的なカラムのフィリング - 即時ロールバック - 既存のスキーマのサポート - PostgreSQL 14以降のすべてのPostgreSQL対応 - すべて=RDS/Aurora/CloudSQLなどのマネージドPostgreSQL https://github.com/xataio/pgroll/blob/main/README.md

Slide 7

Slide 7 text

pgrollの紹介 7 pgrollの主なコマンド - pgroll init - 対象のデータベースでpgrollを利用するのに必要なスキーマ・関数などを作成す る - pgroll start - 対象のテーブルに対してスキーママイグレーションを開始する - pgroll complete - 対象のテーブルのスキーママイグレーションを完了させる - pgroll rollback - 対象のテーブルのスキーママイグレーションを中止する - pgroll status - 対象のテーブルのステータスを確認する

Slide 8

Slide 8 text

pgrollの紹介 8 pgrollの仕組み - pgrollでは物理テーブルとそのテーブルに対するビューを利用してテーブルスキーマの 平行稼働を実現している。 - ここでは左のテーブルに右のALTER TABLEを適用する場合ついて考える CREATE TABLE users ( id TEXT, fullname TEXT, age float ) ALTER TABLE users ALTER COLUMN age NOT NULL; ALTER TABLE users RENAME COLUMN fullname TO firstname; ALTER TABLE users ADD COLUMN lastname;

Slide 9

Slide 9 text

pgrollの紹介 9 pgrollの仕組み(start) - 新旧両スキーマの特徴を持つ物理スキーマを作成する - 新旧それぞれに必要なカラムとカラム名を提供する VIEWを作成する https://github.com/xataio/pgroll/blob/main/README.md

Slide 10

Slide 10 text

pgrollの紹介 10 pgrollの仕組み(complete) - 旧スキーマの特徴を物理スキーマから取り除く - 旧スキーマのVIEWを削除する https://github.com/xataio/pgroll/blob/main/README.md

Slide 11

Slide 11 text

pgrollを使ったスキーマBGデプロイメントの提案 02

Slide 12

Slide 12 text

背景 12 現代のアプリケーション開発は 短いスパンでのリリースが求められる つまり素早さを支える柔軟なリリースをできる必要がある

Slide 13

Slide 13 text

背景 13 アプリケーションのように データベースもリッチなデプロイメントをしたい - 障害の影響を減らす - 停止時間をなくす - 簡単なロールバック

Slide 14

Slide 14 text

背景 14 アプリケーションのように データベースもリッチなデプロイメントをしたい - 障害の影響を減らす - 停止時間をなくす - 簡単なロールバック 一つのバージョンを利用するアプリケーション で障害が発生しても、残りのバージョンが正常 に稼働する

Slide 15

Slide 15 text

背景 15 アプリケーションのように データベースもリッチなデプロイメントをしたい - 障害の影響を減らす - 停止時間をなくす - 簡単なロールバック スキーマバージョンが平行稼働することで、 DDL実行に伴う停止時間がなくなる オンラインDDLである程度対応可能だが、 PostgreSQLのオ ンラインDDLは限定的

Slide 16

Slide 16 text

背景 16 アプリケーションのように データベースもリッチなデプロイメントをしたい - 障害の影響を減らす - 停止時間をなくす - 簡単なロールバック 新旧のスキーマバージョンが稼働することで、 新バージョンで障害が発生してもスムーズに 旧バージョンにロールバックできる。

Slide 17

Slide 17 text

手法 17 pgrollの並行でスキーマを運用する機能を利用する 1. pgrollによるスキーママイグレーションを開始する 2. 新しいバージョンが利用可能になるまで待機する 3. 新しいバージョンのアプリケーションを一部リリースする 4. 新しいバージョンのアプリケーションの実行に問題がないことを確認する 5. 順次残りの旧アプリケーションに新しいバージョンを適用する 6. pgrollによるスキーママイグレーションを完了する

Slide 18

Slide 18 text

デモ 18 デモ https://github.com/nnaka2992/pgroll_demo/blob/main/demo.gif

Slide 19

Slide 19 text

感想とまとめ 03

Slide 20

Slide 20 text

感想とまとめ 20 - pgrollを利用することで柔軟なスキーママイグレーションが 実現できる - CI/CDにも十分組み込めそう - オンラインDDLが利用できるだけでもユースケースはありそう - 物理テーブルは共有だからパフォーマンス障害は伝搬しそう - 独自記法でのスキーマ管理は辛そう

Slide 21

Slide 21 text

参考 21 - pgroll - https://github.com/xataio/pgroll - Introducing pgroll: zero-downtime, reversible, schema migrations for Postgres - https://xata.io/blog/pgroll-schema-migrations-postgres - デモで利用したコード - https://github.com/nnaka2992/pgroll_demo