深挖:華為存儲(chǔ)與天翼云分布式數(shù)據(jù)庫(kù)的聯(lián)合創(chuàng)新路徑
分布式數(shù)據(jù)庫(kù)面臨數(shù)據(jù)庫(kù)可靠性、性能、成本挑戰(zhàn),2022年6月24日,天翼云&華為 聯(lián)合創(chuàng)新中心正式開啟,雙方將基于華為閃存存儲(chǔ),共同探索數(shù)據(jù)庫(kù)云原生的發(fā)展方向。圍繞多寫存儲(chǔ)引擎、高性能高可用存儲(chǔ)持續(xù)創(chuàng)新,打造更易維護(hù)、更高可用、更經(jīng)濟(jì)的分布式云原生數(shù)據(jù)庫(kù)。
1 分布式數(shù)據(jù)庫(kù)面臨可靠性、性能、成本挑戰(zhàn)
自1970年IBM的數(shù)學(xué)家Edgar F. Codd提出關(guān)系模型,關(guān)系數(shù)據(jù)庫(kù)已有50余年歷史,期間關(guān)系模型沒(méi)有發(fā)生大的變化,而數(shù)據(jù)庫(kù)體系架構(gòu)則經(jīng)歷了以O(shè)RACLE為代表的商業(yè)數(shù)據(jù)庫(kù)(IOE)—>以互聯(lián)網(wǎng)產(chǎn)商去IOE為代表的分布式架構(gòu)+開源數(shù)據(jù)庫(kù)—>云原生數(shù)據(jù)庫(kù)的三次大的轉(zhuǎn)變,以適應(yīng)業(yè)務(wù)的要求。
圖 1數(shù)據(jù)庫(kù)體系架構(gòu)演變
在后兩次的架構(gòu)發(fā)展中,MySQL開源數(shù)據(jù)庫(kù)扮演著重要的角色。它具有靈巧高效、易于使用的優(yōu)勢(shì),因而應(yīng)用廣泛、生態(tài)成熟。業(yè)界大多都選擇了MySQL開源數(shù)據(jù)庫(kù)加分布式架構(gòu)替代商業(yè)數(shù)據(jù)庫(kù)。但隨著業(yè)務(wù)的發(fā)展,MySQL自身和架構(gòu)的先天問(wèn)題也日益突出:
數(shù)據(jù)可靠性問(wèn)題:基于開源數(shù)據(jù)庫(kù)的分布式數(shù)據(jù)庫(kù)以日志復(fù)制回放生成多副本實(shí)現(xiàn)數(shù)據(jù)持久化和高可用。受日志處理機(jī)制限制,在業(yè)務(wù)壓力大或網(wǎng)絡(luò)抖動(dòng)時(shí)容易出現(xiàn)較大延遲,造成數(shù)據(jù)丟失風(fēng)險(xiǎn)或集群故障;
連續(xù)性故障問(wèn)題:傳統(tǒng)的故障處理方式是使系統(tǒng)運(yùn)行在降級(jí)狀態(tài),但MySQL基于本地盤的部署方式從降級(jí)狀態(tài)恢復(fù)到正常狀態(tài)需要全量數(shù)據(jù)恢復(fù),導(dǎo)致系統(tǒng)降級(jí)狀態(tài)時(shí)間極長(zhǎng),二次故障風(fēng)險(xiǎn)大增;
性能影響:分布式事務(wù)和分布式查詢?cè)趶?qiáng)ACID(AICD:原子性、隔離性、一致性和永久性)場(chǎng)景中有明顯的性能下降,這很大程度抵消了分布式改造帶來(lái)的好處;
擴(kuò)展性差:由于數(shù)據(jù)庫(kù)只能讀寫本服務(wù)器內(nèi)磁盤的數(shù)據(jù),增加實(shí)例進(jìn)行性能擴(kuò)展往往要花數(shù)小時(shí)甚至一天以上時(shí)間復(fù)制數(shù)據(jù),同時(shí)即使只需要增加計(jì)算資源,也必須對(duì)應(yīng)增加一份本地存儲(chǔ);
高成本:高成本一方面來(lái)自解決上述問(wèn)題而增加的硬件投入和軟件改造、運(yùn)維成本,另一方面來(lái)自于非解耦資源池?zé)o法實(shí)現(xiàn)資源的按量分配和按需分配導(dǎo)致的資源浪費(fèi)。
2 分布式數(shù)據(jù)庫(kù)云原生改造思路和實(shí)踐
以上問(wèn)題大多涉及到數(shù)據(jù)庫(kù)架構(gòu)體系,僅從數(shù)據(jù)庫(kù)本身進(jìn)行優(yōu)化難以根本解決,同時(shí)更換數(shù)據(jù)庫(kù)代價(jià)大且時(shí)間長(zhǎng),因此業(yè)界當(dāng)前主流做法是,采用對(duì)數(shù)據(jù)庫(kù)進(jìn)行云原生改造的方式來(lái)解決問(wèn)題。云原生數(shù)據(jù)庫(kù)的主要特點(diǎn)包括:
● 采用容器化、不可變基礎(chǔ)設(shè)施(數(shù)據(jù)存儲(chǔ)在外置存儲(chǔ),計(jì)算實(shí)例生成后不再變更)等云原生技術(shù)架構(gòu),解決故障快速切換和資源彈性擴(kuò)展問(wèn)題;
● 通過(guò)存算分離實(shí)現(xiàn)能力下移,尤其是可靠性能力和密集數(shù)據(jù)處理能力下移到存儲(chǔ),在利用存儲(chǔ)能力快速提升數(shù)據(jù)庫(kù)系統(tǒng)可靠性和性能的同時(shí),降低了數(shù)據(jù)庫(kù)開發(fā)難度。但這一策略同時(shí)也對(duì)存儲(chǔ)的能力提出更高的要求。
● 通過(guò)存算分離實(shí)現(xiàn)解耦的資源池化,提升資源利用效率和分配速度;
實(shí)現(xiàn)云原生數(shù)據(jù)庫(kù)架構(gòu)第一步是保留MySQL等開源數(shù)據(jù)庫(kù)的主從部署、本地?cái)?shù)據(jù)訪問(wèn)架構(gòu),僅將算力轉(zhuǎn)移到容器、將數(shù)據(jù)轉(zhuǎn)移到外置存儲(chǔ)的平滑演進(jìn)方案;第二步則是通過(guò)數(shù)據(jù)庫(kù)存儲(chǔ)引擎改造徹底實(shí)現(xiàn)多實(shí)例共享存儲(chǔ)的協(xié)同優(yōu)化方案。
2.1 容器化+存算分離改造,以平滑演進(jìn)模式向云原生邁出第一步
TeleDB首先采用容器化+存算分離改造的方案實(shí)現(xiàn)向云原生數(shù)據(jù)庫(kù)的平滑演進(jìn):
圖 2平滑演進(jìn)云原生數(shù)據(jù)庫(kù)架構(gòu)與原架構(gòu)對(duì)比
2.1.1 容器化和存算分離“根”技術(shù)解決可靠性和資源利用率問(wèn)題
根技術(shù)能帶來(lái)多方面的價(jià)值,在技術(shù)架構(gòu)的確定中起著最關(guān)鍵作用,TeleDB的平滑演進(jìn)方案就是抓住容器化和存算分離架構(gòu)兩大根技術(shù),使TeleDB初步具備了云原生數(shù)據(jù)庫(kù)能力,實(shí)現(xiàn)了可靠性和擴(kuò)展性的提升及成本下降。
容器化實(shí)踐:
● 計(jì)算資源池化:在容器化前,要提高資源利用率,需要在物理機(jī)上部署多個(gè)數(shù)據(jù)庫(kù)實(shí)例或使用虛擬機(jī)。多實(shí)例方式很難實(shí)現(xiàn)實(shí)例間資源隔離和定量分配,而虛擬機(jī)對(duì)性能的影響限制了使用場(chǎng)景。采用容器后可以實(shí)現(xiàn)對(duì)CPU、內(nèi)存的定量分配,實(shí)例被隔離在容器內(nèi),而且性能損耗很小,非常適合數(shù)據(jù)庫(kù)業(yè)務(wù);
● 實(shí)現(xiàn)運(yùn)維自動(dòng)化和知識(shí)代碼化沉淀:容器聲明式API可將DBA的運(yùn)維經(jīng)驗(yàn)轉(zhuǎn)化為自動(dòng)化的故障與運(yùn)維處理能力。TeleDB開發(fā)了一套Operator資源控制器,實(shí)現(xiàn)了數(shù)據(jù)庫(kù)集群的發(fā)放與管理,降低了運(yùn)維成本,提升了可靠性;
● 為存算分離架構(gòu)提供支撐:Kubernetes容器平臺(tái)提供了CSI插件存儲(chǔ)管理機(jī)制,實(shí)現(xiàn)了存儲(chǔ)的動(dòng)態(tài)分配和擴(kuò)容等功能,這正是原來(lái)用物理機(jī)部署時(shí)所欠缺的。
存算分離架構(gòu)實(shí)踐:
● 存儲(chǔ)資源池化:存算分離使存儲(chǔ)與計(jì)算解耦,不會(huì)因?yàn)閱蝹€(gè)服務(wù)器上的計(jì)算或存儲(chǔ)中任意資源不足就不能分配資源,從而同時(shí)提升了計(jì)算和存儲(chǔ)的使用效率;
● 實(shí)現(xiàn)彈性伸縮:如果在擴(kuò)容時(shí)發(fā)現(xiàn)服務(wù)器上資源不足,原來(lái)也需要將實(shí)例通過(guò)全量復(fù)制數(shù)據(jù)的方式搬遷到其它服務(wù)器,現(xiàn)在如果計(jì)算資源不足,可通過(guò)容器漂移快速搬遷,搬遷時(shí)間由天縮短為分鐘級(jí),存儲(chǔ)資源不足則可直接動(dòng)態(tài)擴(kuò)容。
● 容器漂移和快速補(bǔ)從:
本地盤部署時(shí),服務(wù)器故障后需要重建實(shí)例并全量復(fù)制數(shù)據(jù)這一過(guò)程耗時(shí)且牽扯運(yùn)維人員精力,甚至業(yè)務(wù)高峰時(shí)很長(zhǎng)時(shí)間都無(wú)法完成修復(fù)或擴(kuò)容進(jìn)而影響業(yè)務(wù)。
存算分離后容器既可漂移到其它服務(wù)器實(shí)現(xiàn)故障快速恢復(fù),也可以作為從節(jié)點(diǎn)重新加入集群后增量同步數(shù)據(jù),使數(shù)據(jù)恢復(fù)速度由小時(shí)級(jí)/天級(jí)縮短為分鐘級(jí)。
2.1.2 容器化+存算分離改造實(shí)現(xiàn)資源利用率提升40%
經(jīng)過(guò)初步的云原生改造,相同硬件條件下,通過(guò)靈活的調(diào)度以及細(xì)粒度的資源控制,數(shù)據(jù)庫(kù)部署密度提升2倍以上,同時(shí)資源利用率提升了40%以上。TeleDB的可靠性得到提升,成本下降,同時(shí)應(yīng)對(duì)互聯(lián)網(wǎng)化業(yè)務(wù)以及疫情中對(duì)資源的突發(fā)需求的能力有了很大提升。
2.2 數(shù)據(jù)庫(kù)存儲(chǔ)引擎+高性能高可用存儲(chǔ)協(xié)同,邁出云原生第二步
2.2.1 容器化+存算分離方案難以解決的問(wèn)題
容器化+存算分離方案以最簡(jiǎn)單的方式釋放了云原生架構(gòu)的價(jià)值。但對(duì)比其它云原生應(yīng)用,這種方案并未完全實(shí)現(xiàn)無(wú)狀態(tài)化,分離后存儲(chǔ)和網(wǎng)絡(luò)能力也制約了云原生架構(gòu)價(jià)值的發(fā)揮:
● 未能徹底解決數(shù)據(jù)可靠性問(wèn)題:由于保留了以日志同步多副本的方式,數(shù)據(jù)丟失或故障風(fēng)險(xiǎn)未解決;
● 擴(kuò)展能力仍有不足:在擴(kuò)展讀實(shí)例時(shí),仍要全量復(fù)制數(shù)據(jù),無(wú)法快速擴(kuò)展;
● 多重冗余:由于保留了數(shù)據(jù)庫(kù)多副本,外置存儲(chǔ)上的多副本未起到提升可靠性的作用,反而抵消了成本優(yōu)化效果并造成性能下降;
● 性能受限:網(wǎng)絡(luò)、存儲(chǔ)能力以及保留數(shù)據(jù)庫(kù)高可用方案影響了數(shù)據(jù)庫(kù)的整體性能,導(dǎo)致方案的使用場(chǎng)景受到了限制。
2.2.2 多寫存儲(chǔ)引擎技術(shù)創(chuàng)新,打造共享存儲(chǔ)多寫云原生數(shù)據(jù)庫(kù)
多寫存儲(chǔ)引擎成為根技術(shù)新方向
針對(duì)以上問(wèn)題,仍需要根技術(shù)創(chuàng)新來(lái)解決。除容器化之外,采用數(shù)據(jù)庫(kù)多寫存儲(chǔ)引擎、高性能存儲(chǔ)網(wǎng)絡(luò)協(xié)議和專門研發(fā)的高性能高可用存儲(chǔ)來(lái)實(shí)現(xiàn)存算分離,同時(shí)利用存儲(chǔ)在數(shù)據(jù)處理上的優(yōu)勢(shì)將大量原需要數(shù)據(jù)庫(kù)實(shí)現(xiàn)的功能下移到存儲(chǔ)上實(shí)現(xiàn),這種數(shù)據(jù)庫(kù)與存儲(chǔ)通過(guò)多寫存儲(chǔ)引擎協(xié)同優(yōu)化的架構(gòu)已成為業(yè)界云原生數(shù)據(jù)庫(kù)的主流。
使用多寫存儲(chǔ)引擎可徹底實(shí)現(xiàn)數(shù)據(jù)庫(kù)無(wú)狀態(tài)化,可以獲得更短的故障恢復(fù)時(shí)間、更佳的性能、更好的擴(kuò)展性,顯然選擇多寫多讀方案作為數(shù)據(jù)庫(kù)/存儲(chǔ)協(xié)同優(yōu)化的根技術(shù)是更好的選擇。
華為數(shù)據(jù)存儲(chǔ)-天翼云,優(yōu)勢(shì)互補(bǔ)攜手創(chuàng)新
高性能存儲(chǔ)網(wǎng)絡(luò)、高性能、高可用的企業(yè)級(jí)存儲(chǔ)和多寫存儲(chǔ)引擎跨多個(gè)技術(shù)領(lǐng)域,技術(shù)難度高,制約了云原生數(shù)據(jù)庫(kù)的普及與發(fā)展。為推動(dòng)分布式數(shù)據(jù)庫(kù)云原生架構(gòu)實(shí)現(xiàn),華為與天翼云合作,以華為多寫存儲(chǔ)引擎和全閃存存儲(chǔ)OceanStor Dorado為數(shù)據(jù)底座,依托天翼云TeleDB數(shù)據(jù)庫(kù),構(gòu)建分布式云原生數(shù)據(jù)庫(kù)。其特點(diǎn)如下:
● 高可用、易兼容:靈活的容器化高可用策略,大幅提升數(shù)據(jù)庫(kù)服務(wù)可用性、故障恢復(fù)能力。結(jié)合TeleDB優(yōu)化的數(shù)據(jù)庫(kù)引擎,具備與開源MySQL的原生兼容性的同時(shí),兼具極致的擴(kuò)縮能力,便于業(yè)務(wù)平滑遷移;
● 支持多寫:利用華為多寫存儲(chǔ)引擎,實(shí)現(xiàn)各實(shí)例完全相同的數(shù)據(jù)庫(kù)讀寫能力,無(wú)數(shù)據(jù)延遲,相比一寫多讀模式故障恢復(fù)速度更快,多實(shí)例性能擴(kuò)展無(wú)需改造應(yīng)用,實(shí)現(xiàn)技術(shù)跨越發(fā)展;
● TeleDB容器化+共享存儲(chǔ)多寫實(shí)現(xiàn)數(shù)據(jù)庫(kù)無(wú)狀態(tài)化:多個(gè)實(shí)例共享一份數(shù)據(jù),避免多重冗余,消除日志復(fù)制的數(shù)據(jù)不一致風(fēng)險(xiǎn)。無(wú)狀態(tài)化徹底解除計(jì)算和存儲(chǔ)的捆綁,擴(kuò)容計(jì)算實(shí)例不需要復(fù)制數(shù)據(jù)和增加存儲(chǔ)成本;
● 高可靠:利用華為OceanStor Dorado全閃存存儲(chǔ)的分布式AA負(fù)載均衡架構(gòu)、RAID2.0持久化技術(shù)、亞健康管理、SSD磨損均衡/反磨損均衡等能力,不但滿足了數(shù)據(jù)庫(kù)數(shù)據(jù)持久化能力下沉到存儲(chǔ)對(duì)可靠性的嚴(yán)苛要求,還補(bǔ)齊了數(shù)據(jù)庫(kù)快速數(shù)據(jù)重構(gòu)、亞健康故障處理、SSD介質(zhì)延壽和故障主動(dòng)處理等能力,使數(shù)據(jù)庫(kù)綜合可靠性能能力有了大幅度提升;
● 高性能:華為OceanStor Dorado全閃存存儲(chǔ)+多寫存儲(chǔ)引擎IO路徑優(yōu)化,相比原生MySQL數(shù)據(jù)庫(kù)提升整體性能約100%;
● 高性能無(wú)損網(wǎng)絡(luò):支持基于以太網(wǎng)的RDMA組網(wǎng),相比IB組網(wǎng)可實(shí)現(xiàn)高性能、低成本、通用性好的存儲(chǔ)網(wǎng)絡(luò);
3 充分發(fā)揮數(shù)據(jù)庫(kù)多寫能力、關(guān)鍵能力向存儲(chǔ)下沉成為下一步探索的方向
云原生數(shù)據(jù)庫(kù)通過(guò)保留數(shù)據(jù)庫(kù)SQL引擎的方式實(shí)現(xiàn)對(duì)原有數(shù)據(jù)庫(kù)生態(tài)的兼容,但由于架構(gòu)的變化,存儲(chǔ)底座能力的發(fā)揮必須通過(guò)數(shù)據(jù)庫(kù)的整合才能實(shí)現(xiàn)。TeleDB在基于MySQL數(shù)據(jù)庫(kù)的開發(fā)與應(yīng)用中有豐富的經(jīng)驗(yàn),為實(shí)現(xiàn)存算分離架構(gòu)、發(fā)揮華為閃存存儲(chǔ)高可用、高性能和綜合成本優(yōu)勢(shì)起了至關(guān)重要的作用。未來(lái)雙方將繼續(xù)合作探索如何充分發(fā)揮數(shù)據(jù)庫(kù)多寫能力、通過(guò)TeleDB數(shù)據(jù)庫(kù)體系化方案實(shí)現(xiàn)關(guān)鍵能力向存儲(chǔ)下沉從而進(jìn)一步提升數(shù)據(jù)庫(kù)的性能、可靠性,降低成本,推動(dòng)云原生數(shù)據(jù)庫(kù)開放架構(gòu)的成熟。
本文作者——龐毅 華為數(shù)據(jù)存儲(chǔ)資深產(chǎn)品經(jīng)理
蘇飛 天翼云科技有限公司數(shù)據(jù)庫(kù)技術(shù)專家