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