日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

云原生數(shù)據(jù)庫的幕后英雄:淺談分布式數(shù)據(jù)庫的計(jì)算和存儲分離

 胖頭陀科技 2021-07-16

引言

分布式數(shù)據(jù)庫替代傳統(tǒng)商業(yè)數(shù)據(jù)庫是近年最熱門和最具爭議的話題。理論上沒有什么數(shù)據(jù)庫不能被替代,現(xiàn)實(shí)卻往往是代價(jià)大到難以承受。怎樣才能更好的降低替代帶來的代價(jià)呢?開源數(shù)據(jù)庫TiDB創(chuàng)始人黃東旭在《近十年數(shù)據(jù)庫流行趨勢縱覽!存儲計(jì)算分離、ACID 全面回歸......》將“存儲和計(jì)算分離”作為近年數(shù)據(jù)庫改造流行趨勢之首,其作用就是降低數(shù)據(jù)庫替代的代價(jià)。本文將通過分析當(dāng)前主流廠商的數(shù)據(jù)庫計(jì)算和存儲分離(簡稱存算分離)對數(shù)據(jù)庫替代中一些棘手問題進(jìn)行解析,供分布式云原生數(shù)據(jù)庫開發(fā)和使用者參考。 

計(jì)算和存儲分離

是行業(yè)巨頭共同的選擇

回顧存算分離的發(fā)展歷程,今天倡導(dǎo)分離的,恰巧就是當(dāng)年提出計(jì)算和存儲一體架構(gòu)的互聯(lián)網(wǎng)和云計(jì)算巨頭們。到底存算分離有什么獨(dú)特的魅力,我們看看業(yè)界的巨頭大V怎么說?

作為公有云的開創(chuàng)者,AWS在十多年前就推出了Hadoop托管服務(wù)EMR。EMR采用了S3存儲替代HDFS作為存儲層:“與本地集群要求嚴(yán)格的基礎(chǔ)設(shè)施不同,EMR可以將計(jì)算和存儲分離,使您能夠獨(dú)立擴(kuò)展每層并利用 Amazon S3 的分層存儲。利用EMR,您可以預(yù)置一個、數(shù)百個甚至上千個計(jì)算實(shí)例或容器來處理任何規(guī)模的數(shù)據(jù),只需要按實(shí)際使用量付費(fèi)?!?這反映出AWS對存算分離帶來價(jià)值的認(rèn)知:靈活擴(kuò)展和節(jié)省成本(按量付費(fèi))。這顛覆了長期以來大家對使用外置存儲擴(kuò)展性差,成本高的認(rèn)知。在歷經(jīng)市場考驗(yàn)后,也被業(yè)界紛紛效仿。

阿里副總裁,數(shù)據(jù)庫產(chǎn)品事業(yè)部總裁李飛飛在《云原生分布式數(shù)據(jù)庫與數(shù)據(jù)倉庫系統(tǒng)點(diǎn)亮數(shù)據(jù)上云之路》中說:“傳統(tǒng)的馮諾依曼架構(gòu)下計(jì)算和存儲是緊密耦合的,可將多個服務(wù)器通過分布式協(xié)議和處理的方式連成一個系統(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ì)上底下是分布式共享存儲,上面是分布式共享計(jì)算池,中間來做計(jì)算存儲解耦,這樣可以非常好地提供彈性高可用的能力,做到分布式技術(shù)集中式部署,對應(yīng)用透明?!?/p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

而相對于傳輸能力和協(xié)議的發(fā)展,近年介質(zhì)能力和協(xié)議的提升并不大,這就使當(dāng)初使用本地盤方案要解決的問題不再存在了。 

全棧方案廠商存儲能力積累 

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

這個“新”指通用存儲具備的新特性,既能提供比本地盤更好的能力,也有別于傳統(tǒng)存儲。對于存算分離,比較關(guān)鍵的特性包括: 

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

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

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

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

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

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

云的必然選擇 

由于新一代數(shù)據(jù)庫,尤其是分布式數(shù)據(jù)庫,普遍采用云計(jì)算部署方式,甚至一些新生代數(shù)據(jù)庫就是為云而設(shè)計(jì)的。即使不考慮云的因素,分布式數(shù)據(jù)庫改造造成的集群規(guī)模暴漲也需要考慮資源分配,彈性擴(kuò)展,故障切換自動化等需求。對于分布式數(shù)據(jù)庫來說采用存算分離可以歸結(jié)為資源使用和云原生的需要。 

云原生:不可變基礎(chǔ)設(shè)施帶來

可靠性提升和彈性擴(kuò)展能力

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

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

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

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

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

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

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

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

以較小代價(jià)提升

數(shù)據(jù)庫整體能力的需要

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

其實(shí)這只是架構(gòu)導(dǎo)致的問題之一。如果對比一下企業(yè)數(shù)據(jù)庫,Hadoop和MySQL的主從同步方案就會發(fā)現(xiàn):前兩個都有專門的本地可靠性方案(一般是同機(jī)房),而MySQL的主從同步方案是在CAP中優(yōu)先保證性能,犧牲一致性。加上MySQL的增強(qiáng)半同步很容易在大事務(wù)等情況下退化成異步復(fù)制,因此即使是同機(jī)房內(nèi),仍然有很大丟失數(shù)據(jù)風(fēng)險(xiǎn)。

前面分析過,Hadoop因?yàn)橛歇?dú)立的HDFS存儲層,它的可靠性是構(gòu)建在HDFS存儲層之上,而不是像MySQL構(gòu)建在主從同步或MGR之上。相對來說,前者的效率要更高,可靠性更好。業(yè)界大佬們采用存算分離,就是因?yàn)榧軜?gòu)變化能帶來事半功倍甚至從0到1的改變,從而“讓數(shù)據(jù)庫替換的代價(jià)變小”。

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

可靠性 

存儲本身就有非常好的本地和災(zāi)備可靠性能力,反倒是服務(wù)器的可靠性偏弱。存儲可以實(shí)現(xiàn)本地盤很多無法實(shí)現(xiàn)或難以實(shí)現(xiàn)的可靠性功能:

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

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

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

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

性能 

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

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

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

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

總結(jié)

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

欲看更多文章

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多