云原生數(shù)據(jù)庫的幕后英雄——趣話分布式數(shù)據(jù)庫的計(jì)算和存儲(chǔ)分離

本文是《云原生數(shù)據(jù)庫的幕后英雄:淺談分布式數(shù)據(jù)庫的計(jì)算和存儲(chǔ)分離》的完整版本,對(duì)技術(shù)發(fā)展的分析更詳細(xì)据某。此外行文更輕松一點(diǎn)阴幌,其實(shí)也是為了彌補(bǔ)文章更長的閱讀障礙。

引言

分布式數(shù)據(jù)庫替代傳統(tǒng)商業(yè)數(shù)據(jù)庫是近年最熱門和最有爭議的話題绊谭。理論上沒有什么數(shù)據(jù)庫不能被替代,但實(shí)際上替代的代價(jià)大到亞馬遜這樣的巨頭到了2019年才完成了去O褥符。巧合的是龙誊,著名開源數(shù)據(jù)庫TiDB創(chuàng)始人黃東旭在《近十年數(shù)據(jù)庫流行趨勢(shì)縱覽抚垃!存儲(chǔ)計(jì)算分離喷楣、ACID 全面回歸......》 一文中將“存儲(chǔ)和計(jì)算進(jìn)一步分離”作為近年數(shù)據(jù)庫流行趨勢(shì)之首,而這正是亞馬遜去O采用的主要架構(gòu)鹤树。計(jì)算存儲(chǔ)分離并沒催生新的數(shù)據(jù)庫铣焊,但使數(shù)據(jù)庫替代的代價(jià)大大降低了,因此對(duì)它的研究有助于轉(zhuǎn)變思路罕伯,解決數(shù)據(jù)庫替代中的一些棘手問題曲伊。

本文將通過分析數(shù)據(jù)庫計(jì)算和存儲(chǔ)分離(簡稱存算分離)如何降低數(shù)據(jù)庫替代的代價(jià),供分布式云原生數(shù)據(jù)庫開發(fā)和使用者參考追他。

計(jì)算和存儲(chǔ)分離有多香坟募,看看大V怎么說

隨著阿里去IOE的商業(yè)成功,在普遍的認(rèn)知中邑狸,在分布式數(shù)據(jù)庫中使用存儲(chǔ)成本高懈糯,擴(kuò)展性差,可靠性低单雾,甚至成了落后架構(gòu)的代名詞赚哗。然而2020年著名開源分布式云原生數(shù)據(jù)庫TiDB創(chuàng)始人黃東旭在《近十年數(shù)據(jù)庫流行趨勢(shì)縱覽她紫!存儲(chǔ)計(jì)算分離、ACID 全面回歸......》 一文中卻將“存儲(chǔ)和計(jì)算進(jìn)一步分離”作為近年數(shù)據(jù)庫流行趨勢(shì)之首屿储。更有意思的是今天倡導(dǎo)分離的贿讹,就是包括阿里等當(dāng)年提出去IOE的互聯(lián)網(wǎng)和云計(jì)算巨頭們。到底是上面的問題得到了解決够掠,還是存算分離有什么獨(dú)特的魅力民褂,先來看看業(yè)界的巨頭大V怎么說。

從Local Disk的源頭發(fā)生轉(zhuǎn)折

作為公有云的開創(chuàng)者疯潭,AWS在十多年前就推出了Hadoop托管服務(wù)EMR助赞。但與開源HADOOP生態(tài)不同的是,EMR采用了S3存儲(chǔ)替代HDFS作為存儲(chǔ)層:“與本地集群要求嚴(yán)格的基礎(chǔ)設(shè)施不同袁勺,EMR 可以將計(jì)算和存儲(chǔ)分離雹食,使您能夠獨(dú)立擴(kuò)展每層并利用 Amazon S3 的分層存儲(chǔ)。利用 EMR期丰,您可以預(yù)置一個(gè)群叶、數(shù)百個(gè)甚至數(shù)千個(gè)計(jì)算實(shí)例或容器來處理任何規(guī)模的數(shù)據(jù)……只需要按實(shí)際使用量付費(fèi)《鄣矗”

這反映出AWS對(duì)存算分離帶來價(jià)值的認(rèn)知:靈活擴(kuò)展和節(jié)省成本(按量付費(fèi))街立。這顛覆了長期以來使用外置存儲(chǔ)擴(kuò)展性差,成本高的認(rèn)知埠通。而這些價(jià)值經(jīng)受了用戶的檢驗(yàn)赎离,在EMR的基礎(chǔ)上,AWS逐漸形成了自己的公有云數(shù)據(jù)湖端辱,這是一個(gè)圍繞S3存儲(chǔ)實(shí)現(xiàn)“數(shù)據(jù)唯一真知”的架構(gòu)梁剔,數(shù)據(jù)可以低成本存儲(chǔ)、共享和流動(dòng):

