WalShadow: 物理WALからのPostgresレプリケーションをClickHouseへサブ秒で
WalShadow: Sub-second Postgres replication to ClickHouse from physical WAL (clickhouse.com)
要約
ClickHouseは、Postgresの物理WALストリームを直接読み取り、デコードしてClickHouseネイティブブロックとして書き込むオープンソースエンジン「WalShadow」を発表しました。これにより、PostgresのコミットからClickHouseでの可視化まで約200ミリ秒という低遅延と、毎秒289K行という高スループットを実現します。従来の論理レプリケーションベースのCDCシステムと比較して、運用オーバーヘッドとソースインスタンスへの負荷を大幅に削減します。
全文翻訳
WalShadowの紹介: 物理WALからClickHouseへのサブミリ秒Postgresレプリケーション
本日、WalShadowを発表します。これは、Postgresのデータを物理WALから直接ClickHouseにレプリケーションするオープンソースエンジンです。
ベンチマークでは、Postgresでコミットされたトランザクションが約200ミリ秒でClickHouseに表示され、WalShadowは毎秒289K行を維持し、ソースPostgresインスタンスのペースに効果的に追随しました。
従来のCDCベースのシステムとは異なり、WalShadowはPostgresの論理レプリケーションを使用しません。Postgresレプリカが使用するのと同じ物理WALストリームを消費し、ソースデータベースの外でデコードしてから、ClickHouseネイティブのブロックを直接ClickHouseに書き込みます。これにより、Postgresの物理スタンバイに近いレイテンシとスループットを実現しつつ、データを分析のためにClickHouseで即座に利用可能にするレプリケーションアーキテクチャが実現します。
WalShadowは、初期ロード、継続レプリケーション、スキーマ進化、再起動リカバリ、計画的なソース切り替えを含む、完全なレプリケーションライフサイクルをサポートします。
物理WALを直接消費することで、WalShadowは論理レプリケーションスロットの必要性をなくし、論理レプリケーションに関連する運用オーバーヘッドの多くを削減し、ソースPostgresインスタンスのリソース消費を大幅に低減します。また、ADD COLUMN、RENAME COLUMN、DROP COLUMN、CREATE TABLEのような複雑なスキーマ変更もサポートします。
WalShadowは完全にオープンソースであり、本日よりGitHubで利用可能です。
WalShadowをClickHouse Managed Postgresに導入
完全にマネージドされたエクスペリエンスのために、ClickHouse Managed Postgres向けのWalShadowプライベートプレビューも開始します。
物理WALはWalShadowのアーキテクチャの鍵ですが、ほとんどのマネージドPostgresサービスはこれを顧客に公開しないため、WalShadowの使用は不可能です。ClickHouse Managed Postgresはスタックの両側を管理するため、WalShadowをPostgresレプリケーションレイヤーに直接統合し、Postgres WALからClickHouseへのネイティブパスを提供できます。
ClickHouse Managed Postgres上のWalShadowのプライベートプレビューにサインアップしてください。
アーキテクチャ: 物理WALからClickHouseネイティブブロックへ
[画像: WalShadow Schema Decoder Clickhouse.png]
WalShadowは、PostgresからClickHouseへのレプリケーションに新しいアプローチを取り、ClickHouseを分析用の物理スタンバイに変えます。
WalShadowは、Postgresが物理レプリケーションとリカバリのために生成するのと同じWALストリームを消費します。ソースデータベースに変更を論理イベントにデコードさせるのではなく、WalShadowはシャドウPostgresインスタンスを介さずに、4つのステージを経てWALを外部で処理します。
- ライブスキーマを追跡する。 WalShadowはカタログWALレコードをフィルタリングし、スキーマのみのシャドウPostgresインスタンスにリプレイします。これにより、ソーススキーマが進化するにつれて、テーブル、カラム、Postgresタイプの最新のカタログを維持します。
- データ変更を並列でデコードする。 ヒープレコードは、シャドウPostgresインスタンスを経由せずに、Rustベースのデコーダープールに分散されます。
- ClickHouseネイティブブロックを構築する。 バッチャーは、デコードされた行をテーブルごとにグループ化し、中間フォーマット変換なしでデータ忠実性を維持する、完全なClickHouseネイティブブロックを構築します。
- 並列で挿入する。 別個のインサータープールが、複数のブロックを並列でClickHouseに書き込み、デコードと挿入を独立してスケーリングできるようにします。
これにより、PostgresからClickHouseへの直接パスが作成されます。論理デコード出力プラグイン、Kafka、JSONシリアライゼーション、または個別の正規化ステップは不要です。
WalShadowはブロックを並列で処理するため、ClickHouseへの到着順序が前後する可能性があります。WalShadowは、各キーの最新バージョンを保持できるように、ソースWAL位置(_lsn)をすべての行に添付することで正確性を維持します。スキーマ変更やトランケーションなど、厳密な順序が必要な操作は、すべての先行データが耐久性を持つまで待機するバリアを導入してから適用されます。
ソースは物理WALを送信するだけでよく、これにより、変更が1秒以内にClickHouseに到達することを可能にしながら、物理スタンバイと同様のロードプロファイルが得られます。
アーキテクチャの詳細については、アーキテクチャドキュメントを参照してください。パフォーマンスと機能に影響を与えるさまざまなチューニング設定を理解するには、設定ガイドを参照してください。
パフォーマンスベンチマーク
WalShadowを、ClickPipesを支える論理レプリケーションベースの最先端Postgres-ClickHouse CDCツールであるPeerDBと比較しました。
私にとって、この比較はほろ苦いものです。私たちが作成したPeerDBが数千もの顧客にサービスを提供していることを誇りに思っています。WalShadowは、物理WALから直接レプリケーションを再考し、PostgresとClickHouseの統合スタックに近づくことで、その旅を前進させます。
ベンチマークでは、単一テーブルからの継続的な変更ストリームをレプリケートしました。Postgres、ClickHouse、および各レプリケーションツールは同じリージョンで実行されました。それぞれ8 vCPUを持つ控えめなc8i.2xlargeインスタンスを使用しました。パフォーマンスはワークロードによって異なりますが、これらの結果はWalShadowが提供できるものの有用な指標となります。
コミットから表示までのレイテンシ約200ミリ秒
[画像]
コミットから表示までのレイテンシは、Postgresでのトランザクションコミットから、その行がClickHouseで表示されるまでの時間を測定します。ネイティブPostgres物理レプリカは、約50ミリ秒の実用的なベースラインを確立しました。WalShadowは約200ミリ秒を達成し、PeerDBの約10秒と比較して、このベンチマークでは約50倍低いレイテンシでした。
毎秒289,000行の持続スループット
[画像]
ソースPostgresインスタンスは、毎秒約290,000行の挿入を維持し、レプリケーションパイプラインが処理できる最大レートを確立しました。WalShadowは毎秒289,000行をレプリケートし、ボトルネックになることなくソースの速度に効果的に匹敵しました。PeerDBは毎秒約120,000行、つまりソースレートの約40%を維持しました。
これらの結果は、低レイテンシがスループットを犠牲にする必要はないことを示しています。WalShadowは、ソースのほぼ全速で動作しながら、データをリアルタイムに保ちます。
結論とビジョン
ClickHouseでは、PostgresとClickHouseをより近づけるためにいくつかの大きなステップを踏み出してきました。PeerDBの買収、ClickPipesでのPostgres CDCの開始、そしてClickHouse Managed Postgresの導入です。これは、高速OLTPのためのローカルNVMeストレージ上に構築され、高速OLAPのためにClickHouseとネイティブに統合されたエンタープライズグレードのPostgresサービスです。
これらの取り組みは一つの目標を共有しています。それは、開発者に、トランザクションにはPostgres、分析にはClickHouseを、複雑さを追加することなく組み合わせた統一データスタックを提供することです。
WalShadowは、そのビジョンに向けた大きなマイルストーンを表します。物理WALから直接ClickHouseネイティブブロックにレプリケーションすることで、サブミリ秒の分析を提供し、論理レプリケーションの運用オーバーヘッドの多くを排除し、従来の論理デコードパイプラインでは処理が難しい高度なスキーマ変更をサポートします。
今後数ヶ月間、顧客と緊密に連携し、実際のワークロードでWalShadowを強化していきます。すでに初期のデザインパートナーグループと協力しており、アクセスを拡大する準備が整いました。
プライベートプレビューにサインアップしてください。1〜2日以内にアクセスを提供します。
WalShadowは、PostgresとClickHouseがシームレスに連携できるようにするための、現在進行中のいくつかのイニシアチブの1つです。続報にご期待ください。