本文是《云原生數(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很像:
從去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盟庞〕曰Γ”
按阿里張瑞回憶,在“倒戈”前就使用外置存儲(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)。
目前阿里雾家、騰訊铃彰、華為云的云原生數(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)化:
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的云原生特性則是這么描述的:
可見實(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ù)持久化將一直是“存”的主要工作近范。
分離:下刀的位置因時(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ù)條件來選擇。
技術(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ā)生什么。
首先是計(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í)代了赌。