![s.jianshu.io/upload_images/25580475-58933d1acbe23ae0.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

有行業(yè)巨頭帶路舞蔽,大家紛紛效仿,比如阿里云的數(shù)據(jù)湖和AWS很像:

image

從去IOE回到計(jì)算和存儲(chǔ)解耦

存算分離之風(fēng)此強(qiáng)勁渗柿,以至于去IOE的布道者阿里也轉(zhuǎn)向了存算分離个盆。阿里副總裁,數(shù)據(jù)庫產(chǎn)品事業(yè)部總裁李飛飛在《云原生分布式數(shù)據(jù)庫與數(shù)據(jù)倉庫系統(tǒng)點(diǎn)亮數(shù)據(jù)上云之路》中說:“傳統(tǒng)的馮諾依曼架構(gòu)下計(jì)算和存儲(chǔ)是緊密耦合的朵栖,可將多個(gè)服務(wù)器通過分布式協(xié)議和處理的方式連成一個(gè)系統(tǒng)颊亮,但是服務(wù)器和服務(wù)器之間、節(jié)點(diǎn)和節(jié)點(diǎn)之間陨溅,分布式事務(wù)的協(xié)調(diào)终惑、分布式查詢的優(yōu)化,尤其要保證強(qiáng)一致性声登、強(qiáng)ACID的特性保證的時(shí)候狠鸳,具有非常多的挑戰(zhàn)揣苏。……云原生的架構(gòu)件舵,本質(zhì)上底下是分布式共享存儲(chǔ)卸察,上面是分布式共享計(jì)算池,中間來做計(jì)算存儲(chǔ)解耦铅祸,這樣可以非常好地提供彈性高可用的能力坑质,做到分布式技術(shù)集中式部署,對(duì)應(yīng)用透明临梗。避免傳統(tǒng)架構(gòu)當(dāng)中的很多挑戰(zhàn)涡扼,比如分布式事務(wù)處理、分布式數(shù)據(jù)如何去做partition和sharding盟庞〕曰Γ”

分布式技術(shù)集中式部署的混合體

按阿里張瑞回憶,在“倒戈”前就使用外置存儲(chǔ)是不是一種倒退進(jìn)行過激烈討論什猖。但最后發(fā)現(xiàn)如果不解耦就無法支撐雙11這樣的業(yè)務(wù)高峰彈性擴(kuò)展要求和性能沖擊票彪,這正是李飛飛提到的“緊密耦合”的挑戰(zhàn)。同時(shí)阿里的“倒戈”也是受了AWS的影響不狮。與阿里不同降铸,亞馬遜2019年才完成全面去O,曾和自稱從亞馬遜出來的人聊過摇零,據(jù)說這主要是因?yàn)閬嗰R遜是在少改動(dòng)應(yīng)用的情況下進(jìn)行的去O推掸,因此對(duì)數(shù)據(jù)庫的要求上,就更接近商用數(shù)據(jù)庫(下文會(huì)詳細(xì)拆解Aurora的設(shè)計(jì)目標(biāo)和架構(gòu))驻仅。最終AWS采用了存算分離的架構(gòu)并把大量能力構(gòu)建在存儲(chǔ)層谅畅,“力從地起”實(shí)現(xiàn)接近商業(yè)數(shù)據(jù)庫的能力目標(biāo)。

image

目前阿里雾家、騰訊铃彰、華為云的云原生數(shù)據(jù)庫都參考了這個(gè)架構(gòu),只是相似度不太一樣芯咧。

從自研存儲(chǔ)到通用存儲(chǔ)

上面幾家是上(數(shù)據(jù)庫)下(存儲(chǔ))內(nèi)(自有業(yè)務(wù))外(公有云)通吃的,F(xiàn)acebook這種自己玩的互聯(lián)網(wǎng)廠商完全從自己的業(yè)務(wù)需要出發(fā)研發(fā)了一套溫?cái)?shù)據(jù)存儲(chǔ)竹揍,以存算分離的架構(gòu)來支撐億的用戶量產(chǎn)生的大數(shù)據(jù)敬飒。對(duì)于為什么要做存算分離,F(xiàn)aceBook有獨(dú)到的觀點(diǎn)芬位,后面會(huì)詳細(xì)分析无拗。除了這些能自研存儲(chǔ)的,Snowflake走了一條采用通用對(duì)象存儲(chǔ)構(gòu)建公有云數(shù)據(jù)倉庫服務(wù)的道路昧碉,并實(shí)現(xiàn)了數(shù)據(jù)倉庫的計(jì)算無狀態(tài)化:

