PgBouncerのスループットを4倍に:ClickHouseの手法

Original : We scaled PgBouncer to 4x throughput

Pourquoi c'est important

PostgreSQLマネージドサービスの接続プーリング性能向上は、大規模OLTP環境に直接影響する。

ClickHouseはManaged Postgresサービスにおいて、PgBouncerのフリートをso_reuseportで並列化し、16コアのAWS EC2(c7i.4xlarge)でスループットを最大4倍に向上させたと発表した。

PgBouncerはシングルスレッドのプロセスであり、1つのCPUコアしか使用しない。16vCPUのマシンでは、残り15コアがアイドル状態となり、Postgresの処理能力に達する前にプーリングがボトルネックになる。

ClickHouseはManaged Postgresにおいて、利用可能なコア数に比例したPgBouncerフリートを構築した。各プロセスは`so_reuseport`オプションで同一ポートをバインドし、カーネルが接続をプロセス間で負荷分散する。クライアントからは単一エンドポイントに見え、複数プロセスの存在を意識しない。

課題はクエリキャンセル処理だ。Postgresのキャンセルリクエストは新規接続で届くため、`so_reuseport`環境では別プロセスに届く可能性がある。これを解決するため、各プロセスは互いを認識し、誤着したキャンセルを正しいプロセスへ転送する「ピアリング」機能を実装した。

接続予算はフリート全体で分割され、`max_client_conn`と`max_db_connections`をプロセス数で割ることでPostgresの過負荷を防ぐ。AWS EC2 c7i.4xlarge(16vCPU)を用いたベンチマークでは、単一プロセスと比較してフリート構成が約4倍のスループットを達成した。

Source

clickhouse.com — Lire l'original →