本文通過描述關系型數(shù)據(jù)庫發(fā)展的背景以及云計算的時代特征,分享了數(shù)據(jù)庫計算力的螺旋式上升的進化理念。并且結合阿里云 RDS 產(chǎn)品的發(fā)展路徑,闡述了自主研發(fā)的新一代云托管關系型數(shù)據(jù)庫 PolarDB 的產(chǎn)品整體設計思想,同時也對一些關鍵技術點進行了解讀。
1. 背景
關系型數(shù)據(jù)庫
談到關系型數(shù)據(jù)庫,在這個知識日新月異的TMT時代,聽起來有些“古董”,這個起源于半個世紀以前的IT技術,事實上一直處于現(xiàn)代社會科技的核心,支撐著當今世界絕大多數(shù)的商業(yè)科技文明。CPU、操作系統(tǒng)、數(shù)據(jù)庫這三大核心領域,基本上就是IT時代的縮影,同時也是一切信息化處理、計算力和智能化的基石。從1970年E.F.Codd發(fā)表了一篇里程碑論文“A Relational Model of Data for Large Shared Data Banks”,到80年代初期支持SQL的商用關系型數(shù)據(jù)庫DB2,Oracle的面市,以及90年代初SQL-Server的誕生,都是關系型數(shù)據(jù)庫成功的代表。
時至今日,隨著全球互聯(lián)網(wǎng)的發(fā)展,大數(shù)據(jù)技術的廣泛應用,涌現(xiàn)出越來越多的新型數(shù)據(jù)庫,然而關系型數(shù)據(jù)庫仍然占據(jù)主導地位。最主要的原因之一就是關系型數(shù)據(jù)庫采用了SQL標準,這種高級的非過程化編程接口語言,將計算機科學和易于人類理解認知的數(shù)據(jù)管理方式完美的銜接在了一起,目前還難以超越。
SQL語言
SQL(Structured Query Language)語言是1974年由Boyce和Chamberlin提出的一種介于關系代數(shù)與關系演算之間的結構化查詢語言,其本質(zhì)是用一種類似于自然語言的關鍵字和語法來定義和操作數(shù)據(jù),進行可編程的數(shù)據(jù)存儲、查詢以及管理。這種抽象編程接口,將具體的數(shù)據(jù)問題與數(shù)據(jù)的存放、查詢實現(xiàn)的細節(jié)解耦開來,使得商業(yè)業(yè)務邏輯以及信息管理的計算模式能夠被大量復制和應用,解放了生產(chǎn)力,也極大的促進了商業(yè)化關系型數(shù)據(jù)庫自身的發(fā)展。從SQL后來不斷發(fā)展和豐富來看,SQL已經(jīng)成為關系型數(shù)據(jù)庫語言的標準和王者。到今天這種編程語言還沒有更加完美的替代品。
OLTP
1976年,Jim Gray發(fā)表了名為"Granularity of Locks and Degrees of Consistency in a Shared DataBase"的論文,正式定義了數(shù)據(jù)庫事務的概念和數(shù)據(jù)一致性的機制。而OLTP是關系型數(shù)據(jù)庫涉及事務處理的典型應用,主要是基本的、日常的事務處理,例如銀行交易。事務處理需要遵循ACID四個要素來保證數(shù)據(jù)的正確性,包括原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。而衡量OLTP處理能力的性能指標主要有響應時間、吞吐率等。
開源數(shù)據(jù)庫生態(tài)
在我們簡要的回顧了關系型數(shù)據(jù)庫的歷史、地位和發(fā)展階段后,我們不難看到Oracle、SQL-Server、DB2等關系型數(shù)據(jù)庫仍然占據(jù)著全球商業(yè)數(shù)據(jù)庫的主導地位,雖然曾經(jīng)耳熟能詳?shù)腎nformix、Sybase已經(jīng)淡出大眾的視線。然而,從20世紀90年代開始,另一股推崇知識分享、自由開放的軟件精神成為趨勢和潮流,尤其以Linux、MySQL、PostgreSQL等為代表的開源軟件,開始以強大的生命力不斷發(fā)展壯大,釋放出巨大的社會進步力量,這些被自由分享的科技紅利,孕育和促進了全球互聯(lián)網(wǎng)高科技公司的飛速發(fā)展。這是整個人類社會的進步,我們要感謝那些開源軟件的斗士們,Richard Stallman,Linus Torvalds,Michael Widenius等。當然,最近幾年國內(nèi)涌現(xiàn)出越來越多積極參與到開源主流社區(qū)的中國公司,也在不斷地將技術分享回饋給開源世界。
根據(jù)DB-engines網(wǎng)站的最新統(tǒng)計,不難發(fā)現(xiàn),當把開源數(shù)據(jù)庫MySQL和PostgreSQL加在一起,開源數(shù)據(jù)庫就已經(jīng)超越了商業(yè)數(shù)據(jù)庫Oracle,成為世界上最流行的關系型數(shù)據(jù)庫。
2. 云計算當前的階段
如果說關系型數(shù)據(jù)庫是IT時代的產(chǎn)物。那么在互聯(lián)網(wǎng)時代的云計算,關系型數(shù)據(jù)庫目前正處于一個什么階段呢?IT時代從某種程度上講,更多是創(chuàng)造了計算力,那么進入互聯(lián)網(wǎng)時代的云計算,則是專注于用戶和計算力的連接,提供無處不在的計算力,這個其實是云計算商業(yè)模式的成功所在,可以稱之為1.0版本。而云計算2.0版本,需要在云環(huán)境下,重新進化和升級計算力,這種進化體現(xiàn)了社會計算力的整合以及計算資源能效的進步。為了順應綠色計算以及共享經(jīng)濟的發(fā)展潮流,不僅僅需要云服務器,云數(shù)據(jù)庫,網(wǎng)絡互聯(lián),硬件芯片等等各個軟硬件系統(tǒng)領域的融合以及演進升級,還需要堅持科技以需求為本、服務以用戶為根的科技普惠大眾的理念來進一步促進計算效率和計算智能的提高。
我們正處在一個蓬勃發(fā)展的云計算2.0階段。在這個階段,關系型數(shù)據(jù)庫在云托管環(huán)境逐漸暴露出一些問題,作為在云計算時代的先行者,Amazon于2014年11月12日 的AWS re:Invent 2014大會,發(fā)布Aurora云托管關系型數(shù)據(jù)庫就是為了解決這些問題。這個新一代的數(shù)據(jù)庫的發(fā)布,也昭示著云計算時代,傳統(tǒng)的IT技術核心產(chǎn)品將揭開自我進化的序幕。而2017年SIGMOD數(shù)據(jù)大會, Amazon 發(fā)布了論文”Amazon Aurora: Design Considerations for High Throughput Cloud Native Relational Databases”,更加開放的解釋了基于云環(huán)境的Cloud-Native設計的關系型數(shù)據(jù)庫是如何應孕而生的。
3. 為什么阿里云要研發(fā)新一代的關系型數(shù)據(jù)庫PolarDB ?
在我們回顧了關系型數(shù)據(jù)庫以及云計算的背景之后,我們不難發(fā)現(xiàn), 云計算1.0雖然解決了用戶和計算的連接的問題,但是還需要進一步解決在一個共享計算的環(huán)境下,傳統(tǒng)關系型數(shù)據(jù)庫和公有云服務環(huán)境的融合問題。
云計算1.0用低廉的成本,靈活快速的部署、彈性和擴展能力,獲得了傳統(tǒng)IT計算上云的轉換動力。在低成本享受普惠科技成為常態(tài)之后,隨著用戶業(yè)務的增長,用戶新的痛點開始出現(xiàn),例如,如何從根本上解決用持續(xù)低的成本,享受和傳統(tǒng)IT計算力一樣,甚至更好的云服務,成為迫切需要。這初看起來像偽命題,仔細分析之后,卻淋漓盡致的體現(xiàn)了螺旋式上升的哲學思想。就好像在PC服務器涌現(xiàn)的時代,PC服務器首先用低廉的價格提供了和小型服務器接近的計算能力,然后在保持成本和性價比優(yōu)勢的基礎上,實現(xiàn)了超越小型服務器的性能優(yōu)勢,直至終結了小型服務器時代,開始了PC服務器時代。
所以說云計算時代還遠遠沒有到達鼎盛時期,除非它通過自身進化演變,在不斷保持性價比優(yōu)勢的同時,在具有快速靈活彈性的內(nèi)在屬性基礎上,擁有超過傳統(tǒng)IT計算力的能力之后,云計算才會真正進入它所主宰的時代,這只是個時間問題。
也就是說今天不只是阿里云要做這樣一款關系型數(shù)據(jù)庫,而是所有的云計算廠商都不可避免的要經(jīng)歷這樣一個階段。那就是云計算時代傳統(tǒng)IT計算力的重建和進化!只不過Amazon走在了最前面,而阿里云緊跟其后,都需要經(jīng)歷這進化到蛻變的過程。在這個過程中,新一代關系型數(shù)據(jù)庫是關鍵的里程碑之一。同理,接下來應該有更多更加高級的云服務,比如智能云操作系統(tǒng)出現(xiàn),來融合為云時代設計的硬件芯片和網(wǎng)絡互聯(lián)等等。
在IT時代,傳統(tǒng)的計算力(例如用關系型數(shù)據(jù)庫來處理結構化數(shù)據(jù)等)是服務于系統(tǒng)硬件隔離環(huán)境下的多用戶使用場景的。而云計算時代是多客戶Self-Service租用環(huán)境,各種計算負載場景更加復雜,在這種計算負載變遷的環(huán)境下,如何解決IT時代的技術產(chǎn)物和云計算時代應用環(huán)境的適配矛盾,正是云計算自我進化的內(nèi)在推動力。
例如,在公有云環(huán)境下,隨著用戶的增多,以及用戶業(yè)務和數(shù)據(jù)的增長,備份、性能、遷移、升級、只讀實例、磁盤容量、Binlog延遲等相關問題漸漸顯現(xiàn)出來。這背后大部分原因是由于I/O瓶頸(存儲和網(wǎng)絡)導致,亟須通過技術革新以及新的產(chǎn)品架構解決這個問題。另一方面,從產(chǎn)品形態(tài)來講,阿里云RDS目前的產(chǎn)品形態(tài)各具優(yōu)勢,在下一節(jié)會詳細介紹。但是從產(chǎn)品架構的發(fā)展來看,除去數(shù)據(jù)庫存儲引擎的類型之外,對于關系型數(shù)據(jù)庫,考慮到工程效率以及運維成本,最好有一種通用的產(chǎn)品技術架構能兼顧不同用戶場景的需求,而不是針對每一個場景都實現(xiàn)一種對應的技術架構。
在接下來的內(nèi)容,通過講述阿里云RDS的不同產(chǎn)品形態(tài)的特點,我們會更加清晰的了解到,PolarDB的產(chǎn)品形態(tài)正是在吸收了之前幾種產(chǎn)品形態(tài)的優(yōu)點而孕育而生的。
4. PolarDB的設計思想
用戶需求和公有云自身發(fā)展的選擇
作為云托管的關系型數(shù)據(jù),除了關系型數(shù)據(jù)庫的核心特征之外。PoalrDB更多的關注于如何提供滿足用戶業(yè)務需求的云服務,并且通過技術革新,不斷進化,在提供更好的數(shù)據(jù)庫計算力的同時,滿足用戶的如下業(yè)務需求:
-
上云成本
-
OLTP性能
-
業(yè)務連續(xù)性
-
在線業(yè)務擴展
-
數(shù)據(jù)安全
另一方面云計算除了成本優(yōu)勢之外,彈性和可擴展性也是云計算的天然屬性。為了用戶業(yè)務的擴展,更好的Scale Up以及故障恢復,計算和存儲分離的架構成為云資源環(huán)境更好的選擇。這一點將在下一節(jié)RDS產(chǎn)品架構的演進中得到進一步的詮釋。
阿里云RDS產(chǎn)品架構的演進
如上所述,阿里云PolarDB和Amazon Aurora數(shù)據(jù)庫進化的方向是一致的,然而進化的路徑各有不同。本身來講,這是由于各自的數(shù)據(jù)庫云服務實現(xiàn)方式不同所決定的。阿里云RDS MySQL有如下幾個版本。這些產(chǎn)品形態(tài)滿足不同的用戶業(yè)務場景,具有不同的特點,可以進行優(yōu)勢互補。
1. MySQL基礎版
MySQL基礎版采用數(shù)據(jù)庫計算節(jié)點和存儲節(jié)點分離的方式,利用云盤數(shù)據(jù)本身的可靠性和多副本的特性,同時也利用了ECS云服務器虛擬化來提升標準化部署、版本和運維的管理效率,能夠滿足低端用戶不太注重高可用服務的業(yè)務場景。同時這種架構對于數(shù)據(jù)庫的遷移,數(shù)據(jù)容量的擴容,計算節(jié)點的Scale Up,計算節(jié)點故障恢復都有天然的優(yōu)勢,根本原因就是計算和存儲的分離。后面也會講到,PolarDB也采用了存儲和計算分離的設計理念。
2. MySQL高可用版
MySQL高可用版則是針對企業(yè)級用戶提供的高可用數(shù)據(jù)庫版本,提供99.95%的SLA保障。采用Active-Standby的高可用架構,主節(jié)點和備節(jié)點之間通過MySQL Binlog進行數(shù)據(jù)的Replication。當主節(jié)點發(fā)生故障,備節(jié)點接管服務。同時還支持多個只讀節(jié)點,支持負載均衡的數(shù)據(jù)讀寫分離的訪問方式。采用Shared-Nothing架構,計算和數(shù)據(jù)位于同一個節(jié)點,最大程度保障性能的同時又通過數(shù)據(jù)的多副本帶來可靠性。
3. MySQL金融版
MySQL金融版可以說是針對金融行業(yè)等高端用戶設計的高可用、高可靠云服務產(chǎn)品,采用分布式Raft協(xié)議來保證數(shù)據(jù)的強一致性,擁有更加優(yōu)異的故障恢復時間,更加滿足數(shù)據(jù)容災備份等業(yè)務場景的需求。
PolarDB的進化
PolarDB采用存儲與計算分離的技術架構,同時可以支持更多的只讀節(jié)點。主節(jié)點和只讀節(jié)點之間是Active-Active的Failover方式,計算節(jié)點資源得到充分利用,由于使用共享存儲,共享同一份數(shù)據(jù),進一步降低了用戶的使用成本。下一節(jié)我們將進一步從細節(jié)上描述PolarDB的關鍵特性。
PolarDB的設計思想有幾個大的革新。一是通過重新設計特定的文件系統(tǒng)來存取Redo log這種特定的WAL I/O數(shù)據(jù),二是通過高速網(wǎng)絡和高效協(xié)議將數(shù)據(jù)庫文件和Redo log文件放在共享存儲設備上,避免了多次長路徑I/O的重復操作,相比較Binlog這種方式更加巧妙。另外在DB Server設計上,采用MySQL完全兼容的思路,完全擁抱開源生態(tài),從SQL的編譯、性能優(yōu)化器和執(zhí)行計劃等等都保留了傳統(tǒng)關系型數(shù)據(jù)庫的特色。并且針對Redolog的I/O路徑,專門設計了多副本共享存儲塊設備。
我們知道,分布式數(shù)據(jù)庫一直是數(shù)據(jù)庫領域的熱點,具有非常大的實現(xiàn)難度。不管是遵循CAP理論,還是BASE思想,通用的分布式關系型數(shù)據(jù)庫基本上很難做到技術和商用的完美平衡。與SQL標準以及主流數(shù)據(jù)庫兼容,OLTP ACID事務100%支持,99.99%的高可用,高性能低延遲并發(fā)處理能力,彈性Scale Up,Scale out可擴展性,備份容災和低成本遷移等等,能夠完美兼顧所有這些特點的商用關系型數(shù)據(jù)庫還沒有出現(xiàn)。
阿里云PolarDB和Amazon Aurora的一個共同設計哲學就是,放棄了通用分布式數(shù)據(jù)庫OLTP多路并發(fā)寫的支持,采用一寫多讀的架構設計,簡化了分布式系統(tǒng)難以兼顧的理論模型,又能滿足絕大多數(shù)OLTP的應用場景和性能要求。總之,100% MySQL的兼容性,加上專用的文件系統(tǒng)和共享存儲塊設備設計,以及在下文中提到的多項高級技術的應用,使得新一代關系型數(shù)據(jù)庫PoalrDB在云時代必將大放異彩。
5. PolarDB產(chǎn)品關鍵技術點剖析
在講述了阿里云RDS的不同產(chǎn)品形態(tài)之后,我們再從整體上看一看PolarDB的產(chǎn)品架構。下圖勾畫了PolarDB產(chǎn)品的主要模塊,包括數(shù)據(jù)庫服務器,文件系統(tǒng),共享塊存儲等。
PoalrDB產(chǎn)品架構
阿里云關系型數(shù)據(jù)庫PoalrDB集群
如圖所示,PolarDB產(chǎn)品是一個分布式集群架構的設計。它集眾多高級的技術實現(xiàn)于一身,使得數(shù)據(jù)庫OLTP處理性能有了質(zhì)的飛躍。PoalrDB采用了存儲與計算分離的設計理念,滿足公有云計算環(huán)境下用戶業(yè)務彈性擴展的剛性需求。數(shù)據(jù)庫計算節(jié)點和存儲節(jié)點之間采用高速網(wǎng)絡互聯(lián),并通過RDMA協(xié)議進行數(shù)據(jù)傳輸,使得I/O性能不在成為瓶頸。
數(shù)據(jù)庫節(jié)點采用和MySQL完全兼容的設計。主節(jié)點和只讀節(jié)點之間采用Active-Active的Failover方式,提供DB的高可用服務。DB的數(shù)據(jù)文件、redolog等通過User-Space用戶態(tài)文件系統(tǒng),經(jīng)過塊設備數(shù)據(jù)管理路由,依靠高速網(wǎng)絡和RDMA協(xié)議傳輸?shù)竭h端的Chunk Server。同時DB Server之間僅需同步Redo log相關的元數(shù)據(jù)信息。Chunk Server的數(shù)據(jù)采用多副本確保數(shù)據(jù)的可靠性,并通過Parallel-Raft協(xié)議保證數(shù)據(jù)的一致性。
在描述了PolarDB的產(chǎn)品架構之后,我們再分別從分布式架構,數(shù)據(jù)庫高可用,網(wǎng)絡協(xié)議,存儲塊設備,文件系統(tǒng)和虛擬化等方面逐一介紹下PolarDB使用的關鍵技術點。
Shared Disk架構
分布式系統(tǒng)的精髓就在于分分合合,有時候為了并發(fā)性能進行數(shù)據(jù)切分,而有時候為了數(shù)據(jù)狀態(tài)的一致性而不得不合,或者由于分布式鎖而不得不同步等待。
PolarDB采用Shared Disk架構,其根本原因是上述的計算與存儲分離的需要。邏輯上DB數(shù)據(jù)都放在所有DB server都能夠共享訪問的數(shù)據(jù)chunk存儲服務器上。而在存儲服務內(nèi)部,實際上數(shù)據(jù)被切塊成chunk來達到通過多個服務器并發(fā)訪問I/O的目的。
物理Replication
我們知道,MySQL Binlog記錄的是Tuple行級別的數(shù)據(jù)變更。而在InnoDB引擎層,需要支持事務ACID,也維持了一份Redo日志,存儲的是基于文件物理頁面的修改。這樣MySQL的一個事務處理默認至少需要調(diào)用兩次fsync()進行日志的持久化操作,這對事務處理的系統(tǒng)響應時間和吞吐性能造成了直接的影響。盡管MySQL采用了Group Commit的機制來提升高并發(fā)下的吞吐量,但并不能完全消除I/O瓶頸。
此外,由于單個數(shù)據(jù)庫實例的計算和網(wǎng)絡帶寬有限,一種典型的做法是通過搭建多個只讀實例分擔讀負載來實現(xiàn)Scale out。PolarDB通過將數(shù)據(jù)庫文件以及Redolog等存放在共享存儲設備上,非常討巧的解決了只讀節(jié)點和主節(jié)點的數(shù)據(jù)Replication問題。由于數(shù)據(jù)共享,只讀節(jié)點的增加無需再進行數(shù)據(jù)的完全復制,共用一份全量數(shù)據(jù)和Redo log,只需要同步元數(shù)據(jù)信息,支持基本的MVCC,保證數(shù)據(jù)讀取的一致性即可。這使得系統(tǒng)在主節(jié)點發(fā)生故障進行Failover時候,切換到只讀節(jié)點的故障恢復時間能縮短到30秒以內(nèi)。系統(tǒng)的高可用能力進一步得到增強。而且,只讀節(jié)點和主節(jié)點之間的數(shù)據(jù)延遲也可以降低到毫秒級別。
從并發(fā)的角度來看,使用Binlog復制現(xiàn)在只能按照表級別并行復制,而物理復制只按照數(shù)據(jù)頁維度,粒度更細,并行效率更加高。
最后一點,引入Redolog來實現(xiàn)Replication的好處是,Binlog是可以關閉來減少對性能的影響,除非需要Binlog來用于邏輯上的容災備份或者數(shù)據(jù)遷移。
總之,在I/O路徑中,通常越往底層做,越容易和上層的業(yè)務邏輯和狀態(tài)解耦而降低系統(tǒng)復雜度。而且這種WAL Redo log大文件讀寫的I/O方式也非常適用于分布式文件系統(tǒng)的并發(fā)機制,為PolarDB帶來并發(fā)讀性能的提高。
高速網(wǎng)絡下的RDMA協(xié)議
RDMA之前是在HPC領域被使用多年的技術手段,現(xiàn)在開始被使用到云計算領域,也證實我的一個判斷。云計算2.0時代,將重建人們對于云計算的認識,云端也能夠創(chuàng)造超越傳統(tǒng)IT技術的計算力,這將是一個越來越嚴謹?shù)墓I(yè)實現(xiàn)。
RDMA通常是需要有支持高速網(wǎng)絡連接的網(wǎng)絡設備(如交換機,NIC等),通過特定的編程接口,來和NIC Driver進行通訊,然后通常以Zero-Copy的技術以達到數(shù)據(jù)在NIC和遠端應用內(nèi)存之間高效率低延遲傳遞,而不用通過中斷CPU的方式來進行數(shù)據(jù)從內(nèi)核態(tài)到應用態(tài)的拷貝,極大的降低了性能的抖動,提高了整體系統(tǒng)的處理能力。
Snapshot物理備份
Snapshot是一種流行的基于存儲塊設備的備份方案。其本質(zhì)是采用Copy-On-Write的機制,通過記錄塊設備的元數(shù)據(jù)變化,對于發(fā)生寫操作的塊設備進行寫時復制,將寫操作內(nèi)容改動到新復制出的塊設備上,來實現(xiàn)恢復到快照時間點的數(shù)據(jù)的目的。Snapshot是一個典型的基于時間以及寫負載模型的后置處理機制。也就是說創(chuàng)建Snapshot時,并沒有備份數(shù)據(jù),而是把備份數(shù)據(jù)的負載均分到創(chuàng)建Snapshot之后的實際數(shù)據(jù)寫發(fā)生的時間窗口,以此實現(xiàn)備份、恢復的快速響應。PolarDB提供基于Snapshot以及Redo log的機制,在按時間點恢復用戶數(shù)據(jù)的功能上,比傳統(tǒng)的全量數(shù)據(jù)結合Binlog增量數(shù)據(jù)的恢復方式更加高效。
Parallel-Raft算法
談到分布式數(shù)據(jù)庫的事務一致性,我們很容易想到2PC(2 Phases Commit),3PC(3 Phases Commit)協(xié)議。而論數(shù)據(jù)狀態(tài)一致性,我們就不得不提到Leslie Lamport發(fā)明的Paxos協(xié)議,在Paxos為Google等互聯(lián)網(wǎng)廠商所廣泛應用到多個分布式系統(tǒng)實現(xiàn)之后,Paxos成為了最受關注的數(shù)據(jù)狀態(tài)一致性算法之一??墒怯捎赑axos算法論文的理論和實現(xiàn)過于復雜,導致難以被快速應用到工程技術上。Paxos解決的問題之一是,在多個機器的集合中,集合中初始狀態(tài)相同的任何機器能否通過相同的命令序列到達同樣相同的狀態(tài)點,形成一個一致的收斂的狀態(tài)機。另一個問題是,作為集群中的一員,通過微觀的時間串行通訊方式,需要找到一個始終有效的協(xié)議,當一個機器的某個數(shù)據(jù)狀態(tài)需要改變時,需要和整個集群(包括其他機器)靠通訊和協(xié)議達成相同的認知,一起認同這個機器上的某個狀態(tài)的改變。
基于這兩點,基本上就解決了分布式集群架構中,不同角色的機器,達成一致性狀態(tài)機的問題。也就可以進一步設計出絕大多數(shù)分布式系統(tǒng)的框架。Paxos可以堪稱是P2P(Peer to Peer)的對等設計,更加抽象和通用,也更難以理解。而Raft則是選舉出Leader,再經(jīng)由Leader發(fā)起對其他角色進行狀態(tài)一致性更新的實現(xiàn),更容易理解。而協(xié)議本身的實現(xiàn)流程和Paxos有相似之處。
Parallel-Raft是在Raft協(xié)議的基礎上,針對PolarDB chunk Server的I/O模型,進行改良的一致性算法。Raft協(xié)議基于Log是連續(xù)的,log#n沒有提交的話,后面的Log不允許提交。而PolarDB實現(xiàn)的Parallel-Raft允許并行的提交,打破了Raft的log是連續(xù)的假設,提高并發(fā)度,通過額外的限制來確保一致性。
Docker
容器虛擬化技術最早的出現(xiàn)是Linux內(nèi)核為了解決進程在操作系統(tǒng)之間,或者在進程運行過程當中做遷移,通過進程和操作系統(tǒng)之間的解耦,來達到進程運行時的上下文和狀態(tài)能夠保存,復制和恢復的目的??墒荓XC的實現(xiàn),卻促成了曾紅極一時的Docker的誕生。
從原理上講,容器虛擬化的實現(xiàn)相對于KVM等虛擬化技術而言,更加輕量級。如果用戶不需要感知整個操作系統(tǒng)的功能,那么用容器虛擬化技術理論上應該能夠獲得更好的計算能效比。其實LXC加上Cgroup這種進程虛擬和資源隔離的方式已經(jīng)被使用很多年,在HPC領域就常被應用到MPI超級任務的checkpoint和restart恢復上。PolarDB采用Docker環(huán)境來運行DB計算節(jié)點,用更輕量的虛擬化方式,解決了資源的隔離和性能的隔離,也節(jié)省了系統(tǒng)資源。
User-Space文件系統(tǒng)
談到文件系統(tǒng),就不得不提一下IEEE發(fā)明的POSIX語義(POSIX.1已經(jīng)被ISO所接受),就像說到數(shù)據(jù)庫要談到SQL標準。通用分布式文件系統(tǒng)實現(xiàn)的最大挑戰(zhàn)就是在完全兼容POSIX標準的基礎上提供強勁的并發(fā)文件讀寫性能。可是POSIX的兼容勢必會犧牲一部分性能來獲得對于標準的完全支持,同時系統(tǒng)實現(xiàn)的復雜度也極大的增加。說到底是通用設計和專有設計的取舍和區(qū)別,也是易用性和性能之間的平衡,這是個經(jīng)典問題。分布式文件系統(tǒng)是IT行業(yè)最經(jīng)久不衰的技術,從HPC時代,云計算時代,互聯(lián)網(wǎng)時代,大數(shù)據(jù)時代一直在推陳出新,其實更嚴格的說應該是針對不同應用I/O場景涌現(xiàn)出很多定制化的實現(xiàn),再說白點,就是不去支持POSIX標準。
這一點上,只能說知難而退,不過只服務于專門的I/O場景時,不適用POSIX也不是什么問題。這一點,和從SQL到NoSQL的發(fā)展如出一轍。支持POSIX的文件系統(tǒng),需要實現(xiàn)兼容標準的文件讀寫操作的系統(tǒng)調(diào)用接口,這樣對于用戶而言,就無需修改POSIX接口實現(xiàn)的文件操作應用程序。這樣一來就要求通過Linux VFS層來鉚接具體的文件系統(tǒng)內(nèi)核實現(xiàn)。這也是導致文件系統(tǒng)工程實現(xiàn)難度加大的原因之一。
對于分布式文件系統(tǒng)而言,內(nèi)核模塊還必須和用戶態(tài)的Daemon進行數(shù)據(jù)交換,以達到數(shù)據(jù)分片以及通過Daemon進程傳送到其他機器上的目的。而User-Space文件系統(tǒng)提供用戶使用的專用API,不用完全兼容POSIX標準,也無需在操作系統(tǒng)內(nèi)核進行系統(tǒng)調(diào)用的1:1mapping對接,直接在用戶態(tài)實現(xiàn)文件系統(tǒng)的元數(shù)據(jù)管理和數(shù)據(jù)讀寫訪問支持即可,實現(xiàn)難度大大降低,并且更加有利于分布式系統(tǒng)的進程間通訊。
小結:通過以上的介紹,我們不難發(fā)現(xiàn),PolarDB采用了從計算虛擬化,高速網(wǎng)絡互聯(lián),存儲塊設備,分布式文件系統(tǒng),數(shù)據(jù)庫物理Replication等全方位的技術手段,可以說是眾多熱點技術的集大成。正式這些關鍵技術的整合創(chuàng)新,才使得PolarDB的性能有了質(zhì)的飛躍。
寫在最后
阿里云PolarDB是云計算2.0時代產(chǎn)品進化的關鍵里程碑之一,也是開源數(shù)據(jù)庫生態(tài)的積極推動力。PolarDB將于2017年9月底推出的公測版本,會和MySQL完全兼容。接下來,我們也會啟動兼容PostgreSQL數(shù)據(jù)庫引擎的研發(fā)。