image

Snowflake的架構(gòu)受到了TiDB創(chuàng)始人黃東旭的推崇英染。在他存儲(chǔ)和計(jì)算分離作為首要趨勢(shì)的分析中便是以Snowflake和AWS Aurora為樣本的揽惹。

云原生中無處不在的存算分離

云原生一直在努力實(shí)現(xiàn)無狀態(tài)化(關(guān)于云原生為什么需要存算分離在下面“云原生:不可變基礎(chǔ)設(shè)施帶來可靠性提升和彈性擴(kuò)展能力”小節(jié)分析),而實(shí)現(xiàn)的手段就是把數(shù)據(jù)層剝離出去四康!只不過在應(yīng)用層搪搏,數(shù)據(jù)可以剝離給緩存、數(shù)據(jù)庫闪金、文件存儲(chǔ)和消息隊(duì)列疯溺,到數(shù)據(jù)庫、消息隊(duì)列也要實(shí)現(xiàn)云原生時(shí)就只能自己做存算分離了哎垦,Snowflake的無狀態(tài)架構(gòu)便是一例囱嫩。而最近大火的消息隊(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ǔ)特性琐脏。

而對(duì)于Pulsar的云原生特性則是這么描述的:

來自Apache Puulsar微信公眾號(hào)

可見實(shí)現(xiàn)云原生存算分離已是無處不在。

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

不過不要以為大佬們講的是一個(gè)事日裙,由于架構(gòu),商業(yè)目的不同惰蜜,做法差別會(huì)很大昂拂。對(duì)數(shù)據(jù)庫使用者,不需要關(guān)心這些細(xì)節(jié)(可跳過此章)只需要關(guān)注最終方案的效果抛猖,但對(duì)云和數(shù)據(jù)庫規(guī)劃運(yùn)維者則需要看清這其中的演變(沒錯(cuò)格侯,是不斷變化的)的邏輯才能更好地進(jìn)行選型與規(guī)劃。

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

存算分離中計(jì)算的變化比較小财著,也更容易理解:不管是開始的虛擬機(jī)還是現(xiàn)在最常用的容器联四,計(jì)算部分都是提供算力的,其最基本的資源是CPU和內(nèi)存撑教。一些“計(jì)算”還會(huì)用Local Disk作為緩存朝墩,但并不包括持久化數(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ù)庫存儲(chǔ)引擎功能的“計(jì)算存儲(chǔ)”傍念,不管是自研還是購買或使用開源系統(tǒng),是云服務(wù)還是線下存儲(chǔ)葛闷,存算分離中的存儲(chǔ)始終承擔(dān)著數(shù)據(jù)持久化的工作憋槐。這一點(diǎn)是理解存算分離的關(guān)鍵,也是存算分離的主要價(jià)值之一淑趾。

不過正像“計(jì)算存儲(chǔ)”搶了計(jì)算的活兒一樣阳仔,如果哪天出了個(gè)以共享緩存為主要功能的存算分離我也不意外,因?yàn)橐呀?jīng)有這樣的苗頭扣泊,不過我認(rèn)為數(shù)據(jù)持久化將一直是“存”的主要工作近范。

Apache的開源項(xiàng)目Arrow,統(tǒng)一內(nèi)存數(shù)據(jù)格式實(shí)現(xiàn)內(nèi)存數(shù)據(jù)共享

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

分離容易理解延蟹,但怎么切是有講究的评矩,它反映了需求,能力阱飘,以及商業(yè)考量斥杜。

如果想讓存儲(chǔ)多做點(diǎn)事,可以切得多一點(diǎn)沥匈,像AWS Aurora把日志引擎都切給存儲(chǔ)了蔗喂;

如果想通用一些,也可以像阿里PolarDB那樣存儲(chǔ)仍然做數(shù)據(jù)持久化用高帖,以至于底層換個(gè)存儲(chǔ)也能用缰儿;

以上反映了技術(shù)能力和需求的平衡。

對(duì)公有云散址,接口一般不會(huì)開放乖阵,怎么切肉都爛在鍋里;

對(duì)于單純的數(shù)據(jù)庫廠商爪飘,會(huì)傾向基于通用存儲(chǔ)重新開發(fā)义起,Snowflake就基于對(duì)象存儲(chǔ)來開發(fā);

