背景
一直以來(lái),大一統(tǒng)還是碎片化,是數(shù)據(jù)庫(kù)發(fā)展趨勢(shì)的兩種最主流預(yù)測(cè)。隨著數(shù)字化進(jìn)程的推進(jìn),單一場(chǎng)景無(wú)法滿足應(yīng)用多樣化的需求,數(shù)據(jù)庫(kù)碎片化已呈不可逆的趨勢(shì)。在當(dāng)前,市場(chǎng)占有率最高的商用數(shù)據(jù)庫(kù)—— Oracle 并沒(méi)有明顯短板的情況下,各種全新的數(shù)據(jù)庫(kù)依舊如雨后春筍般層出不窮。如今,DB-Engines 上已有超過(guò) 300 余種數(shù)據(jù)庫(kù)參與排名。
應(yīng)用場(chǎng)景的不斷擴(kuò)張,加速了數(shù)據(jù)庫(kù)碎片化的進(jìn)程,數(shù)據(jù)庫(kù)的架構(gòu)、協(xié)議、功能、適用場(chǎng)景也愈加多樣化。在數(shù)據(jù)庫(kù)架構(gòu)方面,基于單機(jī)系統(tǒng)演進(jìn)而來(lái)的集中式數(shù)據(jù)庫(kù)與原生面向分布式的新一代數(shù)據(jù)庫(kù)并存;在數(shù)據(jù)庫(kù)協(xié)議方面,MySQL 和 PosrtgreSQL 這兩大主要開(kāi)源生態(tài)以及周邊廠商所提供的服務(wù)生態(tài)也在全球數(shù)據(jù)庫(kù)體系中各自占有一席之地;每種數(shù)據(jù)庫(kù)的獨(dú)特功能和適用場(chǎng)景,也在相關(guān)的領(lǐng)域大放異彩。
在企業(yè)的應(yīng)用現(xiàn)狀中,數(shù)據(jù)庫(kù)的多元并存已是常態(tài)。在互聯(lián)網(wǎng)行業(yè)中,以 MySQL + 數(shù)據(jù)分片中間件作為核心業(yè)務(wù)存儲(chǔ)的架構(gòu)模式為主,以 GreenPlum、HBase、Elasticsearch、Clickhouse 等其他大數(shù)據(jù)生態(tài)作為分析型數(shù)據(jù)的計(jì)算引擎為輔助。與此同時(shí),一些遺留系統(tǒng)(如:通過(guò) .NET 轉(zhuǎn)型時(shí)遺留的 SQLServer、或通過(guò)外采而遺留的 Oracle)的數(shù)據(jù)庫(kù)仍在運(yùn)行;在金融行業(yè)中,核心交易系統(tǒng)仍然大量使用 Oracle 或 DB2,新業(yè)務(wù)向 MySQL 或 PostgreSQL 遷移,部分業(yè)務(wù)則逐漸嘗試使用自主研發(fā)的數(shù)據(jù)庫(kù)。除了交易型數(shù)據(jù)庫(kù),分析型數(shù)據(jù)庫(kù)的種類則更加繁多。
因此,碎片化是數(shù)據(jù)庫(kù)領(lǐng)域的大勢(shì)所趨,單一品類的數(shù)據(jù)庫(kù)無(wú)法適用于所有場(chǎng)景,只能適用于某一種或某幾種擅長(zhǎng)的場(chǎng)景。
數(shù)據(jù)庫(kù)碎片化帶來(lái)的問(wèn)題
隨著企業(yè)采用的數(shù)據(jù)庫(kù)種類不斷增加,各種問(wèn)題和痛點(diǎn)也隨之出現(xiàn)。
1.架構(gòu)選型困難
當(dāng)應(yīng)用架構(gòu)為了適應(yīng)更加靈活多變的業(yè)務(wù)需求,將架構(gòu)設(shè)計(jì)從單體式向服務(wù)化再到微服務(wù)進(jìn)行轉(zhuǎn)化之后,用于存儲(chǔ)業(yè)務(wù)核心數(shù)據(jù)的數(shù)據(jù)庫(kù)則成為分布式系統(tǒng)的下一個(gè)焦點(diǎn)。
相對(duì)比無(wú)狀態(tài)的應(yīng)用,具有狀態(tài)的數(shù)據(jù)庫(kù)的設(shè)計(jì)難度則有過(guò)之而無(wú)不及。分而治之是分布式系統(tǒng)的最佳實(shí)踐,顯然,數(shù)據(jù)庫(kù)體系也不能簡(jiǎn)單的用單一產(chǎn)品以及一體化集群來(lái)響應(yīng)所有的服務(wù)請(qǐng)求。
首先,單一品類的數(shù)據(jù)庫(kù)無(wú)法滿足業(yè)務(wù)應(yīng)用的全部需求,在高吞吐量、低延時(shí)、分布式無(wú)感知、強(qiáng)一致性、運(yùn)維友好度甚至穩(wěn)定性等方面難以做到面面俱到。一個(gè)應(yīng)用需要多種數(shù)據(jù)庫(kù)共存的可能性尚且不高,但多個(gè)應(yīng)用混用多種數(shù)據(jù)庫(kù)的可能性則大大提升。
其次,無(wú)論是單機(jī)數(shù)據(jù)庫(kù),還是 All in One 的分布式數(shù)據(jù)庫(kù)集群,都難以成為眾多微服務(wù)應(yīng)用后端的唯一存儲(chǔ)支撐。單機(jī)數(shù)據(jù)庫(kù)無(wú)法承載越來(lái)越大的數(shù)據(jù)量和訪問(wèn)量,所以越來(lái)越多的應(yīng)用選擇采用分布式解決方案。然而,多應(yīng)用使用統(tǒng)一的數(shù)據(jù)庫(kù)集群,在 CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等方面的負(fù)載無(wú)法做到完全隔離。一個(gè)應(yīng)用的超額資源使用,可能會(huì)導(dǎo)致眾多毫不相干的應(yīng)用服務(wù)質(zhì)量下降。
如今,大部分分布式數(shù)據(jù)庫(kù)的搭建成本相當(dāng)高,在計(jì)算節(jié)點(diǎn)、存儲(chǔ)節(jié)點(diǎn)和治理節(jié)點(diǎn)都需要備份和冗余的獨(dú)立服務(wù)器。如果要為每一個(gè)微服務(wù)都搭建一套獨(dú)立的分布式數(shù)據(jù)庫(kù),一定會(huì)造成非必要的資源消耗,最終導(dǎo)致企業(yè)無(wú)法承受。
最后,大量企業(yè)采用單元化架構(gòu)?;跀?shù)據(jù)分片的解決方案,將數(shù)據(jù)庫(kù)的拆分和單元化一并放到應(yīng)用端解決。隨著數(shù)據(jù)庫(kù)數(shù)量的增多,架構(gòu)設(shè)計(jì)的復(fù)雜度會(huì)呈指數(shù)級(jí)增長(zhǎng)。長(zhǎng)此以往,業(yè)務(wù)開(kāi)發(fā)團(tuán)隊(duì)將無(wú)法把精力集中在最擅長(zhǎng)的業(yè)務(wù)研發(fā)層面,反而需要花費(fèi)大量精力投入到基礎(chǔ)組件的維護(hù)。盡管 Apache ShardingSphere 的數(shù)據(jù)分片功能可以較好解決相關(guān)問(wèn)題,但面對(duì)更多元的數(shù)據(jù)庫(kù),僅支持單一品類數(shù)據(jù)庫(kù)的水平分片能力是遠(yuǎn)遠(yuǎn)不夠的。
2.技術(shù)挑戰(zhàn)眾多
當(dāng)碎片化數(shù)據(jù)庫(kù)共存成為常態(tài)時(shí),研發(fā)人員的學(xué)習(xí)與開(kāi)發(fā)成本將不可避免的持續(xù)增長(zhǎng)。盡管數(shù)據(jù)庫(kù)大多支持 SQL 的操作方式,但各數(shù)據(jù)庫(kù)間仍有大量 SQL 方言的差異。除此之外,各數(shù)據(jù)庫(kù)間驅(qū)動(dòng)程序的使用方式也或多或少存在不同。
因此如需精細(xì)化使用每一種數(shù)據(jù)庫(kù),必定會(huì)占用研發(fā)工程師大量的精力,且沉淀下來(lái)的知識(shí)和經(jīng)驗(yàn)不易傳承;如果采用粗粒度的標(biāo)準(zhǔn)模式統(tǒng)一使用異構(gòu)數(shù)據(jù)庫(kù),將會(huì)湮沒(méi)數(shù)據(jù)庫(kù)自身的特點(diǎn),而無(wú)法發(fā)揮其應(yīng)有的作用。
3.運(yùn)維復(fù)雜度高
掌握各種數(shù)據(jù)庫(kù)特征,并結(jié)合實(shí)際場(chǎng)景制定行之有效的運(yùn)維規(guī)范,需要大量時(shí)間和實(shí)踐經(jīng)驗(yàn)的積累。除了最基本的運(yùn)維工作,數(shù)據(jù)庫(kù)周邊配套工具的差異性也非常大。通過(guò)周邊配套工具所組成的監(jiān)控、備份及其他自動(dòng)化運(yùn)維等工作,隨著數(shù)據(jù)庫(kù)種類的增加將會(huì)產(chǎn)生巨大的運(yùn)維成本。
4.數(shù)據(jù)庫(kù)間缺乏協(xié)作和統(tǒng)管能力
站在數(shù)據(jù)庫(kù)的角度,其首要目標(biāo)是完善自身的能力,而非面向其他數(shù)據(jù)庫(kù)的在線協(xié)作能力??缭疆悩?gòu)數(shù)據(jù)庫(kù)的關(guān)聯(lián)查詢、分布式事務(wù)等功能,是無(wú)法在數(shù)據(jù)庫(kù)本身實(shí)現(xiàn)的。
與相對(duì)標(biāo)準(zhǔn)的 SQL 不同,數(shù)據(jù)庫(kù)自身的協(xié)議和周邊生態(tài)工具缺乏統(tǒng)一的標(biāo)準(zhǔn)。對(duì)異構(gòu)數(shù)據(jù)庫(kù)的統(tǒng)一管控能力也受到越來(lái)越多的關(guān)注。但遺憾的是,數(shù)據(jù)庫(kù)上層標(biāo)準(zhǔn)的缺失,使得數(shù)據(jù)庫(kù)間的協(xié)作和統(tǒng)管能力難以取得有效的推進(jìn)。
Database Plus 是什么?
Database Plus 是一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)理念。旨在碎片化的異構(gòu)數(shù)據(jù)庫(kù)上層構(gòu)建生態(tài),在最大限度復(fù)用數(shù)據(jù)庫(kù)原生存算能力的前提下,進(jìn)一步提供面向全局的擴(kuò)展和疊加計(jì)算能力。使應(yīng)用與數(shù)據(jù)庫(kù)間的交互面向 Database Plus 構(gòu)建的標(biāo)準(zhǔn),從而屏蔽數(shù)據(jù)庫(kù)碎片化對(duì)上層業(yè)務(wù)帶來(lái)的差異化影響。
『連接、增強(qiáng)、可插拔』是定義 Database Plus 核心價(jià)值的三個(gè)關(guān)鍵詞。
1.連接:打造數(shù)據(jù)庫(kù)上層標(biāo)準(zhǔn)
相對(duì)于提供一個(gè)全新的標(biāo)準(zhǔn),Database Plus 更傾向于提供一個(gè)可以適配于各種數(shù)據(jù)庫(kù) SQL 方言和訪問(wèn)協(xié)議的中間層,提供開(kāi)放的接口用于對(duì)接各種數(shù)據(jù)庫(kù)。
由于數(shù)據(jù)庫(kù)訪問(wèn)協(xié)議的實(shí)現(xiàn),Database Plus 和數(shù)據(jù)庫(kù)在使用體驗(yàn)上并無(wú)二致,可以支持任意的開(kāi)發(fā)語(yǔ)言和數(shù)據(jù)庫(kù)訪問(wèn)客戶端。
除此之外,Database Plus 能夠最大限度支持 SQL 方言間的相互轉(zhuǎn)換??梢詫?SQL 解析而成的 AST(抽象語(yǔ)法樹)根據(jù)其他數(shù)據(jù)庫(kù)方言的規(guī)則重新生成 SQL。SQL 方言轉(zhuǎn)換的能力,打通了連接異構(gòu)數(shù)據(jù)庫(kù)之間相互訪問(wèn)的通道,用戶可以使用任意一種 SQL 方言訪問(wèn)異構(gòu)的底層數(shù)據(jù)庫(kù)。
『數(shù)據(jù)庫(kù)網(wǎng)關(guān)』是對(duì)連接的最佳詮釋。在數(shù)據(jù)庫(kù)上層打造開(kāi)放對(duì)接的通用層,將碎片化數(shù)據(jù)庫(kù)的全部訪問(wèn)流量匯集于此,是 Database Plus 為數(shù)據(jù)庫(kù)碎片化提供解決方案的前提條件。
2.增強(qiáng):數(shù)據(jù)庫(kù)計(jì)算增強(qiáng)引擎
數(shù)據(jù)庫(kù)經(jīng)歷了數(shù)十年的發(fā)展,其自身具備了查詢優(yōu)化器、事務(wù)引擎、存儲(chǔ)引擎等久經(jīng)考驗(yàn)的存算能力和設(shè)計(jì)模型。在 IT 領(lǐng)域,數(shù)據(jù)庫(kù)的設(shè)計(jì)和使用方式已深入人心,不可動(dòng)搖。隨著分布式和云原生時(shí)代的到來(lái),將數(shù)據(jù)庫(kù)原有的計(jì)算和存儲(chǔ)能力全部打散,并織入分布式和云原生級(jí)別的全新能力,會(huì)不可避免的重復(fù)造輪子。
因此,Database Plus 采用了既重視傳統(tǒng)數(shù)據(jù)庫(kù)的實(shí)踐經(jīng)驗(yàn),又適配于新一代分布式數(shù)據(jù)庫(kù)的設(shè)計(jì)理念。無(wú)論是集中式還是分布式的數(shù)據(jù)庫(kù),Database Plus 都能復(fù)用數(shù)據(jù)庫(kù)的存儲(chǔ)和原生計(jì)算能力,并在其基礎(chǔ)之上提供全局化的能力增強(qiáng)。
全局化的能力增強(qiáng)主要在分布式、數(shù)據(jù)控制和流量控制三個(gè)方面。
無(wú)論是原生面向分布式的數(shù)據(jù)庫(kù),還是基于集中式數(shù)據(jù)庫(kù)作為基石的分布式擴(kuò)展方案,都離不開(kāi)分而治之這個(gè)分布式系統(tǒng)永恒不變的設(shè)計(jì)原理。數(shù)據(jù)分片、彈性伸縮、高可用、讀寫分離、分布式事務(wù)、以及基于垂直拆分的異構(gòu)數(shù)據(jù)庫(kù)聯(lián)邦查詢等功能,都是 Database Plus 在分布式的異構(gòu)數(shù)據(jù)庫(kù)全局層面下所能夠提供的能力。它的關(guān)注點(diǎn)不在于數(shù)據(jù)庫(kù)自身,而是站在碎片化的數(shù)據(jù)庫(kù)上層,關(guān)注于多個(gè)數(shù)據(jù)庫(kù)之間的全局協(xié)作能力。
除了分布式增強(qiáng)之外,數(shù)據(jù)控制和流量控制的增強(qiáng)能力均處于豎井化范疇。面向數(shù)據(jù)控制的增量能力包括:數(shù)據(jù)加密、數(shù)據(jù)脫敏、數(shù)據(jù)水印、數(shù)據(jù)溯源、SQL 審計(jì)等;面向流量控制的增量能力包括:影子庫(kù)、灰度發(fā)布、SQL 防火墻、黑白名單、熔斷限流等。這些均屬于數(shù)據(jù)庫(kù)生態(tài)層所提供的能力,然而在數(shù)據(jù)庫(kù)碎片化的態(tài)勢(shì)下,為每一種數(shù)據(jù)庫(kù)提供全量的增強(qiáng)能力的工作量十分巨大,且缺失統(tǒng)一的實(shí)現(xiàn)標(biāo)準(zhǔn)。Database Plus 通過(guò)提供支點(diǎn),將支持的數(shù)據(jù)庫(kù)種類和增強(qiáng)功能相疊加,以排列組合的方式提供給用戶使用。
3.可插拔:構(gòu)建數(shù)據(jù)庫(kù)功能生態(tài)
不斷增加的數(shù)據(jù)庫(kù)類型對(duì)接和增強(qiáng)功能織入,會(huì)使 Database Plus 通用層逐漸趨于臃腫。連接和增強(qiáng)的可插拔化,既是 Database Plus 通用層維持小而美的基石,也是擴(kuò)展生態(tài)無(wú)限化的有效保障。可插拔的體系,為 Database Plus 通用層提供了插件生態(tài)無(wú)限擴(kuò)張的可能,使用者只需根據(jù)自身需求裁減插件即可。
通過(guò)可插拔體系,Database Plus 將能夠真正的構(gòu)建面向數(shù)據(jù)庫(kù)的功能生態(tài),將異構(gòu)數(shù)據(jù)庫(kù)的全局能力統(tǒng)一納管。它不僅面向集中式數(shù)據(jù)庫(kù)的分布式化,也同時(shí)面向分布式數(shù)據(jù)庫(kù)的豎井功能一體化。
微內(nèi)核設(shè)計(jì)和可插拔架構(gòu)是 Database Plus 理念的核心價(jià)值,它面向通用的平臺(tái)層,而非某項(xiàng)具體功能。
ShardingSphere 在 Database Plus 方向的探索
Apache ShardingSphere 項(xiàng)目歷史悠久,從開(kāi)源伊始的數(shù)據(jù)庫(kù)分片中間件,到如今 Database Plus 理念的奠基者和實(shí)踐者,它的前進(jìn)步伐從未放緩。目前,Apache ShardingSphere 遵循 Database Plus 理念,已完成了 Database Plus 三大核心價(jià)值下的大部分基礎(chǔ)設(shè)施建設(shè)。
1.連接層
ShardingSphere 已支持 MySQL、PostgreSQL、openGauss 等數(shù)據(jù)庫(kù)協(xié)議,以及 MySQL、PostgreSQL、openGauss、SQL Server、Oracle 和所有支持 SQL92 標(biāo)準(zhǔn)的 SQL 方言。
連接層抽象的頂層接口可供其他數(shù)據(jù)庫(kù)開(kāi)放對(duì)接,包括:數(shù)據(jù)庫(kù)協(xié)議、SQL 解析和數(shù)據(jù)庫(kù)訪問(wèn)等。
2.增強(qiáng)層
ShardingSphere 的功能增強(qiáng)劃分為內(nèi)核層和可選功能層。
內(nèi)核層包含查詢優(yōu)化器、分布式事務(wù)、執(zhí)行引擎、權(quán)限引擎等與數(shù)據(jù)庫(kù)內(nèi)核強(qiáng)相關(guān)的功能,以及調(diào)度引擎、分布式治理等與分布式強(qiáng)相關(guān)的功能。內(nèi)核功能的每個(gè)模塊都必須存在,但可以切換至不同的實(shí)現(xiàn)類型。以查詢優(yōu)化器為例,如果待執(zhí)行 SQL 可以完美下推至后端數(shù)據(jù)庫(kù),則采用基于原始 SQL 與數(shù)據(jù)庫(kù)交互的計(jì)算下推引擎;如果待執(zhí)行 SQL 需要跨越多數(shù)據(jù)源進(jìn)行關(guān)聯(lián)查詢,則采用基于查詢計(jì)劃樹與數(shù)據(jù)庫(kù)交互的聯(lián)邦查詢引擎。
可選功能層的功能模塊由開(kāi)源社區(qū)沉淀而形成。除了最具代表性的數(shù)據(jù)分片和讀寫分離之外,高可用、彈性伸縮、數(shù)據(jù)加密、影子庫(kù)等功能模塊,都在逐步的完善之中。
3.可插拔層
從最初的 MySQL + 數(shù)據(jù)分片為核心的架構(gòu)模型,到如今的微內(nèi)核 + 可插拔架構(gòu),項(xiàng)目進(jìn)行了徹底的改造。從提供連接的數(shù)據(jù)庫(kù)種類和增強(qiáng)功能到內(nèi)核能力,ShardingSphere 全部面向可插拔。
ShardingSphere 的架構(gòu)核心外圍,由微內(nèi)核、可插拔接口、插件實(shí)現(xiàn)這三層模型組成,層次之間單項(xiàng)依賴,微內(nèi)核對(duì)插件功能完全無(wú)需感知,插件之間也無(wú)需相互依賴。對(duì)于一個(gè)擁有 200+ 模塊的大型項(xiàng)目來(lái)說(shuō),架構(gòu)的解耦和隔離,是社區(qū)開(kāi)放協(xié)作、將錯(cuò)誤影響范圍降低至最小的有效保障。
小結(jié)
Database Plus 是 ShardingSphere 的理論支撐,ShardingSphere 是 Database Plus 理念的最佳實(shí)踐。隨著 ShardingSphere 的越來(lái)越成熟,Database Plus 的拼圖也會(huì)越來(lái)越豐滿。
Database Plus 帶來(lái)的優(yōu)勢(shì)
Database Plus 帶來(lái)眾多的優(yōu)勢(shì),受限于篇幅,無(wú)法在文中一一列舉。下面僅從影響系統(tǒng)架構(gòu)設(shè)計(jì)和技術(shù)選型方面進(jìn)行闡述。
1. 精細(xì)化適配靈活多變的應(yīng)用場(chǎng)景
用戶可以根據(jù)自身需求定制化使用相應(yīng)功能,數(shù)據(jù)分片不再是使用 ShardingSphere 的必要條件,獨(dú)立使用數(shù)據(jù)加密功能的用戶已不在少數(shù)。ShardingSphere 的可插拔能力不僅限于數(shù)據(jù)庫(kù)接入層和功能增強(qiáng)模塊本身,每個(gè)功能模塊的內(nèi)部也能夠基于可插拔架構(gòu)靈活配置。
以數(shù)據(jù)分片為例,作為數(shù)據(jù)分片模塊的可插拔部分,分片算法可以由用戶自定義配置,無(wú)論是標(biāo)準(zhǔn)的哈希、范圍、時(shí)間等分片算法,還是自定義分片算法,使用者都可以根據(jù)業(yè)務(wù)場(chǎng)景需要自由靈活配置,最大限度切合業(yè)務(wù)場(chǎng)景。
2.面向架構(gòu)師的微服務(wù)后端支撐能力
Apache ShardingSphere 是微服務(wù)后端的數(shù)據(jù)庫(kù)單元化最佳方案。正如前文所述,不同的微服務(wù)共享一套分布式數(shù)據(jù)庫(kù)集群,無(wú)論從架構(gòu)設(shè)計(jì)的不對(duì)稱性,還是資源隔離的不可控性,都不能稱之為完善和優(yōu)雅的解決方案。為每一組微服務(wù)搭建一套分布式數(shù)據(jù)庫(kù)集群,則又會(huì)造成非必要的資源浪費(fèi)。
相對(duì)于重量級(jí)的分布式數(shù)據(jù)庫(kù)集群,ShardingSphere-Proxy 所占用的資源節(jié)省很多,為每個(gè)微服務(wù)集群獨(dú)享一套數(shù)據(jù)庫(kù)集群奠定良好基礎(chǔ)。但如果微服務(wù)拆分足夠精細(xì),為每一組微服務(wù)搭建一套 ShardingSphere-Proxy 的額外資源占用依舊不可小覷。在這種情況下,可以考慮使用占用資源更少的 ShardingSphere-JDBC,它作為類庫(kù)與應(yīng)用代碼部署在一起,無(wú)需額外占用資源。
ShardingSphere-Proxy 和 ShardingSphere-JDBC 不僅可以通過(guò)混合使用的方式,來(lái)滿足用戶的使用友好度、跨語(yǔ)言適配、高性能、資源節(jié)省等各方面需求;還可以通過(guò) Traffic Rule 讓 ShardingSphere-Proxy 和 ShardingSphere-JDBC 在不同特征的 SQL 請(qǐng)求中相互路由,以最小化應(yīng)用資源占用所帶來(lái)的影響。
Traffic Rule 可以根據(jù)用戶自定義的 SQL 特征(如:聚合計(jì)算、無(wú)分片鍵的全路由查詢等),將占用更多計(jì)算資源的請(qǐng)求發(fā)送至獨(dú)占資源的 ShardingSphere-Proxy,而將交易型的輕量級(jí)操作保留在微服務(wù)應(yīng)用端。這與邊緣計(jì)算的理念不謀而合,ShardingSphere-JDBC 在微服務(wù)應(yīng)用端的算力和邊緣計(jì)算節(jié)點(diǎn)有異曲同工之妙。用于中心計(jì)算的 ShardingSphere-Proxy 可以根據(jù)業(yè)務(wù)自身需要,部署獨(dú)立的集群服務(wù)于多組微服務(wù)。
通過(guò)靈活使用 ShardingSphere-Proxy、ShardingSphere-JDBC 和 Traffic Rule,這套組合將能夠不斷激發(fā)著架構(gòu)師的設(shè)計(jì)靈感和創(chuàng)造力。開(kāi)句玩笑,正確使用 ShardingSphere 進(jìn)行優(yōu)雅的系統(tǒng)設(shè)計(jì),可以被當(dāng)作優(yōu)秀架構(gòu)師的準(zhǔn)入線。
3.DistSQL 為 DBA 帶來(lái)數(shù)據(jù)庫(kù)原生操作體驗(yàn)
面對(duì)數(shù)據(jù)分片、數(shù)據(jù)加密等增強(qiáng)功能,Apache ShardingSphere 之前版本主要采用 YAML 的方式進(jìn)行配置。對(duì)于開(kāi)發(fā)工程師來(lái)說(shuō),靈活的 YAML 配置使用起來(lái)得心應(yīng)手,但對(duì)于 DBA 而言,YAML 的配置方式確存在諸多不便。除了改變了 DBA 的日常 SQL 操作習(xí)慣之外,無(wú)法對(duì)接諸如權(quán)限、安全、工單、監(jiān)控、審計(jì)等第三方系統(tǒng),也讓此前的 ShardingSphere 難以適用于生產(chǎn)環(huán)境的運(yùn)維管控。
全新版本的 Apache ShardingSphere 增加了 DistSQL 的操作方式。使用者可以完全通過(guò) SQL 在任意的數(shù)據(jù)庫(kù)終端(如:MySQL Cli、Navicat 等)操作增強(qiáng)功能。數(shù)據(jù)分片、數(shù)據(jù)加密、讀寫分離等所有的強(qiáng)功能都擁有與之相匹配的 DistSQL,使用 DBA 所熟悉的 CREATE/ALTER/DROP/SHOW 等 SQL 語(yǔ)法即可完成全部功能的配置。DistSQL 同樣支持授權(quán)語(yǔ)句的管控,也可以通過(guò)對(duì)接 SQL 審計(jì)平臺(tái)記錄所有使用者的操作記錄。
數(shù)據(jù)庫(kù)表結(jié)構(gòu)是 Database 的元數(shù)據(jù),增強(qiáng)功能配置是 Database Plus 的元數(shù)據(jù)。DistSQL 的出現(xiàn),不僅提升了用戶友好度,也補(bǔ)全了 Apache ShardingSphere 上線和運(yùn)維的最終拼圖。
4.Proxyless 模式提升性能至極致
在 Service Mesh 領(lǐng)域,最為經(jīng)典就是 Istio + Envoy 架構(gòu)搭配模式。它通過(guò) Sidecar 的部署方式管理 Envoy,做到對(duì)應(yīng)用的無(wú)侵入,稱之為 Proxy Service Mesh,降低了開(kāi)發(fā)、使用和升級(jí)的成本,但由于在訪問(wèn)鏈路中增加了 Proxy/Sidecar 這一層,使得性能有所下降。
而 Proxyless Service Mesh 則采用另一種設(shè)計(jì)模式,它始于 gRPC 對(duì) xDS 協(xié)議的實(shí)現(xiàn),Istio 新版本通過(guò) gRPC + xDS 的方式,允許應(yīng)用代碼直接通過(guò) Istio Agent 提供的 SDK 編程,有效提升了通信性能。
在分布式數(shù)據(jù)庫(kù)領(lǐng)域,存算分離的架構(gòu)設(shè)計(jì)模式已經(jīng)深入人心。計(jì)算節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)分離的設(shè)計(jì),與 Proxy Service Mesh 的架構(gòu)模型有些類似。ShardingSphere-Proxy 的設(shè)計(jì)完全契合了存算分離的架構(gòu)模型,它有效降低了用戶的開(kāi)發(fā)、使用和升級(jí)成本,卻不可避免帶來(lái)了一定的性能損耗。
對(duì)于性能延時(shí)敏感的應(yīng)用而言,與 Proxyless Service Mesh 設(shè)計(jì)理念不謀而合的ShardingSphere-JDBC 無(wú)疑更加合適,其能夠?qū)⑾到y(tǒng)的性能發(fā)揮至極致。在近期使用 ShardingSphere + openGauss 測(cè)試 TPC-C 模型的結(jié)果中,得到了驚人的 16 臺(tái)服務(wù)器超過(guò) 1000w tpmC 的測(cè)試結(jié)果,行業(yè)同等規(guī)模下性能最佳。
小結(jié)
一直以來(lái),先進(jìn)的設(shè)計(jì)理念和創(chuàng)新均源于西方。但 gRPC 的 Proxyless 設(shè)計(jì)理念是近期才出現(xiàn)的,而 ShardingSphere-JDBC 則是項(xiàng)目在 2016 年開(kāi)源伊始時(shí)就已經(jīng)存在。因此,ShardingSphere-JDBC 并未參考 Proxyless 的設(shè)計(jì)理念,它是基于當(dāng)時(shí)國(guó)內(nèi)互聯(lián)網(wǎng)業(yè)務(wù)對(duì)高并發(fā)和低延時(shí)的極致性能要求而誕生的。
至于 Database Plus 理念的設(shè)計(jì),又何嘗不是如此。伴隨著互聯(lián)網(wǎng)的長(zhǎng)期快速發(fā)展,業(yè)務(wù)的變化直接推動(dòng)了技術(shù)的積累和成長(zhǎng),ShardingSphere 就是這一過(guò)程的最好例證,它的設(shè)計(jì)方案全部源自于真實(shí)業(yè)務(wù)場(chǎng)景。中國(guó)互聯(lián)網(wǎng)無(wú)疑是全球最全面的場(chǎng)景之一,在此類場(chǎng)景下誕生的設(shè)計(jì)理念,在全球范圍內(nèi)也一定擁有十分廣闊的生長(zhǎng)空間。
未來(lái)規(guī)劃
盡管在 Database Plus 理念的實(shí)踐道路上越走越遠(yuǎn),但 Apache ShardingSphere 仍然有大量的工作等待完成。數(shù)據(jù)庫(kù)網(wǎng)關(guān)和異構(gòu)聯(lián)邦查詢,是完善 Database Plus 理念的重要功能拼圖。
1.數(shù)據(jù)庫(kù)網(wǎng)關(guān)
Apache ShardingSphere 雖然支持異構(gòu)數(shù)據(jù)庫(kù)的對(duì)接,但無(wú)法做到數(shù)據(jù)庫(kù)之間方言的相互轉(zhuǎn)換。在 ShardingSphere 的線路規(guī)劃中,SQL 方言轉(zhuǎn)換是實(shí)現(xiàn)數(shù)據(jù)庫(kù)網(wǎng)關(guān)的重要功能,用戶通過(guò) PostgreSQL 的數(shù)據(jù)庫(kù)協(xié)議用 MySQL 方言訪問(wèn) MongoDB 將不再是難以實(shí)現(xiàn)的任務(wù)。
2.異構(gòu)聯(lián)邦查詢
Apache ShardingSphere 目前僅支持同構(gòu)數(shù)據(jù)庫(kù)間的聯(lián)邦查詢。在 ShardingSphere 的線路規(guī)劃中,異構(gòu)數(shù)據(jù)庫(kù)間的聯(lián)邦查詢也將被提上日程。用戶通過(guò)一條 SQL 關(guān)聯(lián)查詢 MySQL 和 HBase 的場(chǎng)景將不再遙遠(yuǎn)。
寫在最后
Apache ShardingSphere 社區(qū)已在開(kāi)源領(lǐng)域耕耘了 7 年的時(shí)間。長(zhǎng)久的堅(jiān)持,使社區(qū)愈加成熟,已呈開(kāi)放和多元化的勢(shì)態(tài)。我們誠(chéng)心誠(chéng)意地歡迎有開(kāi)源情懷和編碼熱情的朋友一起參與社區(qū)共建。
Apache ShardingSphere 的可插拔架構(gòu)和數(shù)據(jù)分片哲學(xué)已在學(xué)術(shù)界獲得廣泛認(rèn)可。在今年的數(shù)據(jù)庫(kù)領(lǐng)域頂級(jí)的會(huì)議 ICDE 中,已成功發(fā)表論文《Apache ShardingSphere:A Holistic and Pluggable Platform for Data Sharding》。
關(guān)于作者
張亮,SphereEx 公司創(chuàng)始人 & CEO,歷任多家大型知名互聯(lián)網(wǎng)企業(yè)的架構(gòu)、數(shù)據(jù)庫(kù)團(tuán)隊(duì)負(fù)責(zé)人。熱愛(ài)開(kāi)源,是 Apache ShardingSphere、ElasticJob 等知名開(kāi)源項(xiàng)目創(chuàng)始人 & 項(xiàng)目管理委員會(huì)主席、現(xiàn)任 Apache 軟件基金會(huì)會(huì)員、微軟 MVP、騰訊云 TVP、華為云 MVP。擁有超過(guò) 10 年的架構(gòu)和數(shù)據(jù)庫(kù)領(lǐng)域探索、實(shí)踐經(jīng)驗(yàn)。擅長(zhǎng)分布式架構(gòu),推崇優(yōu)雅代碼,在分布式數(shù)據(jù)庫(kù)技術(shù)和學(xué)術(shù)等方面均取得重大成果。曾在 ApacheCon、QCon、AWS 峰會(huì)、DTCC、SACC、DTC等數(shù)十個(gè)國(guó)內(nèi)和國(guó)際重大行業(yè)和技術(shù)峰會(huì)中擔(dān)任出品人和分享嘉賓。曾出版書籍《未來(lái)架構(gòu)——從服務(wù)化到云原生》,并在數(shù)據(jù)庫(kù)行業(yè)頂級(jí)會(huì)議 ICDE 發(fā)表論文《Apache ShardingSphere:A Holistic and Pluggable Platform for Data Sharding》。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。 )