PgDog:一個PostgreSQL分布式集群中間件
PgDog 是一個實現(xiàn)了 PostgreSQL 分片、連接池以及負載均衡功能的中間。PgDog 使用 Rust 語言編寫,支持跨平臺(Linux、Mac OS、Windows),具有高性能和高可靠性,可以在不需要修改任何應用程序的前提下實現(xiàn) PostgreSQL 數(shù)據(jù)庫的水平擴展。
如果你使用過 PgCat 連接池,可以把 PgDog 看作它的新一代繼承者。
以下是 PgDog 支持的主要功能特性。
分片功能
PgDog 分片(Sharding)可以將數(shù)據(jù)庫和數(shù)據(jù)表等拆分到多個 PostgreSQL 服務器中,每個分片包含數(shù)據(jù)的一個子集,PgDog 負責解決查詢路由、跨分片查詢和數(shù)據(jù)移動。
每個分片可以包含多個數(shù)據(jù)庫,其中一個是主節(jié)點(Primary),負責讀寫操作;其他節(jié)點是副本(Replica),只能執(zhí)行查詢操作。
負載均衡
PgDog 工作在 OSI 模型的應用層,支持多個 PostgreSQL 副本的負載均衡。
對于查詢(SELECT)語句,PgDog 提供了三種可配置的策略:隨機(默認)、最小連接、輪詢。
對于修改(INSERT、UPDATE 等)操作,PgDog 指定了一個主節(jié)點(Primary),這類操作只會發(fā)送到主節(jié)點。
健康檢查
PgDog 定期針對副本進行健康檢查,確保數(shù)據(jù)庫節(jié)點能夠接受連接并執(zhí)行查詢。如果一個節(jié)點的健康檢查失效,PgDog 會將其列入禁用主機列表,無法再接受客戶端的請求。
主機禁用具有一定的時效性,如果被禁用的主機恢復了健康檢查,可以自動加入負載均衡的目標中。
事務模式
事務模式使得 PgDog 通過共享少量 PostgreSQL 連接服務數(shù)千個客戶端。這是默認的模式。
這種模式下 PgDog 提供了一個連接池,如果連接池建立的上百個 PostgreSQL 連接,那么它就可以支持數(shù)十萬個客戶端同時連接。
插件系統(tǒng)
PgDog 支持插件開發(fā),用戶可以開發(fā)自定義的插件,用于修改查詢路由、重新查詢或者返回定制結(jié)果。PgDog 插件可以使用任何語言進行開發(fā),以共享代碼庫的形式提供,在應用啟動時加載。
認證機制
PostgreSQL 支持各種認證方式,目前 PgDog 實現(xiàn)了其中一部分,例如常用的 SCRAM-SHA-256;PgDog 未來會實現(xiàn)全部認證方式。
會話模式
PgDog 會話模式為每一個客戶端分配一個 PostgreSQL 連接,可以確保提供全部 PostgreSQL 功能,包括持久性會話變量、設置和基于進程的功能(例如 LISTEN/NOTIFY)。一些批處理的任務(例如導入大量數(shù)據(jù))在會話模式下的性能會更好。
雖然會話模式不支持共享的服務器連接,但是 PgDog 連接池仍然可以保留一定數(shù)量的連接復用,可以減少 PostgreSQL 服務器的消耗。