存儲(chǔ)廠商則傾向以通用接口來做“分離”师崎,并會(huì)在此基礎(chǔ)上進(jìn)行增強(qiáng),華為椅棺,浪潮的大數(shù)據(jù)存儲(chǔ)犁罩,騰訊的HDFS存儲(chǔ)都在存儲(chǔ)上實(shí)現(xiàn)了HDFS接口協(xié)議齐蔽,方便用戶遷移到分離架構(gòu)上來,同時(shí)相比一體化方案在成本床估,可靠性等方面又都有增強(qiáng)含滴;

以上反映的商業(yè)考量。

甚至除了真切外還可以“假”切丐巫。Hadoop有單獨(dú)的存儲(chǔ)HDFS谈况,實(shí)現(xiàn)了“計(jì)算可移動(dòng)”,這已經(jīng)在邏輯架構(gòu)上實(shí)現(xiàn)存算分離了递胧,雖然當(dāng)時(shí)技術(shù)上還不具備完全分離的條件碑韵。但為后來的物理分離提供了便利。目前仍然有一些“分離”是邏輯上的缎脾,是否做物理上的分離祝闻,規(guī)劃者可以根據(jù)自己面臨的問題與技術(shù)條件來選擇。

image

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

HADOOP只進(jìn)行邏輯分離反映和技術(shù)與需求間的妥協(xié)遗菠,而存算分離能再次流行是因?yàn)楫?dāng)時(shí)的技術(shù)障礙傳輸性能與存儲(chǔ)能力問題已得到解決联喘。

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

FaceBook在其闡述溫存儲(chǔ)大數(shù)據(jù)研發(fā)的原因中提出了“技術(shù)拐點(diǎn)論”非常準(zhǔn)確的說明了當(dāng)下為什么可以實(shí)現(xiàn)存算分離的技術(shù)原因:傳輸協(xié)議和帶寬能力已不再是IO瓶頸,其中很多技術(shù)除了用于數(shù)據(jù)庫也是云計(jì)算存儲(chǔ)部署甚至是大型數(shù)據(jù)中心構(gòu)建的關(guān)鍵技術(shù)辙纬,值得研究豁遭,但限于篇幅,這里列出廠商的技術(shù)應(yīng)用情況和部分文章鏈接贺拣,后續(xù)有必要可能會(huì)對(duì)部分技術(shù)再做深入分析:

  • 高速以太網(wǎng):隨著數(shù)據(jù)中心網(wǎng)絡(luò)從當(dāng)年的千兆邁入10GE,25GE蓖谢,甚至100GE時(shí)代,吞吐量大幅提升而成本和部署靈活性相比FC和IB有大幅度改善纵柿。

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

    Facebook的分解式網(wǎng)絡(luò)架構(gòu)Fabric
  • ROCE和NOF(NVMe over RoCE):這個(gè)集合了RDMA昂儒,NvME沟使,以太網(wǎng)的縫合怪從協(xié)議層匹配了SSD介質(zhì)的性能需求。阿里PolarDB和AWS最新的IO2 Express使用了ROCE渊跋。

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

而相對(duì)于傳輸能力和協(xié)議的發(fā)展,近年介質(zhì)能力和協(xié)議的提升不大拾酝,此消彼長燕少,技術(shù)拐點(diǎn)已經(jīng)來臨

存儲(chǔ)能力提升

這是比較容易忽視的一點(diǎn)蒿囤,AWS最近不小心說漏了嘴:去年底的re:Invent 2020上AWS宣稱推出首個(gè)云上SAN存儲(chǔ)(到現(xiàn)在還是預(yù)覽版)客们,這個(gè)“首個(gè)”暴露了云存儲(chǔ)直到現(xiàn)在仍沒有能力在技術(shù)上(其實(shí)價(jià)格上也不行)與企業(yè)存儲(chǔ)競爭。相對(duì)傳統(tǒng)廠商,云廠商的強(qiáng)項(xiàng)是對(duì)象存儲(chǔ)底挫,巧的是大數(shù)據(jù)和分析型數(shù)據(jù)庫也是最先基于對(duì)象存儲(chǔ)搞存算分離的恒傻。

不過經(jīng)過近十年的投入,還是有了些積累建邓,2012年AWS有了第一代高性能塊存儲(chǔ)IO1盈厘,2014年有了Aurora。阿里去IOE和自研存儲(chǔ)項(xiàng)目盤古前后腳開始的官边,而分離架構(gòu)的PolarDB則是在盤古2.0(2018年正式發(fā)布)還沒正式發(fā)布時(shí)就在2017年用上了沸手。雖然云上存儲(chǔ)能力仍不及企業(yè)存儲(chǔ),但存算分離已不再難以實(shí)現(xiàn)注簿。

新通用存儲(chǔ)+數(shù)據(jù)庫形成開放架構(gòu)

