概要
PgDog は、Rust製の PostgreSQL向けトランザクションプーラー兼論理レプリケーションマネージャ。 シャーディング や 負荷分散、 論理レプリケーション など、スケーラブルな運用に最適。 KubernetesやDockerでの 迅速な導入 が可能で、数十万コネクションを効率的に管理。 PgCat の後継として設計され、 クロスシャードクエリ や柔軟な設定を実現。 オープンソース かつAGPL v3ライセンスで、内部利用やカスタマイズも自由。
PgDog概要と特徴
- PgDog は、 トランザクションプール と 論理レプリケーション管理 を兼ね備えた PostgreSQL用プロキシ。
- Rust製 であり、高速かつ安全なネットワークプロキシを実現。
- 数百DB・数十万コネクション の管理が可能なスケーラビリティ。
- シャーディング をサポートし、クエリ内容に応じて自動的に最適なシャードにルーティング。
- クロスシャードクエリ や 分散COPY にも対応。
導入方法
- Kubernetes
- Helmチャート が公式GitHubで提供。
- git clone https://github.com/pgdogdev/helm cd helm helm install -f values.yaml pgdog ./
- Docker
- Docker Compose で手軽にテスト可能。
- docker-compose upでビルドと起動が完了。
- 起動後は psql 等で
-h 127.0.0.1 -p 6432 -U postgresで接続。
- ローカル実行
- Rustコンパイラ をインストールし、
cargo build --releaseでビルド。 - 設定ファイル(pgdog.toml, users.toml)を用意し、
cargo run --releaseで起動。
- Rustコンパイラ をインストールし、
シャーディングと分散処理
- シャーディング
- クエリからシャーディングキーを抽出し、自動で適切なシャードへルーティング。
- 複数シャードへのクエリ発行や、結果のメモリ内集約・返却も自動化。
- 分散COPY
- CSVパーサ 内蔵で、COPYコマンドを各シャードに自動分割。
- 事前のデータ整形不要で、シャーディング済みDBへの高速データ投入が可能。
- 論理レプリケーション
- PostgreSQL論理レプリケーションプロトコル を理解し、バックグラウンドでデータ分割。
- 本番稼働中でもダウンタイムなしでシャード追加やDB拡張が可能。
負荷分散と高可用性
- アプリ層(OSI Layer 7)ロードバランサ として機能。
- ラウンドロビン・ランダム・最小アクティブ接続数 等の戦略を選択可能。
- SELECT はレプリカ、書き込みはプライマリへ自動振り分け。
- ヘルスチェック で障害発生時は自動的に対象DBを切り離し、可用性を維持。
- PgBouncerスタイル管理DB と OpenMetricsエンドポイント を提供し、Datadog等で監視可能。
設定と柔軟性
- 設定ファイル(pgdog.toml, users.toml) で柔軟な運用が可能。
- 多くの設定は ランタイムで即時反映、再起動不要。
- PgBouncerやPgCat利用経験者には馴染みやすい設計。
- サンプル設定やシャーディング用設定例もリポジトリに同梱。
PgCat・Citusとの比較
- PgCat の後継で、 完全非同期・マルチスレッド 設計。
- Citus はPostgres拡張として動作、PgDogは 外部プロキシ としてどこでも展開可能。
- クロスシャードクエリ ・ 分散集約 ・ ORDER BY 等、実用的なOLTP機能を優先。
- Citusより成熟度は劣るが、 パフォーマンス や 柔軟性 で優位性あり。
パフォーマンスとアーキテクチャ
- Rust+Tokio による高速・低レイテンシ設計。
- メモリアロケーション最小化 で、PgCat比3~5%高速化。
- pg_query でPostgreSQLの全クエリを正確に解析・ルーティング。
- マルチスレッド で数千~数百万接続にも対応。
今後のロードマップ・貢献
- 論理レプリケーションによる(再)シャーディング や クエリブロック・書き換え などを計画。
- マルチテナント運用 や 不正クエリの制御 も視野。
- オープン開発 を推進し、ユーザーの要望を積極的に取り入れ。
- AGPL v3ライセンス で、内部利用・カスタマイズも自由。
- コントリビューションガイドラインを遵守し、開発参加歓迎。
まとめ
- PgDog は、 PostgreSQLのスケーラビリティ課題を解決 するための新世代プロキシ。
- 高性能・高可用性・柔軟性 に優れた設計で、クラウド含む多様な環境で活用可能。
- シャーディング・分散処理・論理レプリケーション をシンプルに導入・運用。
- オープンソースコミュニティ でのフィードバック・貢献を歓迎。