PgDog:一個PostgreSQL分布式集群中間件
PgDog 是一個實現了 PostgreSQL 分片、連接池以及負載均衡功能的中間。PgDog 使用 Rust 語言編寫,支持跨平臺(Linux、Mac OS、Windows),具有高性能和高可靠性,可以在不需要修改任何應用程序的前提下實現 PostgreSQL 數據庫的水平擴展。

如果你使用過 PgCat 連接池,可以把 PgDog 看作它的新一代繼承者。
以下是 PgDog 支持的主要功能特性。
分片功能
PgDog 分片(Sharding)可以將數據庫和數據表等拆分到多個 PostgreSQL 服務器中,每個分片包含數據的一個子集,PgDog 負責解決查詢路由、跨分片查詢和數據移動。

每個分片可以包含多個數據庫,其中一個是主節點(Primary),負責讀寫操作;其他節點是副本(Replica),只能執行查詢操作。
負載均衡
PgDog 工作在 OSI 模型的應用層,支持多個 PostgreSQL 副本的負載均衡。

對于查詢(SELECT)語句,PgDog 提供了三種可配置的策略:隨機(默認)、最小連接、輪詢。
對于修改(INSERT、UPDATE 等)操作,PgDog 指定了一個主節點(Primary),這類操作只會發送到主節點。
健康檢查
PgDog 定期針對副本進行健康檢查,確保數據庫節點能夠接受連接并執行查詢。如果一個節點的健康檢查失效,PgDog 會將其列入禁用主機列表,無法再接受客戶端的請求。

主機禁用具有一定的時效性,如果被禁用的主機恢復了健康檢查,可以自動加入負載均衡的目標中。
事務模式
事務模式使得 PgDog 通過共享少量 PostgreSQL 連接服務數千個客戶端。這是默認的模式。

這種模式下 PgDog 提供了一個連接池,如果連接池建立的上百個 PostgreSQL 連接,那么它就可以支持數十萬個客戶端同時連接。
插件系統
PgDog 支持插件開發,用戶可以開發自定義的插件,用于修改查詢路由、重新查詢或者返回定制結果。PgDog 插件可以使用任何語言進行開發,以共享代碼庫的形式提供,在應用啟動時加載。
認證機制
PostgreSQL 支持各種認證方式,目前 PgDog 實現了其中一部分,例如常用的 SCRAM-SHA-256;PgDog 未來會實現全部認證方式。
會話模式
PgDog 會話模式為每一個客戶端分配一個 PostgreSQL 連接,可以確保提供全部 PostgreSQL 功能,包括持久性會話變量、設置和基于進程的功能(例如 LISTEN/NOTIFY)。一些批處理的任務(例如導入大量數據)在會話模式下的性能會更好。
雖然會話模式不支持共享的服務器連接,但是 PgDog 連接池仍然可以保留一定數量的連接復用,可以減少 PostgreSQL 服務器的消耗。

































