無狀態 Postgres 查詢路由 1.0.0 發布
發布於 2023-12-05,作者:Yandex
相關開源
SPQR 團隊很榮幸發布 SPQR(無狀態 Postgres 查詢路由)的第一個生產就緒版本。
SPQR 是一個查詢路由,用於通過分片水平擴展 PostgreSQL。SPQR 的設計目標是盡可能輕量,類似於連線池,將資料結構描述的知識減少到必要的最小值。
主要功能
- 分片。如果可能,路由會從事務的第一個語句中確定一個分片,並將客戶端綁定到該分片,直到事務結束。但您可以通過在註解請求中明確指定一個分片或分片鍵。
- 事務和會話池。就像您最喜歡的連線池一樣(Odyssey 或 PgBouncer)。
- 多個路由器,用於容錯。路由器僅為了快取目的而儲存分片規則。有關整個安裝的信息儲存在 QDB 服務中,因此同時運行的路由器數量沒有限制。
- 分片重新平衡。分片之間的數據遷移旨在按比例平衡各分片的工作負載。主要思想是在這些遷移過程中最大限度地減少任何鎖定影響,這是通過減少正在傳輸的數據範圍的大小來完成的。
- 多個伺服器和故障轉移。在路由器配置中,可以為一個分片指定多個伺服器。然後,路由器將在副本之間分配唯讀查詢。但是,除了自動路由之外,您還可以選擇通過在查詢中使用 target-session-attr 參數來顯式定義特定查詢的目標。
- 查詢執行的次要開銷。請參閱此處 和此處 的基準測試 。
專案狀態
SPQR 的基本功能集已在生產環境中使用。但自動分片重新平衡尚未準備好用於生產環境。此外,SPQR 支援一些跨分片查詢,但它們具有不一致的快照,並且未進行 2PC 鎖定以提供真正的跨分片原子性。
目前,該專案由 Yandex Cloud 維護。但是,我們正在尋找新的架構師和貢獻者,以擴大我們的技術視野。一如既往,歡迎任何回饋。
連結
SPQR 在 https://github.com/pg-sharding/spqr 開發和發布。
發布的版本可以在發布頁面找到。