這個(gè)“新”指通用存儲(chǔ)具備的新特性契吉,既能提供比本地盤更好的能力,也有別于傳統(tǒng)存儲(chǔ)滩援。這使開源或Snowflake這樣的數(shù)據(jù)庫廠商更容易從分離架構(gòu)中獲得優(yōu)勢(shì)栅隐,而無需自己研發(fā)存儲(chǔ)。對(duì)于存算分離玩徊,比較關(guān)鍵的特性包括:

  • 低成本:這主要用于大數(shù)據(jù)數(shù)據(jù)湖類海量數(shù)據(jù)應(yīng)用租悄,對(duì)交易類數(shù)據(jù)庫,因?yàn)橐?guī)模相對(duì)小并且關(guān)注點(diǎn)不同恩袱,則不一定是主要關(guān)注點(diǎn)泣棋;

  • 高性能:交易類的業(yè)務(wù)性能要求高,全閃存存儲(chǔ)AFA是比較合適的選擇畔塔,甚至AWS都收購了一家全閃存廠商E8來加強(qiáng)自身存儲(chǔ)能力潭辈;

  • 擴(kuò)展性:有趣的是現(xiàn)在的企業(yè)存儲(chǔ)也分布式了,這使它的"返場"不會(huì)造成性能和擴(kuò)展性問題

    華為企業(yè)存儲(chǔ)也具備分布式架構(gòu)
  • 增強(qiáng)功能:比如專門用于大數(shù)據(jù)的HDFS存儲(chǔ)澈吨,用于增強(qiáng)Mysql等開源數(shù)據(jù)庫能力的可計(jì)算存儲(chǔ)等

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

技術(shù)決定可行性把敢,需求決定必要性。分布式云原生數(shù)據(jù)庫采用存算分離架構(gòu)的需求來自兩方面:云和提升數(shù)據(jù)庫能力谅辣,也就是降低數(shù)據(jù)庫替換中的代價(jià)修赞。了解存算分離能解決哪些問題及解決方法,對(duì)是否需要以存算分離以及如何規(guī)劃構(gòu)建存算分離方案意義重大桑阶。

云的必然選擇

新一代數(shù)據(jù)庫柏副,尤其是分布式數(shù)據(jù)庫,普遍采用云計(jì)算部署方式蚣录,甚至一些新生代數(shù)據(jù)庫就是為云而設(shè)計(jì)的(所以叫云原生數(shù)據(jù)庫割择?)。即使不考慮云的因素萎河,替代oracle時(shí)造成的集群規(guī)模暴漲也需要考慮資源分配荔泳,彈性擴(kuò)展蕉饼,故障切換自動(dòng)化等需求。對(duì)于分布式數(shù)據(jù)庫來說采用存算分離可以歸結(jié)為資源使用和云原生的需要换可。

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

不可變基礎(chǔ)設(shè)施指基礎(chǔ)設(shè)施生成后就不再做變更椎椰,這是云原生的主要特征之一厦幅。我們來看看AWS認(rèn)為當(dāng)計(jì)算可以在任意服務(wù)器上生滅時(shí)沾鳄,會(huì)發(fā)生什么。

來自AWS呂琳的《力從地起》

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

再看下這張圖

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

另外存算分離后計(jì)算實(shí)例可以擺脫物理服務(wù)器的束縛任意遷移而不需要進(jìn)行數(shù)據(jù)同步得湘,這使得彈性擴(kuò)展變得極為容易。再看前面阿里李飛飛的觀點(diǎn):“……這樣可以非常好地提供彈性高可用的能力”就順利成章了顿仇。對(duì)于這方面的詳情和趣事淘正,可以看一下 《“雙11”十年記 阿里數(shù)據(jù)庫演繹變遷三部曲》中“存儲(chǔ)計(jì)算分離的技術(shù)突破”一節(jié)。

看到這的朋友可能會(huì)有個(gè)疑問:如果數(shù)據(jù)都集中到存儲(chǔ)上了臼闻,如果存儲(chǔ)出問題了怎么辦鸿吆?這個(gè)問題我們后面再分析。

把規(guī)劃變簡單述呐,提升資源使用效率

我們平常接觸的世界是三維的惩淳。相對(duì)論把世界變成了4維,但也只解釋了引力市埋,另外三個(gè)要靠量子力學(xué)黎泣。而要統(tǒng)一相對(duì)論和量子力學(xué),目前最有希望的理論弦理論認(rèn)為世界是11維的缤谎!

