阿里的云原生數(shù)據(jù)庫重新回到提升數(shù)據(jù)庫Scale Up擴展能力的路上,來解決分布式事務(wù),彈性擴展的問題。在必要時可以結(jié)合分布式分庫分表模式進行Scale Out擴展。
華為云數(shù)據(jù)庫專家也表示“高可用、易用易維、高擴展、高性能、與大數(shù)據(jù)相輔相成的云數(shù)據(jù)庫,尤其是基于云場景架構(gòu)設(shè)計的云原生分布式數(shù)據(jù)庫,計算與存儲分離、能充分發(fā)揮最新硬件性能、利用 AI 和 ML(深度學(xué)習(xí)) 等功能成發(fā)展趨勢。”
上面幾家是上(數(shù)據(jù)庫)下(存儲)內(nèi)(自有業(yè)務(wù))外(公有云)通吃的,而Facebook這種自己玩的互聯(lián)網(wǎng)廠商完全從自己的業(yè)務(wù)需要出發(fā),研發(fā)了一套溫數(shù)據(jù)存儲,以存算分離的架構(gòu)來支撐億的用戶量產(chǎn)生的大數(shù)據(jù)。而Snowflake走了一條采用通用對象存儲構(gòu)建公有云數(shù)據(jù)倉庫服務(wù)的道路,并實現(xiàn)了數(shù)據(jù)倉庫的計算無狀態(tài)化。
云原生中無處不在的存算分離
云原生一直在努力實現(xiàn)無狀態(tài)化,而實現(xiàn)的手段就是把數(shù)據(jù)層剝離出去!只不過在應(yīng)用層,數(shù)據(jù)可以剝離給緩存、數(shù)據(jù)庫、文件存儲和消息隊列,而數(shù)據(jù)庫、消息隊列等要云原生時就只能自己做存算分離了。像最近大火的消息隊列Apache Pulsar 給自己的定義是這樣的:“Apache 軟件基金會頂級項目,下一代云原生分布式消息流平臺,集消息、存儲、輕量化函數(shù)式計算為一體,采用計算與存儲分離架構(gòu)設(shè)計,支持多租戶、持久化存儲、多機房跨區(qū)域數(shù)據(jù)復(fù)制,具有強一致性、高吞吐、低延時及高可擴展性等流數(shù)據(jù)存儲特性?!?/p>
而對于Pulsar的云原生特性則是這么描述的:“Pulsar使用計算與存儲分離的云原生架構(gòu),數(shù)據(jù)從Broker搬離,存在共享存儲內(nèi)部。上層是無狀態(tài)Broker,復(fù)制消息分發(fā)和服務(wù);下層是持久化的存儲層Bookie集群。Pulsar存儲是分片的,這種架構(gòu)可以避免擴容時受限制,實現(xiàn)數(shù)據(jù)的獨立擴展和快速恢復(fù)”。
可見實現(xiàn)云原生存算分離已是無處不在,只不過不會直接感知到它罷了。
何為計算、存儲、分離
計算:提供計算能力的不可變基礎(chǔ)設(shè)施
存算分離中計算的變化比較小,也更容易理解,不管是一開始的虛擬機,還是現(xiàn)在最常用的容器,計算部分都是為數(shù)據(jù)庫提供算力,其最基本的資源是CPU和內(nèi)存。一些“計算”還會用服務(wù)器本地盤作為緩存,但并不包括持久化數(shù)據(jù)。這也使“計算”不斷接近云原生中對不可變基礎(chǔ)設(shè)施的要求。
存儲:能力不斷增強的數(shù)據(jù)持久化資源池
相對計算,存儲的能力,形態(tài)則變化較大。但不管是對象存儲,HDFS存儲,KV存儲,文件存儲,還是像AWS那樣提供了部分數(shù)據(jù)庫存儲引擎功能的“計算存儲”,不管是自研的還是購買第三方存儲,是云服務(wù)還是線下存儲,存算分離中的存儲始終承擔著數(shù)據(jù)持久化的工作。這一點是理解存算分離的關(guān)鍵,也是存算分離的主要價值之一。
分離:下刀的位置因時而變
分離容易理解,但怎么切是有講究的,它反映了需求,能力,甚至商業(yè)考量。 如果想讓存儲多做點事,可以切得狠一點,像AWS Aurora把日志引擎都切給存儲了,如果想通用一些,也可以像阿里PolarDB那樣正常地切,以至于底層換個存儲也能用。如果想封閉圈子自己玩,就切給自己家存儲,并且切完了還會連著一點點(封閉接口),公有云基本就是這種做法,如果不想自己研發(fā)存儲,就切給通用存儲,如果想賣存儲,就按通用接口來切,華為,浪潮的大數(shù)據(jù)存儲,騰訊的HDFS存儲都是這個套路,這些都來自商業(yè)的考量。
技術(shù)發(fā)展使存算分離成為可能
存算分離能再次流行是因為之前受限于的技術(shù)障礙:傳輸性能與存儲能力問題已得到解決。
技術(shù)拐點:分離正當時
每一次網(wǎng)絡(luò)技術(shù)的進步都會對我們系統(tǒng)架構(gòu)產(chǎn)生重大影響,大量數(shù)據(jù)相互間同步,既要低延時又要高帶寬,如果沒有網(wǎng)絡(luò)技術(shù)的進步無法實現(xiàn),然而每個短板被填補以后都會帶來IT架構(gòu)的變革,F(xiàn)aceBook在其闡述溫存儲大數(shù)據(jù)研發(fā)的原因中提出了“技術(shù)拐點論”非常準確的說明了當下為什么可以實現(xiàn)存算分離的技術(shù)原因:傳輸協(xié)議和帶寬能力已不再是IO瓶頸
高速以太網(wǎng):吞吐量大幅提升而成本和部署靈活性相比FC和IB有大幅度改善,足以應(yīng)對從當年的千兆邁入10GE,25GE,甚至100GE時代。
無阻塞轉(zhuǎn)發(fā)網(wǎng)絡(luò):比如FaceBook采用了CLOS網(wǎng)絡(luò)拓撲,實現(xiàn)了分解式的網(wǎng)絡(luò),網(wǎng)絡(luò)不會成為性能瓶頸,同時提供了靈活的組網(wǎng)能力
ROCE(RDMA over Converged Ethernet )和NOF(NVMe over Fabric):帶來網(wǎng)絡(luò)訪問高性能、低延遲和低協(xié)議負擔的優(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é)議的提升并不大,這就使當初
使用本地盤方案要解決的問題不再存在了。
全棧方案廠商存儲能力積累 新通用存儲+數(shù)據(jù)庫形成開放架構(gòu)
這個“新”指通用存儲具備的新特性,既能提供比本地盤更好的能力,也有別于傳統(tǒng)
存儲。對于存算分離,比較關(guān)鍵的特性包括:
低成本:這主要針對如類似數(shù)據(jù)湖這種海量數(shù)據(jù)應(yīng)用,而對交易類數(shù)據(jù)庫,因為規(guī)模相對小并且關(guān)注點不同,則不一定是關(guān)注重點;
高性能:交易類的業(yè)務(wù)性能要求高,往往要求亞毫秒級時延和極高的性能密度(IOPS/GB),全閃存存儲是比較合適的選擇;
擴展性:現(xiàn)在的企業(yè)存儲也開始采用分布式架構(gòu),提供Scale-out和Scale-up兼具的、更好的分層擴展能力,不再有擴展性問題;
量身打造的功能:比如專門用于大數(shù)據(jù)的HDFS存儲,用于增強MySQL等開源數(shù)據(jù)庫能力的可計算存儲等。
需求決定是否要做存算分離
技術(shù)決定可行性,需求決定必要性。分布式云原生數(shù)據(jù)庫采用存算分離架構(gòu)的需求來
自兩方面:利用“云”的優(yōu)勢和提升數(shù)據(jù)庫能力,也就是降低數(shù)據(jù)庫替換中的代價。了解存算分離能解決哪些問題及解決方法,對是否需要以存算分離以及如何規(guī)劃構(gòu)建存算分離方案意義重大。
云的必然選擇
由于新一代數(shù)據(jù)庫,尤其是分布式數(shù)據(jù)庫,普遍采用云計算部署方式,甚至一些新生
代數(shù)據(jù)庫就是為云而設(shè)計的。即使不考慮云的因素,分布式數(shù)據(jù)庫改造造成的集群規(guī)模暴漲也需要考慮資源分配,彈性擴展,故障切換自動化等需求。對于分布式數(shù)據(jù)庫來說采用存算分離可以歸結(jié)為資源使用和云原生的需要。
云原生:不可變基礎(chǔ)設(shè)施帶來可靠性提升和彈性擴展能力
上文提到存儲的主要功能是實現(xiàn)數(shù)據(jù)持久化,從而實現(xiàn)不可變基礎(chǔ)設(shè)施。
那么我們來看看存算分離以后,存儲帶來的價值。
首先是計算發(fā)生故障時,由于不需要重新在新服務(wù)器上恢復(fù)數(shù)據(jù),因此實例可以快速恢復(fù)。如Aurora采用了共享存儲架構(gòu)的一寫多讀架構(gòu),只需要在計算實例間同步少量緩存信息,因此讀實例可以快速恢復(fù)成主實例,理論上可以接近ORACLE RAC的切換速度。
其次即使實例間沒有使用同一份共享存儲,在存算分離后,也不需要全量恢復(fù)數(shù)據(jù)了,這樣數(shù)據(jù)庫恢復(fù)到工作狀態(tài)的時間就大幅度縮短了。京東就采用了這種方式,避免了數(shù)據(jù)恢復(fù)中日志恢復(fù)慢和高負載下可能追不上日志的問題。
另外存算分離后計算實例可以擺脫物理服務(wù)器的束縛,任意遷移且不需要進行數(shù)據(jù)同步,這使得彈性擴展變得極為容易。
把規(guī)劃變簡單,提升資源使用效率
對于數(shù)據(jù)庫這類復(fù)雜的應(yīng)用如果使用服務(wù)器本地盤,在資源規(guī)劃時要考慮CPU、內(nèi)存、存儲容量/IOPS/ 帶寬,網(wǎng)絡(luò)IO/帶寬,差不多7個維度。這會有多復(fù)雜呢?
我們平常接觸的世界是三維的相對論把世界變成了4維,但也只解釋了引力,另外三個要靠量子力學(xué)。而要統(tǒng)一相對論和量子力學(xué),目前最有希望的理論弦理論認為世界是11維的!云計算解決這個問題的思路與物理學(xué)一樣,一靠近似,就是忽略到一些維度,比如不管需求有多少,把服務(wù)器的配置統(tǒng)一成兩三種。但這樣一來,資源利用率不可能高。二是像拆分出相對論和量子力學(xué)兩個看似矛盾的理論一樣,把計算和存儲解耦,這便是李飛飛“云原生的架構(gòu),本質(zhì)上底下是分布式共享存儲,上面是分布式共享計算池,中間來做計算存儲解耦”的目的。
以較小代價提升數(shù)據(jù)庫整體能力的需要
李飛飛在《云原生分布式數(shù)據(jù)庫與數(shù)據(jù)倉庫系統(tǒng)點亮數(shù)據(jù)上云之路》提到:“一旦做了分布式架構(gòu),數(shù)據(jù)只能按照一個邏輯進行Sharding和Partition,業(yè)務(wù)邏輯和分庫邏輯不是完美一致,一定會產(chǎn)生跨庫事務(wù)和跨Sharding處理,每當ACID要求較高的時候,分布式架構(gòu)會帶來較高的系統(tǒng)性能挑戰(zhàn),例如在高隔離級別下當distributed commit占比超過整個事務(wù)的5%或者更高以上的話,TPS會有明顯的損耗。”
其實這只是架構(gòu)導(dǎo)致的問題之一。如果對比一下企業(yè)數(shù)據(jù)庫,Hadoop,和MySQL的主從同步方案就會發(fā)現(xiàn):前兩個都有專門的本地可靠性方案(一般是同機房),而MySQL的主從同步方案是在CAP中優(yōu)先保證性能,犧牲一致性。加上MySQL的增強半同步很容易在大事務(wù)等情況下退化成異步復(fù)制,因此即使是同機房內(nèi),仍然有很大丟失數(shù)據(jù)風險。前面分析過,Hadoop因為有獨立的HDFS存儲層,它的可靠性是構(gòu)建在HDFS存儲層之上,而不是像MySQL構(gòu)建在主從同步或MGR之上。相對來說,前者的效率要更高,可靠性更好。 業(yè)界大佬們采用存算分離,就是因為架構(gòu)變化能帶來事半功倍甚至從0到1的改變,從而“讓數(shù)據(jù)庫替換的代價變小”。
縱觀業(yè)界的數(shù)據(jù)庫存算分離方案,除了之前提到的云原生之外,一般會從這幾方面入手。
可靠性
存儲本身就有非常好的本地和災(zāi)備可靠性能力,反倒是服務(wù)器的可靠性偏弱。存儲
可以實現(xiàn)本地盤很多無法實現(xiàn)或難以實現(xiàn)的可靠性功能:
本地可靠性冗余:基于本地盤實現(xiàn)冗余有丟數(shù)據(jù)風險,有些則很困難,如對 NVMe盤的RAID,或者效率上不如在存儲上實現(xiàn)。不過必須指出同樣由于像MySQL這樣的數(shù)據(jù)庫缺少專業(yè)的本地可靠性方案,本地可靠性切換接管需要專門的適配改造才能發(fā)揮出更大價值。
數(shù)據(jù)校驗:這個功能在存儲上是標配,但在服務(wù)器系統(tǒng)層則很少考慮, 如果數(shù)據(jù)庫想做,那得自己開發(fā)這部分功能。
高可用:以MySQL為例,大事務(wù)或批處理業(yè)務(wù)都可能導(dǎo)致半同步退化。相對來說存儲層實現(xiàn)容災(zāi)對數(shù)據(jù)庫壓力的敏感性要低。
備份:數(shù)據(jù)庫備份恢復(fù)要依靠全量副本+增量日志,恢復(fù)時間會相當長。而存儲一般都有快照復(fù)制能力,AWS和阿里更是把云備份的功能就建立在存儲上了,在數(shù)據(jù)庫實現(xiàn)存算分離后,直接將這部分功能用起來就可以了。
性能
解決可靠性問題時,一些性能消耗可以避免或降低,如增強半同步對性能的影響。
存儲對性能的優(yōu)化,如對SSD介質(zhì)的優(yōu)化催生了全閃存存儲,采用端到端NVMe over Fabric降低IO路徑和時延,專用的緩存算法等提升性能。
新技術(shù)的應(yīng)用,如對SCM,F(xiàn)PGA的應(yīng)用。
QoS實現(xiàn)對存儲 IO的隔離在操作系統(tǒng)層面很困難
【總結(jié)】
云原生分布式數(shù)據(jù)庫的高速發(fā)展,必然帶來計算、存儲的分離,“存算分離”是當前網(wǎng)絡(luò)技術(shù)發(fā)展和社會經(jīng)濟進步的時代產(chǎn)物,是最適合當前時代發(fā)展需求的一種架構(gòu)。數(shù)據(jù)庫的存算分離是存儲、云計算、數(shù)據(jù)庫的技術(shù)的綜合,對于數(shù)據(jù)庫使用者和IT規(guī)劃師,可以關(guān)注這一技術(shù)方向和其中的技術(shù)實現(xiàn),來解決面臨的問題。