- Rust + Tokioで書かれた PostgreSQLトランザクションプーリング + シャーディング + ロードバランシング ツールで、数百のデータベースと数十万の接続を効率的に管理
- PgBouncerのように動作しつつ、クエリ解析とレプリケーションまでサポートするPostgreSQL専用のアプリケーション層(OSI L7)プロキシ
- KubernetesおよびDockerで簡単にデプロイでき、クラスタ構成、ロードバランシング、レプリケーション、マルチシャード管理まで 単一構成で処理可能
- 独自の論理レプリケーション管理機能により、既存のPostgreSQLクラスタを停止なしでシャーディング拡張できる
主な機能
-
ロードバランシング
- OSI Layer 7でPostgreSQLクエリベースのトラフィック分散
SELECTはレプリカへ、INSERT/UPDATE などはプライマリノードへ自動ルーティング
- 戦略: round robin, random, least active connections などをサポート
- 障害発生時はリアルタイムヘルスチェックと自動フェイルオーバー
-
トランザクションプーリング
- PgBouncerと同様に、セッション/トランザクション単位のプーリングをサポート
- 数十万のクライアントを少数のPostgreSQL接続で処理可能
-
シャーディングおよびレプリケーション
- SQL解析によって shard keyを抽出し、該当シャードへクエリを自動転送
- クロスシャードクエリは 結果をメモリ上で結合し、ユーザーに単一の応答を提供
COPY コマンドもシャード単位に分割処理
- 論理レプリケーションをサポート: 無停止で既存DBをシャーディング拡張可能
-
リアルタイム構成変更
- PgBouncerスタイルの
.toml 設定を使用し、再起動なしで設定変更可能
- ユーザー別認証、データベース別接続、シャード情報まで設定可能
-
モニタリング
- 標準PgBouncer管理ポート + OpenMetricsをサポート
- Datadog連携例とダッシュボードを含む
1件のコメント
マルチマスター構成にpatroniを使っていますが、
読み取りリクエストが多い構成であれば、maxscaleのように試してみる価値はありそうです