對(duì)于數(shù)據(jù)庫這類復(fù)雜的應(yīng)用如果使用服務(wù)器本地盤抒倚,在資源規(guī)劃時(shí)要考慮CPU、內(nèi)存坷澡、存儲(chǔ)容量/IOPS/帶寬托呕,網(wǎng)絡(luò)IO/帶寬,差不多7個(gè)維度。云計(jì)算解決這個(gè)問題的思路與物理學(xué)一樣项郊,一靠近似馅扣,就是忽略到一些維度,比如不管需求有多少着降,把服務(wù)器的配置統(tǒng)一成兩三種差油。但這樣一來,資源利用率不可能高任洞。二是像拆分出相對(duì)論和量子力學(xué)兩個(gè)看似矛盾的理論一樣蓄喇,把計(jì)算和存儲(chǔ)解耦,這便是李飛飛“云原生的架構(gòu)交掏,本質(zhì)上底下是分布式共享存儲(chǔ)妆偏,上面是分布式共享計(jì)算池,中間來做計(jì)算存儲(chǔ)解耦”的目的盅弛。

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

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

所以阿里和AWS的策略都是將數(shù)據(jù)庫“變大”(Scale Up)也就是李飛飛說的100T的一個(gè)庫肮蛹。當(dāng)然實(shí)現(xiàn)這個(gè)目標(biāo),也不僅是容量擴(kuò)展创南,阿里和AWS都利用存儲(chǔ)的能力實(shí)現(xiàn)了性能的增強(qiáng)伦忠。同時(shí)類RAC架構(gòu)能更好的擴(kuò)展計(jì)算性能。

其實(shí)這只是架構(gòu)導(dǎo)致的問題之一稿辙。如果對(duì)比一下企業(yè)數(shù)據(jù)庫昆码,HADOOP,和Mysql的主從同步方案就會(huì)發(fā)現(xiàn)一個(gè)問題:Hadoop因?yàn)橛歇?dú)立的HDFS存儲(chǔ)層邻储,它的可靠性是構(gòu)建在HDFS存儲(chǔ)層之上赋咽,而不是像Mysql構(gòu)建在主從同步或MGR之上。相對(duì)來說吨娜,前者的效率要更高脓匿,可靠性更好

業(yè)界大佬們采用存算分離宦赠,而不是一味投入到對(duì)數(shù)據(jù)庫架構(gòu)和功能的優(yōu)化上陪毡,從而“讓數(shù)據(jù)庫替換的代價(jià)變小”米母。縱觀業(yè)界的數(shù)據(jù)庫存算分離方案毡琉,除了之前提到的云原生之外铁瞒,一般會(huì)從這幾方面入手:

可靠性

存儲(chǔ)本身就有非常好的本地和災(zāi)備可靠性能力,反倒是服務(wù)器的可靠性偏弱桅滋。因此在AWS看來計(jì)算是“損壞后被替換”的慧耍,而存儲(chǔ)卻是“長期”的。存儲(chǔ)可以實(shí)現(xiàn)Local Disk很多無法實(shí)現(xiàn)或難以實(shí)現(xiàn)的可靠性功能:

  • 本地可靠性冗余

    如前文所述虱歪,基于本地盤實(shí)現(xiàn)冗余蜂绎,如Mysql半同步在業(yè)務(wù)壓力大時(shí)會(huì)變異步有丟數(shù)據(jù)風(fēng)險(xiǎn);有些則對(duì)網(wǎng)絡(luò)條件要求高笋鄙,性能損耗大;有些在服務(wù)器上實(shí)現(xiàn)困難怪瓶,如對(duì)NvME盤的RAID萧落,或者效率上不如在存儲(chǔ)上實(shí)現(xiàn)。還有像Aurora這樣的類RAC方案洗贰,則必須要有存儲(chǔ)配合找岖。

    不過必須指出同樣由于像Mysql這樣的數(shù)據(jù)庫中缺少專業(yè)的本地可靠性方案,存儲(chǔ)的可靠性方案中的一部分功能敛滋,比如Aurora多AZ高可用方案也需要數(shù)據(jù)庫的配合來發(fā)揮價(jià)值许布。

    還是這張圖

    Aurora的本地和跨AZ高可用是統(tǒng)一的,并通過存儲(chǔ)實(shí)現(xiàn)數(shù)據(jù)可靠性部分绎晃,用存算分離實(shí)現(xiàn)計(jì)算可生滅蜜唾,并集成在整體方案中。

  • 數(shù)據(jù)校驗(yàn):還記得騰訊的磁盤靜默嗎庶艾?這個(gè)功能在存儲(chǔ)上是標(biāo)配袁余,但在服務(wù)器系統(tǒng)層則很少考慮,如果數(shù)據(jù)庫想做咱揍,那得自己開發(fā)這部分功能颖榜。

  • 容災(zāi):以Mysql為例,大事務(wù)或批處理業(yè)務(wù)都可能導(dǎo)致半同步退化煤裙。相對(duì)來說存儲(chǔ)層實(shí)現(xiàn)容災(zāi)對(duì)數(shù)據(jù)庫壓力的敏感性要低掩完。比如AWS Aurora就是用存儲(chǔ)實(shí)現(xiàn)一個(gè)可用區(qū)+另一可用區(qū)一個(gè)副本故障時(shí)仍能提供服務(wù)的能力。

  • 備份:數(shù)據(jù)庫備份恢復(fù)要依靠全量副本+增量日志硼砰,恢復(fù)時(shí)間會(huì)相當(dāng)長且蓬。存儲(chǔ)一般都有快照功能,可以用來做備份夺刑。AWS和阿里就是把建立在存儲(chǔ)上的云備份功能直接用在了數(shù)據(jù)庫上缅疟,也就是上面圖中的S3分别。

