在計(jì)算機(jī)科學(xué)的世界里,操作系統(tǒng)和數(shù)據(jù)庫(kù)可謂是兩大最重要的基礎(chǔ)軟件。就拿 SQL 這門語(yǔ)言來(lái)說(shuō),它的半衰期之長(zhǎng)令人記憶深刻。SQL 不僅在早期的 DBMS 系統(tǒng)中扮演了相當(dāng)重要的角色,近些年在數(shù)據(jù)科學(xué)領(lǐng)域和 Python 一同成為從業(yè)人員的必備技能。SQL 的生命力真可謂是“歷久彌新”,以至于有論文直言希望“One SQL to rule all”。這也從側(cè)面反映了數(shù)據(jù)庫(kù)領(lǐng)域歷史之久,地位之重,具備濃重的領(lǐng)域特色。 如果將數(shù)據(jù)庫(kù)視為調(diào)用鏈上一個(gè)服務(wù)節(jié)點(diǎn),那么可以考慮采用 Service Mesh 的框架進(jìn)行治理。而如果將數(shù)據(jù)庫(kù)視作一個(gè)有狀態(tài)的業(yè)務(wù)應(yīng)用,它獨(dú)特的領(lǐng)域性帶來(lái)了治理的特殊性:比如,數(shù)據(jù)庫(kù)請(qǐng)求無(wú)法像服務(wù)一樣可以被隨意路由到任何對(duì)等節(jié)點(diǎn)。而對(duì)數(shù)據(jù)庫(kù)協(xié)議的感知和理解、數(shù)據(jù)分片和路由、數(shù)據(jù)庫(kù)部署的多副本、讀寫(xiě)分離、主庫(kù)多寫(xiě)等模式,甚至數(shù)據(jù)庫(kù)上云,都是困難多多,挑戰(zhàn)多多。那么基礎(chǔ)架構(gòu)該如何應(yīng)對(duì)這樣的數(shù)據(jù)庫(kù)治理局面呢? 時(shí)間撥回到 2018 年 3 月,彼時(shí)的 ShardingSphere 剛從原來(lái)的 ShardingSphere-JDBC 演化出來(lái)了可以獨(dú)立部署的 ShardingSphere-Proxy。它們都采用 Java 構(gòu)建實(shí)現(xiàn),分別代表了 SDK 模式和 Proxy 模式,提供了相同的標(biāo)準(zhǔn)化數(shù)據(jù)分片、分布式事務(wù)等功能。但無(wú)論使用哪種方式,都有其各自的優(yōu)缺點(diǎn)。項(xiàng)目創(chuàng)始人張亮就在設(shè)想是否有一種模式可以有效的結(jié)合 JDBC 代理端與 Proxy 客戶端的優(yōu)點(diǎn)并屏蔽其缺點(diǎn),借助“彈性伸縮 + 零侵入 + 去中心,實(shí)現(xiàn)了一個(gè)真正的云上基礎(chǔ)設(shè)施”呢?于是就有了這篇文章:《Service Mesh 是大方向,那 Database Mesh 呢?》 。文中是這么描繪 Database Mesh 的:
說(shuō)到 Database Mesh 就不得不從 Service Mesh 開(kāi)始。2016 年,第一代 Service Mesh 由 Linkerd 帶入大眾視野,緊接著 2017 年就誕生了以 Istio 為代表的第二代 Service Mesh,采用了控制面和數(shù)據(jù)面分離的設(shè)計(jì)模式,將服務(wù)治理中如流量治理、訪問(wèn)控制、可觀測(cè)性等關(guān)鍵行為要素進(jìn)行了抽象和標(biāo)準(zhǔn)化,然后借助 Kubernetes 的 Sidecar 模式解耦了應(yīng)用容器和治理容器。至此,Service Mesh 的形態(tài)已經(jīng)基本確定。 如此一來(lái) Service Mesh 在 Kubernetes 上的 Sidecar 模型實(shí)現(xiàn)就變得非常有啟發(fā)性:如果設(shè)計(jì)一種 ShardingSphere-Sidecar 模式,將 ShardingSphere 的核心分片能力等遷移到其中,就可以有效的結(jié)合 JDBC 代理端與 Proxy 客戶端的優(yōu)點(diǎn)并屏蔽其缺點(diǎn),實(shí)現(xiàn)那個(gè)“彈性伸縮 + 零侵入 + 去中心,實(shí)現(xiàn)了一個(gè)真正的云上基礎(chǔ)設(shè)施”。這個(gè)階段的 Database Mesh 為 1.0 階段。 任何一個(gè)新技術(shù)概念在它落地的時(shí)候,都會(huì)因?yàn)椴煌臉I(yè)務(wù)場(chǎng)景和模式、不同的架構(gòu)設(shè)計(jì)模式、不同的基礎(chǔ)設(shè)施成熟度、乃至差異的工程師文化而打上自己獨(dú)特的烙印。這一點(diǎn)在 Kubernetes 落地歷程中已經(jīng)得到了充分驗(yàn)證, 而 Service Mesh 落地又再次加深了這個(gè)觀點(diǎn)。那么對(duì)于 Database Mesh 呢? 在 Database Mesh 1.0 誕生的這些年里,一些公司在原有基礎(chǔ)上豐富了更多觀點(diǎn),比如在 Service Mesh 的框架中,通過(guò)二次開(kāi)發(fā)的方式增加了對(duì) SQL 協(xié)議的解析和支持,增強(qiáng)了數(shù)據(jù)庫(kù)流量治理能力,兼容了統(tǒng)一的服務(wù)治理配置;比如將 Database Mesh 的理念集成到一套完整的中間件服務(wù)框架中,以 SDK 或者 Sidecar 的方式給業(yè)務(wù)應(yīng)用暴露統(tǒng)一的訪問(wèn)方式,簡(jiǎn)化開(kāi)發(fā)者的使用;還比如將分布式事務(wù)能力集成到 Database Mesh Sidecar 中的項(xiàng)目,以云原生分布式數(shù)據(jù)庫(kù)的方式為業(yè)務(wù)應(yīng)用進(jìn)行呈現(xiàn)。不管是哪種方式,都可以看出來(lái) Database Mesh 理念正在不斷深入人心,逐步成長(zhǎng)為一個(gè)繁榮的生態(tài)。 注:從左往右分別為“ShardingSphere-Sidecar、統(tǒng)一 Mesh 管控、分布式數(shù)據(jù)庫(kù)”三種 Database Mesh 1.0 的實(shí)現(xiàn)。 更近一步地,當(dāng)業(yè)務(wù)應(yīng)用開(kāi)始以容器的方式進(jìn)行打包交付、利用 CICD 流水線每天發(fā)布成百上千次到各個(gè)數(shù)據(jù)中心的 Kubernetes 基礎(chǔ)設(shè)施的時(shí)候,必然會(huì)引發(fā)對(duì)應(yīng)用上層服務(wù)治理和對(duì)數(shù)據(jù)庫(kù)治理的思考,Database Mesh 就是這種思考之下的產(chǎn)物。如果沒(méi)有 Database Mesh,不管是 SDK 還是 Proxy,同樣可以支持對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)治理,Sidecar 本身并非 Database Mesh 的內(nèi)核,實(shí)際上是基礎(chǔ)架構(gòu)全面云原生化的浪潮,在不斷推著 Database Mesh 前進(jìn)。 Database Mesh 不是靜態(tài)的定義,而是一個(gè)在不斷進(jìn)化的動(dòng)態(tài)概念。 Database Mesh 從 1.0 開(kāi)始,始終關(guān)注對(duì)數(shù)據(jù)庫(kù)流量的治理,基于數(shù)據(jù)庫(kù)協(xié)議感知能力,提供數(shù)據(jù)分片、負(fù)載均衡、可觀測(cè)性、審計(jì)等能力。這些能力已經(jīng)解決了數(shù)據(jù)庫(kù)治理中的屬于流量治理的部分問(wèn)題。但對(duì)運(yùn)維人員和數(shù)據(jù)庫(kù)管理人員來(lái)說(shuō),還有很多可以持續(xù)建設(shè)的方面。比如是否可以通過(guò)統(tǒng)一的配置聲明數(shù)據(jù)庫(kù)接入?是否可以通過(guò)可編程的方式,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的資源限制?是否可以通過(guò)標(biāo)準(zhǔn)的界面自動(dòng)化數(shù)據(jù)庫(kù)維護(hù)體驗(yàn)? 在不同的用戶視角里,開(kāi)發(fā)人員更關(guān)注運(yùn)行效率、成本開(kāi)銷,以及數(shù)據(jù)庫(kù)協(xié)議類型和訪問(wèn)信息,不關(guān)心數(shù)據(jù)存儲(chǔ)的位置。運(yùn)維和 DBA 更關(guān)注數(shù)據(jù)庫(kù)服務(wù)的自動(dòng)化、穩(wěn)定性、安全性、監(jiān)控報(bào)警等,此外 DBA 還會(huì)關(guān)心數(shù)據(jù)的變更、容量、安全訪問(wèn)、備份、遷移等等。這些問(wèn)題都屬于數(shù)據(jù)庫(kù)可靠性工程的范疇。 正是隨著對(duì)數(shù)據(jù)庫(kù)治理場(chǎng)景的深入理解和對(duì)用戶體驗(yàn)的極致追求,共同催生了 Database Mesh 2.0:通過(guò)可編程實(shí)現(xiàn)高性能擴(kuò)展,應(yīng)對(duì)云上數(shù)據(jù)庫(kù)治理挑戰(zhàn)。 Database Mesh 2.0 關(guān)注在云原生環(huán)境下,如何實(shí)現(xiàn)以下幾個(gè)目標(biāo):
如前所述,業(yè)務(wù)開(kāi)發(fā)人員主要關(guān)注業(yè)務(wù)邏輯和實(shí)現(xiàn),無(wú)需關(guān)心基礎(chǔ)設(shè)施和其運(yùn)維特征,而開(kāi)發(fā)的體驗(yàn)會(huì)逐步向 Serverless 的方向前進(jìn),對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)也就必然會(huì)變得越來(lái)越透明和無(wú)感。開(kāi)發(fā)人員只需要了解自己業(yè)務(wù)所需要的數(shù)據(jù)存儲(chǔ)類型,然后使用預(yù)置的或者動(dòng)態(tài)的身份機(jī)密信息,即可訪問(wèn)相應(yīng)的數(shù)據(jù)庫(kù)服務(wù)。 對(duì)于數(shù)據(jù)庫(kù)流量來(lái)說(shuō),不同的場(chǎng)景會(huì)有不同的負(fù)載均衡策略和防火墻規(guī)則,這些都可以以配置的形式提供給用戶。更進(jìn)一步地,對(duì)于流量帶寬等運(yùn)行時(shí)資源,可以通過(guò)加載可編程插件的方式對(duì)其進(jìn)行限制。無(wú)論是配置還是插件,都希望給用戶提供框架之內(nèi)最大的靈活度,踐行 Unix “機(jī)制和策略分離”的設(shè)計(jì)哲學(xué)。 在數(shù)據(jù)庫(kù)上云的過(guò)程中,因?yàn)椴渴鹉J健?shù)據(jù)遷移、數(shù)據(jù)容量等諸多問(wèn)題,增加了上云的復(fù)雜度。而標(biāo)準(zhǔn)化的操作可以極大地幫助上云過(guò)程。如果可以有一套完整的操作界面,就可以在不同的數(shù)據(jù)庫(kù)環(huán)境里實(shí)現(xiàn)統(tǒng)一的治理行為,從而讓未來(lái)上云的過(guò)程變得更加順滑。 為實(shí)現(xiàn)上面的三個(gè)目標(biāo),Database Mesh 2.0 提供了一種以數(shù)據(jù)庫(kù)為中心的治理框架:
這套治理框架依賴于如下工作負(fù)載:
基于這樣的設(shè)計(jì),可以讓開(kāi)發(fā)更集中更高效,讓云計(jì)算更親和。換句話說(shuō),Database Mesh 正在向著擴(kuò)展性、易用性和標(biāo)準(zhǔn)化的方向大踏步地前進(jìn)。 這個(gè)階段的 Database Mesh 為 2.0 階段。 目前 Database Mesh 官網(wǎng)( https://www. )已上線,相應(yīng)的規(guī)范定義也開(kāi)源在在 https://github.com/database-mesh/database-mesh 倉(cāng)庫(kù)里。社區(qū)每?jī)芍芏紩?huì)進(jìn)行線上討論,信息如下: 歡迎各位讀者加入官方社區(qū)進(jìn)行討論,Database Mesh 社區(qū)歡迎來(lái)自不同背景的愛(ài)好者們一起建設(shè)生態(tài)。 此外,Database Mesh 發(fā)起人張亮所在的 SphereEx 公司將于下月推出面向數(shù)據(jù)庫(kù)網(wǎng)格的開(kāi)源解決方案 Pisanix( https://www. ),歡迎各位關(guān)注。 作者介紹: 苗立堯,現(xiàn)任 SphereEx 云研發(fā)負(fù)責(zé)人,開(kāi)源布道師,專注于 SaaS 和 Database Mesh。從 2015 年起開(kāi)始接觸 Kubernetes,是國(guó)內(nèi)最早一批云原生實(shí)踐者,2016 年創(chuàng)辦“容器時(shí)代”公眾號(hào),原創(chuàng)和翻譯引進(jìn)了 600 余篇技術(shù)文章。曾在株式會(huì)社ネットスターズ、北京穿楊科技、螞蟻金服、易寶支付等擔(dān)任基礎(chǔ)設(shè)施架構(gòu)師、云產(chǎn)品負(fù)責(zé)人、云原生研發(fā)工程師等相關(guān)職位。 Github: https://github.com/mlycore 張亮,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。擁有超過(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)任出品人和分享嘉賓。曾出版書(shū)籍《未來(lái)架構(gòu)——從服務(wù)化到云原生》,并在數(shù)據(jù)庫(kù)行業(yè)頂級(jí)會(huì)議 ICDE 發(fā)表論文《Apache ShardingSphere:A Holistic and Pluggable Platform for Data Sharding》。 GitHub: https://github.com/terrymanu |
|
來(lái)自: 黃爸爸好 > 《數(shù)據(jù)庫(kù)》