PostgreSQL的幾種分佈式架構對比

Postgresql由於強大的功能和良好的擴展性,基於postgresql來做的分佈式架構也比較多,大部分用於分析類場景,下面比較幾種常見的架構特點。

Citus

Citus以插件的方式擴展到postgresql中,獨立於postgresql內核,所以能很快的跟上pg主版本的更新,部署也比較簡單,是現在非常流行的分佈式方案。Citus在蘇寧有大規模應用,微軟也提供citus的商業支持。下面是citus的架構:

在這裏插入圖片描述

Citus節點主要分爲協調節點和工作節點,協調節點不存儲真實數據,只存儲數據分佈的元信息,實際的數據被分成若干分片,打散到不同worker節點中,應用連接協調節點,協調節點進行sql解析,生成分佈式執行計劃,下發到worker節點執行,cn將結果彙總返回客戶端。

Ciitus的主要架構特點如下:
①有兩種表類型:參考表和分佈表,參考表每個協調節點和worker節點都有一份完整的副本,分佈表則會打散分佈到不同worker中。
②可以進行讀寫分離,如上圖cn1爲寫節點,可以通過再增加多個cn讀節點增加集羣讀的能力,寫cn和讀cn之間使用流複製進行元數據同步。
③支持MX模式,可以將元數據也存在某些worker節點中,這樣使得該worker節點能夠直接提供寫的能力,以此增加集羣寫的能力。
④底層worker節點可以通過流複製搭建副本,保證數據高可用。
⑤做join時最好的結果是能夠將計算下推到worker節點,但是隻有在參考表和其他表做join以及兩個表的分佈方式相同的情況下才能下推到worker計算,否則需要將數據拉到協調節點進行計算。
⑥整體架構類似mycat的中間件,因爲沒有全局事務管理,故不能保證數據的實時讀一致性,但是性能上相比要好。數據寫一致性使用2pc來保證。

pgxc && pgxl

Pgxc是經典的分佈式數據庫架構,是真正的企業級HTAP,我們看到市面上很多分佈式數據庫產品都是基於pgxc架構擴展而來。pgxc是和pg內核緊耦合的,是嵌入到pg內核中,最初pgxc的核心開發者將pgxc商業化,創建了stormdb,進行了一些並行算子優化,後來TransLattice公司將stormdb收購,並且將項目開源,就是現在的pgxl,所以pgxc和pgxl是一脈相承的,大部分代碼是直接移植過來的。下面是pgxc的架構:
在這裏插入圖片描述

其實這個架構和citus優點類似,也是分爲協調節點和數據節點,數據也是通過hash分佈到不同數據節點上,只是在集羣中增添了全局事務管理組件,保證全局事務的一致性。

Pgxc的架構特點如下:
①gtm保證全局讀一致性,兩階段提交保證全局寫一致性。
②gtm是整個系統的瓶頸點,在超過150併發的情況下,gtm的瓶頸就會顯現,每一個事務開啓都會去gtm取事務號和快照信息,造成gtm在網絡壓力和分配事務號速度上存在瓶頸。
③多個協調節點間需要同步元數據信息,如果協調節點失敗,不僅會造成ddl hang住,也可能造成兩階段事務的阻塞。
④pgxc的出現主要是在pg在oltp應用場景上的優化,不管是新增gtm,還是數據一致性的保證上面都做得更加精細化。
⑤和citus類似,數據表也可以分爲分佈表和複製表,複製表在每一個數據節點都有一份全量數據。

Greenplum

Greenplum是pivotal公司推出的一款開源olap的mpp數據庫,greenplum的用戶在某種程度上甚至超越了pg,很多人可能是通過greenplum才認識的pg,可見greenplum的風靡。下面是greenplum架構:

在這裏插入圖片描述

Master節點存儲全局系統元數據信息,不存儲真實數據。數據通過hash分佈到不同的segment中,master作爲sql的全局入口,負責在segment中分配工作負載,整合處理結果,返回客戶端。

Greenplum架構特點如下:
①master節點可以做主備,segment節點也有鏡像保證高可用,segment主備儘量混布到不同服務器上。
②支持行列混合存儲引擎,同時支持外部表。
③在join時也涉及到數據跨節點重分佈的問題,這也是share nothing數據庫不可避免的問題。
④高速內部interconnect網絡,實現數據join時的高速移動和彙總。
⑤高效的數據並行加載。

歡迎關注我的公衆號:數據庫架構之美

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章