以上這些是存儲(chǔ)多年積累的基本能力,現(xiàn)在又被重新應(yīng)用到分布式數(shù)據(jù)庫中了存淫。而在可計(jì)算存儲(chǔ)基礎(chǔ)上耘斩,可以實(shí)現(xiàn)更多的能力,比如對(duì)表的閃回桅咆。

性能

在傳統(tǒng)的認(rèn)知中括授,性能是使用共享存儲(chǔ)的巨大阻礙。但近年云廠商的實(shí)踐和宣傳中又在不斷打破這種認(rèn)知岩饼。這主要是因?yàn)橥ㄟ^架構(gòu)的改變荚虚,以及存儲(chǔ)針對(duì)數(shù)據(jù)庫的優(yōu)化,可以解決Local Disk方式難以解決的一些性能問題籍茧,從而達(dá)到性能的提升版述,這些優(yōu)化包括:

  • 解決可靠性問題時(shí),一些性能消耗可以避免或降低寞冯,如增強(qiáng)半同步對(duì)性能的影響就很大渴析,增加一個(gè)節(jié)點(diǎn)會(huì)影響約10%的性能。通過存儲(chǔ)解決數(shù)據(jù)可靠性則沒有多大影響吮龄,但如果仍然使用傳統(tǒng)的HA方式俭茧,故障切換時(shí)間會(huì)比較長,因此類似RAC的架構(gòu)又成了首選漓帚。

  • 存儲(chǔ)對(duì)性能的優(yōu)化更深入母债,如對(duì)SSD介質(zhì)的優(yōu)化催生了全閃存存儲(chǔ)。這一類型存儲(chǔ)的出現(xiàn)甚至晚于分布式存儲(chǔ)尝抖。2019年AWS收購了一家全閃存存儲(chǔ)公司毡们,轉(zhuǎn)年就推出了自己的云上“SAN”存儲(chǔ)

  • 資源池部署的均衡與削峰填谷作用,由于存儲(chǔ)可以使用大量磁盤分散IO牵署,同時(shí)由于各個(gè)應(yīng)用的負(fù)載不同漏隐,峰值時(shí)間不同,因此可以實(shí)現(xiàn)削峰填谷奴迅,在平衡成本的情況下達(dá)到更好的性能青责。

  • 新技術(shù)的應(yīng)用,如對(duì)SCM取具,F(xiàn)PGA的應(yīng)用脖隶。存儲(chǔ)上使用這類技術(shù)會(huì)盡量實(shí)現(xiàn)對(duì)應(yīng)用透明,也就是應(yīng)用不需要適配改造就能享受這些新技術(shù)的好處暇检。

  • IO優(yōu)化:AWS的日志即數(shù)據(jù)庫是非常深度的IO優(yōu)化产阱,其實(shí)還有其它方案,比如關(guān)閉雙寫(Double Write)块仆。

  • QoS:實(shí)現(xiàn)對(duì)存儲(chǔ) IO的隔離在操作系統(tǒng)層面比較困難构蹬,而存儲(chǔ)QoS則是標(biāo)配王暗。

存算分離回歸,既是輪回庄敛,也是新生

這里算是對(duì)本文做個(gè)總結(jié)俗壹。數(shù)據(jù)庫的存算分離在我的IT從業(yè)生涯中已經(jīng)發(fā)生兩次了。第一次產(chǎn)生的曾經(jīng)打破大機(jī)壟斷藻烤,后來卻成為壟斷的IOE架構(gòu)绷雏,第二次則是當(dāng)下的云原生數(shù)據(jù)庫。未來也可能再次出現(xiàn)這種架構(gòu)的交替怖亭。我們是否需要存算分離涎显,當(dāng)下的存算分離能給我們帶來什么新價(jià)值呢?

