PgDog: 透過 Proxy 實現 Postgres 的水平擴展
PgDog 是一款高性能代理,旨在透過實現水平擴展來解決 PostgreSQL 的擴展限制。藉由在資料庫前方放置一個代理,PgDog 允許使用者在維持標準 PostgreSQL 介面的同時,擴展至 100 TB+ 的資料表與每秒 100 萬次查詢 (QPS)。
核心功能與部署
PgDog 同時扮演分片器 (sharder)、連線池 (connection pooler) 與負載平衡器 (load balancer) 的角色。它使用 Rust 編寫,以確保性能與可靠性,使其能夠透過多執行緒執行來利用所有可用的 CPU 核心。
關鍵部署特性包括:
- 基礎設施無關性:它可以部署在本地端、私有雲帳戶,或使用 Docker 映像檔部署在筆記型電腦上。
- 零應用程式變更:使用者可以透過更改應用程式配置中的
DATABASE_URL來實作 PgDog,無需重寫應用程式邏輯。 - 零依賴性:其設計避免了隱藏的 serverless 成本與外部依賴。
性能與生產環境狀態
PgDog 目前在數十個部署環境中處理超過 200 萬 QPS 的生產環境,並已分片超過 20 TB 的數據。
與傳統 Postgres 擴展方式的比較
傳統的 PostgreSQL 擴展通常需要複雜的應用程式層分片或使用核心擴展。PgDog 基於代理的方法與 Citus 等工具不同,它是作為資料庫前方的一個層級來運作,而非作為核心擴展,這簡化了部署並降低了修改核心資料庫的風險。
使用者體驗與技術洞察
來自從 PgBouncer 等工具遷移過來的用戶社群回饋,突顯了幾項技術優勢:
- LISTEN/NOTIFY 支援:使用者回饋 PgDog 成功解決了通常與交易池 (transaction poolers) 相關的
LISTEN/NOTIFY問題。 - Aurora Failover:「auto mode」功能旨在無縫支援 AWS Aurora 的故障轉移 (failover)。
- Aurora/RDS/EC2:創辦人在 Instacart 擴展 Postgres 的經驗——在 RDS、Aurora 與 EC2 上每分鐘處理數十萬筆雜貨配送訂單——構成了 PgDog 專案的技術基礎。
社群關注點與限制
雖然許多使用者稱讚該代理的穩定性,但社群討論中也提出了一些技術疑慮:
- 配置管理:部分使用者發現,在資料庫頻繁建立與銷毀的 Kubernetes 多租戶環境中,使用 TOML 配置文件的做法較為笨拙。
- 身份驗證快取:有報告指出,在透傳 (passthrough) 期間身份驗證請求被快取,導致角色密碼變更時出現問題。
- 維運開銷:討論指出,雖然擴展是已解決的問題,但高可用性 (HA) 與主要版本升級(可能導致 10-20 分鐘的停機時間)對於自管 Postgres 使用者而言仍是重大的維運挑戰。
- 企業版:PgDog 提供專為 AWS 優化的企業版,並附帶 SLA 保障的支援,不過開源版與企業版之間的具體功能差異尚未詳細說明。
融資與路線圖
PgDog 是一個由三人的團隊,獲得了來自 Basis Set、YC 與 Pioneer Fund 的 550 萬美元融資。這筆資金提供了足夠的營運資金,以持續開發開源核心與企業版。