來(lái)源:數(shù)據(jù)庫(kù)架構(gòu)之美
PostgreSQL由于強(qiáng)大的功能和良好的擴(kuò)展性,基于PostgreSQL來(lái)做的分布式架構(gòu)也比較多,大部分用于分析類(lèi)場(chǎng)景,下面比較幾種常見(jiàn)的架構(gòu)特點(diǎn)。
Citus
Citus以插件的方式擴(kuò)展到PostgreSQL中,獨(dú)立于PostgreSQL內(nèi)核,所以能很快的跟上PostgreSQL主版本的更新,部署也比較簡(jiǎn)單,是現(xiàn)在非常流行的分布式方案。Citus在蘇寧有大規(guī)模應(yīng)用,微軟也提供citus的商業(yè)支持。下面是citus的架構(gòu):
Citus節(jié)點(diǎn)主要分為協(xié)調(diào)節(jié)點(diǎn)和工作節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)不存儲(chǔ)真實(shí)數(shù)據(jù),只存儲(chǔ)數(shù)據(jù)分布的元信息,實(shí)際的數(shù)據(jù)被分成若干分片,打散到不同worker節(jié)點(diǎn)中,應(yīng)用連接協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)進(jìn)行sql解析,生成分布式執(zhí)行計(jì)劃,下發(fā)到worker節(jié)點(diǎn)執(zhí)行,cn將結(jié)果匯總返回客戶(hù)端。
Citus的主要架構(gòu)特點(diǎn)如下:
①有兩種表類(lèi)型:參考表和分布表,參考表每個(gè)協(xié)調(diào)節(jié)點(diǎn)和worker節(jié)點(diǎn)都有一份完整的副本,分布表則會(huì)打散分布到不同worker中。
②可以進(jìn)行讀寫(xiě)分離,如上圖cn1為寫(xiě)節(jié)點(diǎn),可以通過(guò)再增加多個(gè)cn讀節(jié)點(diǎn)增加集群讀的能力,寫(xiě)cn和讀cn之間使用流復(fù)制進(jìn)行元數(shù)據(jù)同步。
③支持MX模式,可以將元數(shù)據(jù)也存在某些worker節(jié)點(diǎn)中,這樣使得該worker節(jié)點(diǎn)能夠直接提供寫(xiě)的能力,以此增加集群寫(xiě)的能力。
④底層worker節(jié)點(diǎn)可以通過(guò)流復(fù)制搭建副本,保證數(shù)據(jù)高可用。
⑤做join時(shí)最好的結(jié)果是能夠?qū)⒂?jì)算下推到worker節(jié)點(diǎn),但是只有在參考表和其他表做join以及兩個(gè)表的分布方式相同的情況下才能下推到worker計(jì)算,否則需要將數(shù)據(jù)拉到協(xié)調(diào)節(jié)點(diǎn)進(jìn)行計(jì)算。
⑥整體架構(gòu)類(lèi)似mycat的中間件,因?yàn)闆](méi)有全局事務(wù)管理,故不能保證數(shù)據(jù)的實(shí)時(shí)讀一致性,但是性能上相比要好。數(shù)據(jù)寫(xiě)一致性使用2pc來(lái)保證。
pgxc && pgxl
Pgxc是經(jīng)典的分布式數(shù)據(jù)庫(kù)架構(gòu),是真正的企業(yè)級(jí)HTAP,我們看到市面上很多分布式數(shù)據(jù)庫(kù)產(chǎn)品都是基于pgxc架構(gòu)擴(kuò)展而來(lái)。pgxc是和pg內(nèi)核緊耦合的,是嵌入到pg內(nèi)核中,最初pgxc的核心開(kāi)發(fā)者將pgxc商業(yè)化,創(chuàng)建了stormdb,進(jìn)行了一些并行算子優(yōu)化,后來(lái)TransLattice公司將stormdb收購(gòu),并且將項(xiàng)目開(kāi)源,就是現(xiàn)在的pgxl,所以pgxc和pgxl是一脈相承的,大部分代碼是直接移植過(guò)來(lái)的。下面是pgxc的架構(gòu):
其實(shí)這個(gè)架構(gòu)和citus優(yōu)點(diǎn)類(lèi)似,也是分為協(xié)調(diào)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),數(shù)據(jù)也是通過(guò)hash分布到不同數(shù)據(jù)節(jié)點(diǎn)上,只是在集群中增添了全局事務(wù)管理組件,保證全局事務(wù)的一致性。
pgxc的架構(gòu)特點(diǎn)如下:
①gtm保證全局讀一致性,兩階段提交保證全局寫(xiě)一致性。
②gtm是整個(gè)系統(tǒng)的瓶頸點(diǎn),在超過(guò)150并發(fā)的情況下,gtm的瓶頸就會(huì)顯現(xiàn),每一個(gè)事務(wù)開(kāi)啟都會(huì)去gtm取事務(wù)號(hào)和快照信息,造成gtm在網(wǎng)絡(luò)壓力和分配事務(wù)號(hào)速度上存在瓶頸。
③多個(gè)協(xié)調(diào)節(jié)點(diǎn)間需要同步元數(shù)據(jù)信息,如果協(xié)調(diào)節(jié)點(diǎn)失敗,不僅會(huì)造成ddl hang住,也可能造成兩階段事務(wù)的阻塞。
④pgxc的出現(xiàn)主要是在pg在oltp應(yīng)用場(chǎng)景上的優(yōu)化,不管是新增gtm,還是數(shù)據(jù)一致性的保證上面都做得更加精細(xì)化。
⑤和citus類(lèi)似,數(shù)據(jù)表也可以分為分布表和復(fù)制表,復(fù)制表在每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都有一份全量數(shù)據(jù)。
Greenplum
Greenplum是pivotal公司推出的一款開(kāi)源olap的mpp數(shù)據(jù)庫(kù),greenplum的用戶(hù)在某種程度上甚至超越了pg,很多人可能是通過(guò)greenplum才認(rèn)識(shí)的pg,可見(jiàn)greenplum的風(fēng)靡。下面是greenplum架構(gòu):
Master節(jié)點(diǎn)存儲(chǔ)全局系統(tǒng)元數(shù)據(jù)信息,不存儲(chǔ)真實(shí)數(shù)據(jù)。數(shù)據(jù)通過(guò)hash分布到不同的segment中,master作為sql的全局入口,負(fù)責(zé)在segment中分配工作負(fù)載,整合處理結(jié)果,返回客戶(hù)端。
Greenplum架構(gòu)特點(diǎn)如下:
①master節(jié)點(diǎn)可以做主備,segment節(jié)點(diǎn)也有鏡像保證高可用,segment主備盡量混布到不同服務(wù)器上。
②支持行列混合存儲(chǔ)引擎,同時(shí)支持外部表。
③在join時(shí)也涉及到數(shù)據(jù)跨節(jié)點(diǎn)重分布的問(wèn)題,這也是share nothing數(shù)據(jù)庫(kù)不可避免的問(wèn)題。
④高速內(nèi)部interconnect網(wǎng)絡(luò),實(shí)現(xiàn)數(shù)據(jù)join時(shí)的高速移動(dòng)和匯總。
⑤高效的數(shù)據(jù)并行加載。