架構(gòu)回歸是需求博弈的產(chǎn)物

回顧一下兴猩,存算分離的基本技術(shù)架構(gòu)雖然被套上了云原生期吓,ServerLess等新名詞,但和20年前沒有本質(zhì)變化峭跳。在沒有技術(shù)障礙時(shí)咆蒿,如何選擇箫老,本質(zhì)上取決于需求俐银。

當(dāng)互聯(lián)網(wǎng)云計(jì)算公司要實(shí)現(xiàn)技術(shù)自主時(shí)苟弛,這個(gè)需求壓倒了一切友驮,結(jié)構(gòu)簡單的一體化架構(gòu)就成為了必然咧最;

當(dāng)分布式數(shù)據(jù)庫的實(shí)踐逐步深入時(shí)谍咆,效率問題逐漸突顯纵揍,存算分離的必要性就顯現(xiàn)出來了逝段;

當(dāng)系統(tǒng)規(guī)模較小時(shí)垛玻,簡單往往是最好的。同時(shí)存算分離也需要在一定規(guī)模后才有明顯的成本奶躯、可靠性和運(yùn)維優(yōu)勢(shì)帚桩。因此具備一定規(guī)模的系統(tǒng),尤其是公有云和私有云嘹黔,采用分離架構(gòu)是必然账嚎。

對(duì)于獨(dú)立數(shù)據(jù)庫廠商來說,選擇哪種架構(gòu)取決于還是否能帶來商業(yè)的成功儡蔓,這是SnowFlake選擇存算分離的邏輯郭蕉,也是一些廠商選擇更簡單的一體化構(gòu)架的邏輯。

而對(duì)于大多數(shù)數(shù)據(jù)庫用戶來說喂江,最終的結(jié)果大于技術(shù)自主這類戰(zhàn)略上的意義召锈,無需關(guān)注底層架構(gòu),只要關(guān)注數(shù)據(jù)庫整體的性能获询、成本涨岁、可靠性是否最優(yōu)拐袜。

存儲(chǔ)歸來變智能

存儲(chǔ)傳統(tǒng)上只被用來保存數(shù)據(jù),而在近年來梢薪,存儲(chǔ)逐漸“搶”了一些數(shù)據(jù)處理的工作“分擔(dān)”計(jì)算層的工作蹬铺。而這個(gè)能力對(duì)于數(shù)據(jù)庫減少采用分離架構(gòu)后的IO量有明顯的效果,因此AWS搞了日志即數(shù)據(jù)庫后沮尿,大家紛紛效仿丛塌。可計(jì)算存儲(chǔ)的概念浮出水面畜疾,未來可能會(huì)是數(shù)據(jù)庫存儲(chǔ)的主流赴邻。

從封閉重新走向通用

上一波存算分離,催生了小型機(jī)+存儲(chǔ)的開放架構(gòu)啡捶,沒錯(cuò)姥敛,當(dāng)年這就是開放架構(gòu)!如今公有云的一體化瞎暑,全棧模式重新表現(xiàn)出了封閉性彤敛。存算分離會(huì)吸引更多廠家投入,未來很可能出現(xiàn)又一個(gè)開放架構(gòu)時(shí)代了赌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末墨榄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子勿她,更是在濱河造成了極大的恐慌袄秩,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逢并,死亡現(xiàn)場離奇詭異之剧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)砍聊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門背稼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玻蝌,你說我怎么就攤上這事蟹肘。” “怎么了灶伊?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵疆前,是天一觀的道長。 經(jīng)常有香客問我聘萨,道長竹椒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任米辐,我火速辦了婚禮胸完,結(jié)果婚禮上书释,老公的妹妹穿的比我還像新娘。我一直安慰自己赊窥,他們只是感情好爆惧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锨能,像睡著了一般扯再。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上址遇,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天熄阻,我揣著相機(jī)與錄音,去河邊找鬼倔约。 笑死秃殉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浸剩。 我是一名探鬼主播钾军,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼绢要!你這毒婦竟也來了吏恭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤重罪,失蹤者是張志新(化名)和其女友劉穎砸泛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛆封,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年勾栗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惨篱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片围俘。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宿亡,死狀恐怖平绩,靈堂內(nèi)的尸體忽然破棺而出笆搓,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布少孝,位于F島的核電站柴底,受9級(jí)特大地震影響鸿脓,放射性物質(zhì)發(fā)生泄漏拨黔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望城榛。 院中可真熱鬧揪利,春花似錦、人聲如沸狠持。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喘垂。三九已至甜刻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間正勒,已是汗流浹背得院。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留章贞,地道東北人祥绞。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像鸭限,于是被迫代替她去往敵國和親蜕径。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容