阿里的云原生數(shù)據(jù)庫(kù)重新回到提升數(shù)據(jù)庫(kù)Scale Up擴(kuò)展能力的路上,來(lái)解決分布式事務(wù),彈性擴(kuò)展的問(wèn)題。在必要時(shí)可以結(jié)合分布式分庫(kù)分表模式進(jìn)行Scale Out擴(kuò)展。

  華為云數(shù)據(jù)庫(kù)專家也表示“高可用、易用易維、高擴(kuò)展、高性能、與大數(shù)據(jù)相輔相成的云數(shù)據(jù)庫(kù),尤其是基于云場(chǎng)景架構(gòu)設(shè)計(jì)的云原生分布式數(shù)據(jù)庫(kù),計(jì)算與存儲(chǔ)分離、能充分發(fā)揮最新硬件性能、利用 AI 和 ML(深度學(xué)習(xí)) 等功能成發(fā)展趨勢(shì)。

  上面幾家是上(數(shù)據(jù)庫(kù))下(存儲(chǔ))內(nèi)(自有業(yè)務(wù))外(公有云)通吃的,而Facebook這種自己玩的互聯(lián)網(wǎng)廠商完全從自己的業(yè)務(wù)需要出發(fā),研發(fā)了一套溫?cái)?shù)據(jù)存儲(chǔ),以存算分離的架構(gòu)來(lái)支撐億的用戶量產(chǎn)生的大數(shù)據(jù)。而Snowflake走了一條采用通用對(duì)象存儲(chǔ)構(gòu)建公有云數(shù)據(jù)倉(cāng)庫(kù)服務(wù)的道路,并實(shí)現(xiàn)了數(shù)據(jù)倉(cāng)庫(kù)的計(jì)算無(wú)狀態(tài)化。

  云原生中無(wú)處不在的存算分離

  云原生一直在努力實(shí)現(xiàn)無(wú)狀態(tài)化,而實(shí)現(xiàn)的手段就是把數(shù)據(jù)層剝離出去!只不過(guò)在應(yīng)用層,數(shù)據(jù)可以剝離給緩存、數(shù)據(jù)庫(kù)、文件存儲(chǔ)和消息隊(duì)列,而數(shù)據(jù)庫(kù)、消息隊(duì)列等要云原生時(shí)就只能自己做存算分離了。像最近大火的消息隊(duì)列Apache Pulsar 給自己的定義是這樣的:“Apache 軟件基金會(huì)頂級(jí)項(xiàng)目,下一代云原生分布式消息流平臺(tái),集消息、存儲(chǔ)、輕量化函數(shù)式計(jì)算為一體,采用計(jì)算與存儲(chǔ)分離架構(gòu)設(shè)計(jì),支持多租戶、持久化存儲(chǔ)、多機(jī)房跨區(qū)域數(shù)據(jù)復(fù)制,具有強(qiáng)一致性、高吞吐、低延時(shí)及高可擴(kuò)展性等流數(shù)據(jù)存儲(chǔ)特性?!?/p>

  而對(duì)于Pulsar的云原生特性則是這么描述的:“Pulsar使用計(jì)算與存儲(chǔ)分離的云原生架構(gòu),數(shù)據(jù)從Broker搬離,存在共享存儲(chǔ)內(nèi)部。上層是無(wú)狀態(tài)Broker,復(fù)制消息分發(fā)和服務(wù);下層是持久化的存儲(chǔ)層Bookie集群。Pulsar存儲(chǔ)是分片的,這種架構(gòu)可以避免擴(kuò)容時(shí)受限制,實(shí)現(xiàn)數(shù)據(jù)的獨(dú)立擴(kuò)展和快速恢復(fù)”。

  可見(jiàn)實(shí)現(xiàn)云原生存算分離已是無(wú)處不在,只不過(guò)不會(huì)直接感知到它罷了。

  何為計(jì)算、存儲(chǔ)、分離

  計(jì)算:提供計(jì)算能力的不可變基礎(chǔ)設(shè)施

  存算分離中計(jì)算的變化比較小,也更容易理解,不管是一開(kāi)始的虛擬機(jī),還是現(xiàn)在最常用的容器,計(jì)算部分都是為數(shù)據(jù)庫(kù)提供算力,其最基本的資源是CPU和內(nèi)存。一些“計(jì)算”還會(huì)用服務(wù)器本地盤作為緩存,但并不包括持久化數(shù)據(jù)。這也使“計(jì)算”不斷接近云原生中對(duì)不可變基礎(chǔ)設(shè)施的要求。

  存儲(chǔ):能力不斷增強(qiáng)的數(shù)據(jù)持久化資源池

  相對(duì)計(jì)算,存儲(chǔ)的能力,形態(tài)則變化較大。但不管是對(duì)象存儲(chǔ),HDFS存儲(chǔ),KV存儲(chǔ),文件存儲(chǔ),還是像AWS那樣提供了部分?jǐn)?shù)據(jù)庫(kù)存儲(chǔ)引擎功能的“計(jì)算存儲(chǔ)”,不管是自研的還是購(gòu)買第三方存儲(chǔ),是云服務(wù)還是線下存儲(chǔ),存算分離中的存儲(chǔ)始終承擔(dān)著數(shù)據(jù)持久化的工作。這一點(diǎn)是理解存算分離的關(guān)鍵,也是存算分離的主要價(jià)值之一。

  分離:下刀的位置因時(shí)而變

  分離容易理解,但怎么切是有講究的,它反映了需求,能力,甚至商業(yè)考量。 如果想讓存儲(chǔ)多做點(diǎn)事,可以切得狠一點(diǎn),像AWS Aurora把日志引擎都切給存儲(chǔ)了,如果想通用一些,也可以像阿里PolarDB那樣正常地切,以至于底層換個(gè)存儲(chǔ)也能用。如果想封閉圈子自己玩,就切給自己家存儲(chǔ),并且切完了還會(huì)連著一點(diǎn)點(diǎn)(封閉接口),公有云基本就是這種做法,如果不想自己研發(fā)存儲(chǔ),就切給通用存儲(chǔ),如果想賣存儲(chǔ),就按通用接口來(lái)切,華為,浪潮的大數(shù)據(jù)存儲(chǔ),騰訊的HDFS存儲(chǔ)都是這個(gè)套路,這些都來(lái)自商業(yè)的考量。

  技術(shù)發(fā)展使存算分離成為可能

  存算分離能再次流行是因?yàn)橹笆芟抻诘募夹g(shù)障礙:傳輸性能與存儲(chǔ)能力問(wèn)題已得到解決。

  技術(shù)拐點(diǎn):分離正當(dāng)時(shí)

  每一次網(wǎng)絡(luò)技術(shù)的進(jìn)步都會(huì)對(duì)我們系統(tǒng)架構(gòu)產(chǎn)生重大影響,大量數(shù)據(jù)相互間同步,既要低延時(shí)又要高帶寬,如果沒(méi)有網(wǎng)絡(luò)技術(shù)的進(jìn)步無(wú)法實(shí)現(xiàn),然而每個(gè)短板被填補(bǔ)以后都會(huì)帶來(lái)IT架構(gòu)的變革,F(xiàn)aceBook在其闡述溫存儲(chǔ)大數(shù)據(jù)研發(fā)的原因中提出了“技術(shù)拐點(diǎn)論”非常準(zhǔn)確的說(shuō)明了當(dāng)下為什么可以實(shí)現(xiàn)存算分離的技術(shù)原因:傳輸協(xié)議和帶寬能力已不再是IO瓶頸

  高速以太網(wǎng):吞吐量大幅提升而成本和部署靈活性相比FC和IB有大幅度改善,足以應(yīng)對(duì)從當(dāng)年的千兆邁入10GE,25GE,甚至100GE時(shí)代。

  無(wú)阻塞轉(zhuǎn)發(fā)網(wǎng)絡(luò):比如FaceBook采用了CLOS網(wǎng)絡(luò)拓?fù)?,?shí)現(xiàn)了分解式的網(wǎng)絡(luò),網(wǎng)絡(luò)不會(huì)成為性能瓶頸,同時(shí)提供了靈活的組網(wǎng)能力

  ROCE(RDMA over Converged Ethernet )和NOF(NVMe over Fabric):帶來(lái)網(wǎng)絡(luò)訪問(wèn)高性能、低延遲和低協(xié)議負(fù)擔(dān)的優(yōu)勢(shì)。阿里PolarDB和AWS最新的IO2 Express使用了ROCE。

  無(wú)損網(wǎng)絡(luò):保證網(wǎng)絡(luò)穩(wěn)定性,使以太網(wǎng)可以用于高速關(guān)鍵業(yè)務(wù)

  而相對(duì)于傳輸能力和協(xié)議的發(fā)展,近年介質(zhì)能力和協(xié)議的提升并不大,這就使當(dāng)初

  使用本地盤方案要解決的問(wèn)題不再存在了。

  全方案廠商存儲(chǔ)能力積累 新通用存儲(chǔ)+數(shù)據(jù)庫(kù)形成開(kāi)放架構(gòu)

  這個(gè)“新”指通用存儲(chǔ)具備的新特性,既能提供比本地盤更好的能力,也有別于傳統(tǒng)

  存儲(chǔ)。對(duì)于存算分離,比較關(guān)鍵的特性包括:

  低成本:這主要針對(duì)如類似數(shù)據(jù)湖這種海量數(shù)據(jù)應(yīng)用,而對(duì)交易類數(shù)據(jù)庫(kù),因?yàn)橐?guī)模相對(duì)小并且關(guān)注點(diǎn)不同,則不一定是關(guān)注重點(diǎn);

  高性能:交易類的業(yè)務(wù)性能要求高,往往要求亞毫秒級(jí)時(shí)延和極高的性能密度(IOPS/GB),全閃存存儲(chǔ)是比較合適的選擇;

  擴(kuò)展性:現(xiàn)在的企業(yè)存儲(chǔ)也開(kāi)始采用分布式架構(gòu),提供Scale-out和Scale-up兼具的、更好的分層擴(kuò)展能力,不再有擴(kuò)展性問(wèn)題;

  量身打造的功能:比如專門用于大數(shù)據(jù)的HDFS存儲(chǔ),用于增強(qiáng)MySQL等開(kāi)源數(shù)據(jù)庫(kù)能力的可計(jì)算存儲(chǔ)等。

  需求決定是否要做存算分離

  技術(shù)決定可行性,需求決定必要性。分布式云原生數(shù)據(jù)庫(kù)采用存算分離架構(gòu)的需求來(lái)

  自兩方面:利用“的優(yōu)勢(shì)和提升數(shù)據(jù)庫(kù)能力,也就是降低數(shù)據(jù)庫(kù)替換中的代價(jià)。了解存算分離能解決哪些問(wèn)題及解決方法,對(duì)是否需要以存算分離以及如何規(guī)劃構(gòu)建存算分離方案意義重大。

  云的必然選擇

  由于新一代數(shù)據(jù)庫(kù),尤其是分布式數(shù)據(jù)庫(kù),普遍采用云計(jì)算部署方式,甚至一些新生

  代數(shù)據(jù)庫(kù)就是為云而設(shè)計(jì)的。即使不考慮云的因素,分布式數(shù)據(jù)庫(kù)改造造成的集群規(guī)模暴漲也需要考慮資源分配,彈性擴(kuò)展,故障切換自動(dòng)化等需求。對(duì)于分布式數(shù)據(jù)庫(kù)來(lái)說(shuō)采用存算分離可以歸結(jié)為資源使用和云原生的需要。

  云原生:不可變基礎(chǔ)設(shè)施帶來(lái)可靠性提升和彈性擴(kuò)展能力

  上文提到存儲(chǔ)的主要功能是實(shí)現(xiàn)數(shù)據(jù)持久化,從而實(shí)現(xiàn)不可變基礎(chǔ)設(shè)施。

  那么我們來(lái)看看存算分離以后,存儲(chǔ)帶來(lái)的價(jià)值。

  首先是計(jì)算發(fā)生故障時(shí),由于不需要重新在新服務(wù)器上恢復(fù)數(shù)據(jù),因此實(shí)例可以快速恢復(fù)。如Aurora采用了共享存儲(chǔ)架構(gòu)的一寫多讀架構(gòu),只需要在計(jì)算實(shí)例間同步少量緩存信息,因此讀實(shí)例可以快速恢復(fù)成主實(shí)例,理論上可以接近ORACLE RAC的切換速度。

  其次即使實(shí)例間沒(méi)有使用同一份共享存儲(chǔ),在存算分離后,也不需要全量恢復(fù)數(shù)據(jù)了,這樣數(shù)據(jù)庫(kù)恢復(fù)到工作狀態(tài)的時(shí)間就大幅度縮短了。京東就采用了這種方式,避免了數(shù)據(jù)恢復(fù)中日志恢復(fù)慢和高負(fù)載下可能追不上日志的問(wèn)題。

  另外存算分離后計(jì)算實(shí)例可以擺脫物理服務(wù)器的束縛,任意遷移且不需要進(jìn)行數(shù)據(jù)同步,這使得彈性擴(kuò)展變得極為容易。

  把規(guī)劃變簡(jiǎn)單,提升資源使用效率

  對(duì)于數(shù)據(jù)庫(kù)這類復(fù)雜的應(yīng)用如果使用服務(wù)器本地盤,在資源規(guī)劃時(shí)要考慮CPU、內(nèi)存、存儲(chǔ)容量/IOPS/ 帶寬,網(wǎng)絡(luò)IO/帶寬,差不多7個(gè)維度。這會(huì)有多復(fù)雜呢?

  我們平常接觸的世界是三維的相對(duì)論把世界變成了4維,但也只解釋了引力,另外三個(gè)要靠量子力學(xué)。而要統(tǒng)一相對(duì)論和量子力學(xué),目前最有希望的理論弦理論認(rèn)為世界是11維的!云計(jì)算解決這個(gè)問(wèn)題的思路與物理學(xué)一樣,一靠近似,就是忽略到一些維度,比如不管需求有多少,把服務(wù)器的配置統(tǒng)一成兩三種。但這樣一來(lái),資源利用率不可能高。二是像拆分出相對(duì)論和量子力學(xué)兩個(gè)看似矛盾的理論一樣,把計(jì)算和存儲(chǔ)解耦,這便是李飛飛“云原生的架構(gòu),本質(zhì)上底下是分布式共享存儲(chǔ),上面是分布式共享計(jì)算池,中間來(lái)做計(jì)算存儲(chǔ)解耦”的目的。

  以較小代價(jià)提升數(shù)據(jù)庫(kù)整體能力的需要

  李飛飛在《云原生分布式數(shù)據(jù)庫(kù)與數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)點(diǎn)亮數(shù)據(jù)上云之路》提到:“一旦做了分布式架構(gòu),數(shù)據(jù)只能按照一個(gè)邏輯進(jìn)行Sharding和Partition,業(yè)務(wù)邏輯和分庫(kù)邏輯不是完美一致,一定會(huì)產(chǎn)生跨庫(kù)事務(wù)和跨Sharding處理,每當(dāng)ACID要求較高的時(shí)候,分布式架構(gòu)會(huì)帶來(lái)較高的系統(tǒng)性能挑戰(zhàn),例如在高隔離級(jí)別下當(dāng)distributed commit占比超過(guò)整個(gè)事務(wù)的5%或者更高以上的話,TPS會(huì)有明顯的損耗?!?/p>

  其實(shí)這只是架構(gòu)導(dǎo)致的問(wèn)題之一。如果對(duì)比一下企業(yè)數(shù)據(jù)庫(kù),Hadoop,和MySQL的主從同步方案就會(huì)發(fā)現(xiàn):前兩個(gè)都有專門的本地可靠性方案(一般是同機(jī)房),而MySQL的主從同步方案是在CAP中優(yōu)先保證性能,犧牲一致性。加上MySQL的增強(qiáng)半同步很容易在大事務(wù)等情況下退化成異步復(fù)制,因此即使是同機(jī)房?jī)?nèi),仍然有很大丟失數(shù)據(jù)風(fēng)險(xiǎn)。前面分析過(guò),Hadoop因?yàn)橛歇?dú)立的HDFS存儲(chǔ)層,它的可靠性是構(gòu)建在HDFS存儲(chǔ)層之上,而不是像MySQL構(gòu)建在主從同步或MGR之上。相對(duì)來(lái)說(shuō),前者的效率要更高,可靠性更好。 業(yè)界大佬們采用存算分離,就是因?yàn)榧軜?gòu)變化能帶來(lái)事半功倍甚至從0到1的改變,從而“讓數(shù)據(jù)庫(kù)替換的代價(jià)變小”。

  縱觀業(yè)界的數(shù)據(jù)庫(kù)存算分離方案,除了之前提到的云原生之外,一般會(huì)從這幾方面入手。

  可靠性

  存儲(chǔ)本身就有非常好的本地和災(zāi)備可靠性能力,反倒是服務(wù)器的可靠性偏弱。存儲(chǔ)

  可以實(shí)現(xiàn)本地盤很多無(wú)法實(shí)現(xiàn)或難以實(shí)現(xiàn)的可靠性功能:

  本地可靠性冗余:基于本地盤實(shí)現(xiàn)冗余有丟數(shù)據(jù)風(fēng)險(xiǎn),有些則很困難,如對(duì) NVMe盤的RAID,或者效率上不如在存儲(chǔ)上實(shí)現(xiàn)。不過(guò)必須指出同樣由于像MySQL這樣的數(shù)據(jù)庫(kù)缺少專業(yè)的本地可靠性方案,本地可靠性切換接管需要專門的適配改造才能發(fā)揮出更大價(jià)值。

  數(shù)據(jù)校驗(yàn):這個(gè)功能在存儲(chǔ)上是標(biāo)配,但在服務(wù)器系統(tǒng)層則很少考慮, 如果數(shù)據(jù)庫(kù)想做,那得自己開(kāi)發(fā)這部分功能。

  高可用:以MySQL為例,大事務(wù)或批處理業(yè)務(wù)都可能導(dǎo)致半同步退化。相對(duì)來(lái)說(shuō)存儲(chǔ)層實(shí)現(xiàn)容災(zāi)對(duì)數(shù)據(jù)庫(kù)壓力的敏感性要低。

  備份:數(shù)據(jù)庫(kù)備份恢復(fù)要依靠全量副本+增量日志,恢復(fù)時(shí)間會(huì)相當(dāng)長(zhǎng)。而存儲(chǔ)一般都有快照復(fù)制能力,AWS和阿里更是把云備份的功能就建立在存儲(chǔ)上了,在數(shù)據(jù)庫(kù)實(shí)現(xiàn)存算分離后,直接將這部分功能用起來(lái)就可以了。

  性能

  解決可靠性問(wèn)題時(shí),一些性能消耗可以避免或降低,如增強(qiáng)半同步對(duì)性能的影響。

  存儲(chǔ)對(duì)性能的優(yōu)化,如對(duì)SSD介質(zhì)的優(yōu)化催生了全閃存存儲(chǔ),采用端到端NVMe over Fabric降低IO路徑和時(shí)延,專用的緩存算法等提升性能。

  新技術(shù)的應(yīng)用,如對(duì)SCM,F(xiàn)PGA的應(yīng)用。

  QoS實(shí)現(xiàn)對(duì)存儲(chǔ) IO的隔離在操作系統(tǒng)層面很困難

  【總結(jié)】

  云原生分布式數(shù)據(jù)庫(kù)的高速發(fā)展,必然帶來(lái)計(jì)算、存儲(chǔ)的分離,“存算分離”是當(dāng)前網(wǎng)絡(luò)技術(shù)發(fā)展和社會(huì)經(jīng)濟(jì)進(jìn)步的時(shí)代產(chǎn)物,是最適合當(dāng)前時(shí)代發(fā)展需求的一種架構(gòu)。數(shù)據(jù)庫(kù)的存算分離是存儲(chǔ)、云計(jì)算、數(shù)據(jù)庫(kù)的技術(shù)的綜合,對(duì)于數(shù)據(jù)庫(kù)使用者和IT規(guī)劃師,可以關(guān)注這一技術(shù)方向和其中的技術(shù)實(shí)現(xiàn),來(lái)解決面臨的問(wèn)題。

分享到

xiesc

相關(guān)推薦