Postgres-XL是一個可橫向擴展的開源數據庫集群,基於Postgres-XC,而Postgres-XC又是基於PostgreSql。PostgreSQL許可證是一種自由開源許可證,類似於BSD或MIT許可證。
Postgres-XL功能:
數據庫集群;
可橫向擴展;
提供多種表分片策略;
采用MPP架構模式(OLAP),可以與OLTP混合使用。
Postgres-XL特性:
可橫向擴展的關系型數據庫(RDBMS);
完成支持集群級別的ACID;
集群范圍的一致性(MVCC);
即支持OLAP應用(MPP架構模式),也支持OLTP應用(讀寫性能擴展);
多租戶安全;
支持分布式Key-Value存儲、支持JSON和XML格式。
但是也存在一些不足的地方:
內部沒有實現高可用機制,需要借助外部機制來實現高可用,如pg流復制、Corosync/Pacemaker等。
增刪節點/重新分片數據(re-shard)的比較復雜。
數據重分布(redistribution)期間會鎖表。
某些外鍵、唯一性約束功能欠缺
Postgres-XL架構圖
主要由GTM、GTM-Proxy、Coordinator、Datanode幾個部分組成。
全局事務管理器GTM
全集群只有一個GTM節點,為了防止該節點出現單點故障影響整個集群,需要配置備節點來保證高可用。
可以通過部署GTM Proxy,來解決GTM性能瓶頸問題。
GTM提供事務間一致性視圖。
它為Postgres-XL數據庫集群中的每個事務提供全局事務ID和快照。
它還提供一些全局值,如sequence和全局時間戳。
全局事務管理器代理GTM-Proxy
與協調器(Coordinator)和數據節點(DataNode)在一起運行;
后端(協調器、數據節點)用它替代GTM,直接與它交互,它做為后端與GTM間的中間人;
將對GTM的請求分組歸集,多個請求一次提交給GTM;
獲取transaction ids(XIDs)范圍;
獲取數據快照。
協調器Coordinator
Coordinator是Postgres-XL對外數據訪問的入口,可以配置多個。但是Postgres-XL並沒有提供負載均衡的機制,需要另外使用其他工具來實現。如上圖中的Load Balancer並不屬於Postgres-XL。
Coordinator節點維護着數據的存儲信息,但不存儲數據本身。接收到一條SQL語句后,Coordinator解析SQL,制定執行計划,然后分發任務到相關的Datanode上,Datanode返回執行結果到Coordinator,Coordinator整合各個Datanode返回的結果,最后返回給客戶端。
數據節點DataNode
實際存儲表和索引數據,數據自動打散分布(或者復制)到集群中各數據節點;
只有協調器連接到數據節點才能可讀寫,直接連接只能讀;
執行協調器下傳的查詢,一個查詢在所有相關節點上並行查詢;
兩個數據節點間可建立一對一通訊連接,交換分布式表關聯查詢的相關信息。
Postgres-XL數據分布
Postgres-XL數據分布有兩種模式: 復制表(Replicated Table)、分布表(Distributed Table)。
- 復制表
表的數據在每一個DataNode上都是完整的。
當Coordinator與DataNode部署在一台機器上時,查詢時只需要本地讀取,減少網絡開銷。不適宜寫操作頻繁的表。
- 分布表
表的數據存放在多個DataNode上,組成一張完整的表。可用的分片策略方式Hash、Round Robin、Modulo。
PostgreSQL、Postgres-XC、Postgres-XL之間的區別
Postgres-XL相對於PostgreSQL的優缺點
Postgres-XL目前還存在很多限制,具體請查看官服說明。