精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

阿里云新一代關系型數據庫 PolarDB 剖析

責任編輯:editor006

作者:阿里云 賀軍

2017-08-15 15:49:55

摘自:INFOQ

PolarDB采用存儲與計算分離的技術架構,同時可以支持更多的只讀節點。從并發的角度來看,使用Binlog復制現在只能按照表級別并行復制,而物理復制只按照數據頁維度,粒度更細,并行效率更加高。

本文通過描述關系型數據庫發展的背景以及云計算的時代特征,分享了數據庫計算力的螺旋式上升的進化理念。并且結合阿里云 RDS 產品的發展路徑,闡述了自主研發的新一代云托管關系型數據庫 PolarDB 的產品整體設計思想,同時也對一些關鍵技術點進行了解讀。

1. 背景

關系型數據庫

談到關系型數據庫,在這個知識日新月異的TMT時代,聽起來有些“古董”,這個起源于半個世紀以前的IT技術,事實上一直處于現代社會科技的核心,支撐著當今世界絕大多數的商業科技文明。CPU、操作系統、數據庫這三大核心領域,基本上就是IT時代的縮影,同時也是一切信息化處理、計算力和智能化的基石。從1970年E.F.Codd發表了一篇里程碑論文“A Relational Model of Data for Large Shared Data Banks”,到80年代初期支持SQL的商用關系型數據庫DB2,Oracle的面市,以及90年代初SQL-Server的誕生,都是關系型數據庫成功的代表。

時至今日,隨著全球互聯網的發展,大數據技術的廣泛應用,涌現出越來越多的新型數據庫,然而關系型數據庫仍然占據主導地位。最主要的原因之一就是關系型數據庫采用了SQL標準,這種高級的非過程化編程接口語言,將計算機科學和易于人類理解認知的數據管理方式完美的銜接在了一起,目前還難以超越。

SQL語言

SQL(Structured Query Language)語言是1974年由Boyce和Chamberlin提出的一種介于關系代數與關系演算之間的結構化查詢語言,其本質是用一種類似于自然語言的關鍵字和語法來定義和操作數據,進行可編程的數據存儲、查詢以及管理。這種抽象編程接口,將具體的數據問題與數據的存放、查詢實現的細節解耦開來,使得商業業務邏輯以及信息管理的計算模式能夠被大量復制和應用,解放了生產力,也極大的促進了商業化關系型數據庫自身的發展。從SQL后來不斷發展和豐富來看,SQL已經成為關系型數據庫語言的標準和王者。到今天這種編程語言還沒有更加完美的替代品。

OLTP

1976年,Jim Gray發表了名為"Granularity of Locks and Degrees of Consistency in a Shared DataBase"的論文,正式定義了數據庫事務的概念和數據一致性的機制。而OLTP是關系型數據庫涉及事務處理的典型應用,主要是基本的、日常的事務處理,例如銀行交易。事務處理需要遵循ACID四個要素來保證數據的正確性,包括原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。而衡量OLTP處理能力的性能指標主要有響應時間、吞吐率等。

開源數據庫生態

在我們簡要的回顧了關系型數據庫的歷史、地位和發展階段后,我們不難看到Oracle、SQL-Server、DB2等關系型數據庫仍然占據著全球商業數據庫的主導地位,雖然曾經耳熟能詳的Informix、Sybase已經淡出大眾的視線。然而,從20世紀90年代開始,另一股推崇知識分享、自由開放的軟件精神成為趨勢和潮流,尤其以Linux、MySQL、PostgreSQL等為代表的開源軟件,開始以強大的生命力不斷發展壯大,釋放出巨大的社會進步力量,這些被自由分享的科技紅利,孕育和促進了全球互聯網高科技公司的飛速發展。這是整個人類社會的進步,我們要感謝那些開源軟件的斗士們,Richard Stallman,Linus Torvalds,Michael Widenius等。當然,最近幾年國內涌現出越來越多積極參與到開源主流社區的中國公司,也在不斷地將技術分享回饋給開源世界。

根據DB-engines網站的最新統計,不難發現,當把開源數據庫MySQL和PostgreSQL加在一起,開源數據庫就已經超越了商業數據庫Oracle,成為世界上最流行的關系型數據庫。

2. 云計算當前的階段

如果說關系型數據庫是IT時代的產物。那么在互聯網時代的云計算,關系型數據庫目前正處于一個什么階段呢?IT時代從某種程度上講,更多是創造了計算力,那么進入互聯網時代的云計算,則是專注于用戶和計算力的連接,提供無處不在的計算力,這個其實是云計算商業模式的成功所在,可以稱之為1.0版本。而云計算2.0版本,需要在云環境下,重新進化和升級計算力,這種進化體現了社會計算力的整合以及計算資源能效的進步。為了順應綠色計算以及共享經濟的發展潮流,不僅僅需要云服務器,云數據庫,網絡互聯,硬件芯片等等各個軟硬件系統領域的融合以及演進升級,還需要堅持科技以需求為本、服務以用戶為根的科技普惠大眾的理念來進一步促進計算效率和計算智能的提高。

我們正處在一個蓬勃發展的云計算2.0階段。在這個階段,關系型數據庫在云托管環境逐漸暴露出一些問題,作為在云計算時代的先行者,Amazon于2014年11月12日 的AWS re:Invent 2014大會,發布Aurora云托管關系型數據庫就是為了解決這些問題。這個新一代的數據庫的發布,也昭示著云計算時代,傳統的IT技術核心產品將揭開自我進化的序幕。而2017年SIGMOD數據大會, Amazon 發布了論文”Amazon Aurora: Design Considerations for High Throughput Cloud Native Relational Databases”,更加開放的解釋了基于云環境的Cloud-Native設計的關系型數據庫是如何應孕而生的。

3. 為什么阿里云要研發新一代的關系型數據庫PolarDB ?

在我們回顧了關系型數據庫以及云計算的背景之后,我們不難發現, 云計算1.0雖然解決了用戶和計算的連接的問題,但是還需要進一步解決在一個共享計算的環境下,傳統關系型數據庫和公有云服務環境的融合問題。

云計算1.0用低廉的成本,靈活快速的部署、彈性和擴展能力,獲得了傳統IT計算上云的轉換動力。在低成本享受普惠科技成為常態之后,隨著用戶業務的增長,用戶新的痛點開始出現,例如,如何從根本上解決用持續低的成本,享受和傳統IT計算力一樣,甚至更好的云服務,成為迫切需要。這初看起來像偽命題,仔細分析之后,卻淋漓盡致的體現了螺旋式上升的哲學思想。就好像在PC服務器涌現的時代,PC服務器首先用低廉的價格提供了和小型服務器接近的計算能力,然后在保持成本和性價比優勢的基礎上,實現了超越小型服務器的性能優勢,直至終結了小型服務器時代,開始了PC服務器時代。

所以說云計算時代還遠遠沒有到達鼎盛時期,除非它通過自身進化演變,在不斷保持性價比優勢的同時,在具有快速靈活彈性的內在屬性基礎上,擁有超過傳統IT計算力的能力之后,云計算才會真正進入它所主宰的時代,這只是個時間問題。

也就是說今天不只是阿里云要做這樣一款關系型數據庫,而是所有的云計算廠商都不可避免的要經歷這樣一個階段。那就是云計算時代傳統IT計算力的重建和進化!只不過Amazon走在了最前面,而阿里云緊跟其后,都需要經歷這進化到蛻變的過程。在這個過程中,新一代關系型數據庫是關鍵的里程碑之一。同理,接下來應該有更多更加高級的云服務,比如智能云操作系統出現,來融合為云時代設計的硬件芯片和網絡互聯等等。

在IT時代,傳統的計算力(例如用關系型數據庫來處理結構化數據等)是服務于系統硬件隔離環境下的多用戶使用場景的。而云計算時代是多客戶Self-Service租用環境,各種計算負載場景更加復雜,在這種計算負載變遷的環境下,如何解決IT時代的技術產物和云計算時代應用環境的適配矛盾,正是云計算自我進化的內在推動力。

例如,在公有云環境下,隨著用戶的增多,以及用戶業務和數據的增長,備份、性能、遷移、升級、只讀實例、磁盤容量、Binlog延遲等相關問題漸漸顯現出來。這背后大部分原因是由于I/O瓶頸(存儲和網絡)導致,亟須通過技術革新以及新的產品架構解決這個問題。另一方面,從產品形態來講,阿里云RDS目前的產品形態各具優勢,在下一節會詳細介紹。但是從產品架構的發展來看,除去數據庫存儲引擎的類型之外,對于關系型數據庫,考慮到工程效率以及運維成本,最好有一種通用的產品技術架構能兼顧不同用戶場景的需求,而不是針對每一個場景都實現一種對應的技術架構。

在接下來的內容,通過講述阿里云RDS的不同產品形態的特點,我們會更加清晰的了解到,PolarDB的產品形態正是在吸收了之前幾種產品形態的優點而孕育而生的。

4. PolarDB的設計思想

用戶需求和公有云自身發展的選擇

作為云托管的關系型數據,除了關系型數據庫的核心特征之外。PoalrDB更多的關注于如何提供滿足用戶業務需求的云服務,并且通過技術革新,不斷進化,在提供更好的數據庫計算力的同時,滿足用戶的如下業務需求:

上云成本OLTP性能業務連續性在線業務擴展數據安全

另一方面云計算除了成本優勢之外,彈性和可擴展性也是云計算的天然屬性。為了用戶業務的擴展,更好的Scale Up以及故障恢復,計算和存儲分離的架構成為云資源環境更好的選擇。這一點將在下一節RDS產品架構的演進中得到進一步的詮釋。

阿里云RDS產品架構的演進

如上所述,阿里云PolarDB和Amazon Aurora數據庫進化的方向是一致的,然而進化的路徑各有不同。本身來講,這是由于各自的數據庫云服務實現方式不同所決定的。阿里云RDS MySQL有如下幾個版本。這些產品形態滿足不同的用戶業務場景,具有不同的特點,可以進行優勢互補。

1. MySQL基礎版

MySQL基礎版采用數據庫計算節點和存儲節點分離的方式,利用云盤數據本身的可靠性和多副本的特性,同時也利用了ECS云服務器虛擬化來提升標準化部署、版本和運維的管理效率,能夠滿足低端用戶不太注重高可用服務的業務場景。同時這種架構對于數據庫的遷移,數據容量的擴容,計算節點的Scale Up,計算節點故障恢復都有天然的優勢,根本原因就是計算和存儲的分離。后面也會講到,PolarDB也采用了存儲和計算分離的設計理念。

2. MySQL高可用版

MySQL高可用版則是針對企業級用戶提供的高可用數據庫版本,提供99.95%的SLA保障。采用Active-Standby的高可用架構,主節點和備節點之間通過MySQL Binlog進行數據的Replication。當主節點發生故障,備節點接管服務。同時還支持多個只讀節點,支持負載均衡的數據讀寫分離的訪問方式。采用Shared-Nothing架構,計算和數據位于同一個節點,最大程度保障性能的同時又通過數據的多副本帶來可靠性。

3. MySQL金融版

MySQL金融版可以說是針對金融行業等高端用戶設計的高可用、高可靠云服務產品,采用分布式Raft協議來保證數據的強一致性,擁有更加優異的故障恢復時間,更加滿足數據容災備份等業務場景的需求。

PolarDB的進化

PolarDB采用存儲與計算分離的技術架構,同時可以支持更多的只讀節點。主節點和只讀節點之間是Active-Active的Failover方式,計算節點資源得到充分利用,由于使用共享存儲,共享同一份數據,進一步降低了用戶的使用成本。下一節我們將進一步從細節上描述PolarDB的關鍵特性。

PolarDB的設計思想有幾個大的革新。一是通過重新設計特定的文件系統來存取Redo log這種特定的WAL I/O數據,二是通過高速網絡和高效協議將數據庫文件和Redo log文件放在共享存儲設備上,避免了多次長路徑I/O的重復操作,相比較Binlog這種方式更加巧妙。另外在DB Server設計上,采用MySQL完全兼容的思路,完全擁抱開源生態,從SQL的編譯、性能優化器和執行計劃等等都保留了傳統關系型數據庫的特色。并且針對Redolog的I/O路徑,專門設計了多副本共享存儲塊設備。

我們知道,分布式數據庫一直是數據庫領域的熱點,具有非常大的實現難度。不管是遵循CAP理論,還是BASE思想,通用的分布式關系型數據庫基本上很難做到技術和商用的完美平衡。與SQL標準以及主流數據庫兼容,OLTP ACID事務100%支持,99.99%的高可用,高性能低延遲并發處理能力,彈性Scale Up,Scale out可擴展性,備份容災和低成本遷移等等,能夠完美兼顧所有這些特點的商用關系型數據庫還沒有出現。

阿里云PolarDB和Amazon Aurora的一個共同設計哲學就是,放棄了通用分布式數據庫OLTP多路并發寫的支持,采用一寫多讀的架構設計,簡化了分布式系統難以兼顧的理論模型,又能滿足絕大多數OLTP的應用場景和性能要求??傊?00% MySQL的兼容性,加上專用的文件系統和共享存儲塊設備設計,以及在下文中提到的多項高級技術的應用,使得新一代關系型數據庫PoalrDB在云時代必將大放異彩。

5. PolarDB產品關鍵技術點剖析

在講述了阿里云RDS的不同產品形態之后,我們再從整體上看一看PolarDB的產品架構。下圖勾畫了PolarDB產品的主要模塊,包括數據庫服務器,文件系統,共享塊存儲等。

PoalrDB產品架構

阿里云關系型數據庫PoalrDB集群

如圖所示,PolarDB產品是一個分布式集群架構的設計。它集眾多高級的技術實現于一身,使得數據庫OLTP處理性能有了質的飛躍。PoalrDB采用了存儲與計算分離的設計理念,滿足公有云計算環境下用戶業務彈性擴展的剛性需求。數據庫計算節點和存儲節點之間采用高速網絡互聯,并通過RDMA協議進行數據傳輸,使得I/O性能不在成為瓶頸。

數據庫節點采用和MySQL完全兼容的設計。主節點和只讀節點之間采用Active-Active的Failover方式,提供DB的高可用服務。DB的數據文件、redolog等通過User-Space用戶態文件系統,經過塊設備數據管理路由,依靠高速網絡和RDMA協議傳輸到遠端的Chunk Server。同時DB Server之間僅需同步Redo log相關的元數據信息。Chunk Server的數據采用多副本確保數據的可靠性,并通過Parallel-Raft協議保證數據的一致性。

在描述了PolarDB的產品架構之后,我們再分別從分布式架構,數據庫高可用,網絡協議,存儲塊設備,文件系統和虛擬化等方面逐一介紹下PolarDB使用的關鍵技術點。

Shared Disk架構

分布式系統的精髓就在于分分合合,有時候為了并發性能進行數據切分,而有時候為了數據狀態的一致性而不得不合,或者由于分布式鎖而不得不同步等待。
PolarDB采用Shared Disk架構,其根本原因是上述的計算與存儲分離的需要。邏輯上DB數據都放在所有DB server都能夠共享訪問的數據chunk存儲服務器上。而在存儲服務內部,實際上數據被切塊成chunk來達到通過多個服務器并發訪問I/O的目的。

物理Replication

我們知道,MySQL Binlog記錄的是Tuple行級別的數據變更。而在InnoDB引擎層,需要支持事務ACID,也維持了一份Redo日志,存儲的是基于文件物理頁面的修改。這樣MySQL的一個事務處理默認至少需要調用兩次fsync()進行日志的持久化操作,這對事務處理的系統響應時間和吞吐性能造成了直接的影響。盡管MySQL采用了Group Commit的機制來提升高并發下的吞吐量,但并不能完全消除I/O瓶頸。

此外,由于單個數據庫實例的計算和網絡帶寬有限,一種典型的做法是通過搭建多個只讀實例分擔讀負載來實現Scale out。PolarDB通過將數據庫文件以及Redolog等存放在共享存儲設備上,非常討巧的解決了只讀節點和主節點的數據Replication問題。由于數據共享,只讀節點的增加無需再進行數據的完全復制,共用一份全量數據和Redo log,只需要同步元數據信息,支持基本的MVCC,保證數據讀取的一致性即可。這使得系統在主節點發生故障進行Failover時候,切換到只讀節點的故障恢復時間能縮短到30秒以內。系統的高可用能力進一步得到增強。而且,只讀節點和主節點之間的數據延遲也可以降低到毫秒級別。

從并發的角度來看,使用Binlog復制現在只能按照表級別并行復制,而物理復制只按照數據頁維度,粒度更細,并行效率更加高。

最后一點,引入Redolog來實現Replication的好處是,Binlog是可以關閉來減少對性能的影響,除非需要Binlog來用于邏輯上的容災備份或者數據遷移。

總之,在I/O路徑中,通常越往底層做,越容易和上層的業務邏輯和狀態解耦而降低系統復雜度。而且這種WAL Redo log大文件讀寫的I/O方式也非常適用于分布式文件系統的并發機制,為PolarDB帶來并發讀性能的提高。

高速網絡下的RDMA協議

RDMA之前是在HPC領域被使用多年的技術手段,現在開始被使用到云計算領域,也證實我的一個判斷。云計算2.0時代,將重建人們對于云計算的認識,云端也能夠創造超越傳統IT技術的計算力,這將是一個越來越嚴謹的工業實現。

RDMA通常是需要有支持高速網絡連接的網絡設備(如交換機,NIC等),通過特定的編程接口,來和NIC Driver進行通訊,然后通常以Zero-Copy的技術以達到數據在NIC和遠端應用內存之間高效率低延遲傳遞,而不用通過中斷CPU的方式來進行數據從內核態到應用態的拷貝,極大的降低了性能的抖動,提高了整體系統的處理能力。

Snapshot物理備份

Snapshot是一種流行的基于存儲塊設備的備份方案。其本質是采用Copy-On-Write的機制,通過記錄塊設備的元數據變化,對于發生寫操作的塊設備進行寫時復制,將寫操作內容改動到新復制出的塊設備上,來實現恢復到快照時間點的數據的目的。Snapshot是一個典型的基于時間以及寫負載模型的后置處理機制。也就是說創建Snapshot時,并沒有備份數據,而是把備份數據的負載均分到創建Snapshot之后的實際數據寫發生的時間窗口,以此實現備份、恢復的快速響應。PolarDB提供基于Snapshot以及Redo log的機制,在按時間點恢復用戶數據的功能上,比傳統的全量數據結合Binlog增量數據的恢復方式更加高效。

Parallel-Raft算法

談到分布式數據庫的事務一致性,我們很容易想到2PC(2 Phases Commit),3PC(3 Phases Commit)協議。而論數據狀態一致性,我們就不得不提到Leslie Lamport發明的Paxos協議,在Paxos為Google等互聯網廠商所廣泛應用到多個分布式系統實現之后,Paxos成為了最受關注的數據狀態一致性算法之一。可是由于Paxos算法論文的理論和實現過于復雜,導致難以被快速應用到工程技術上。Paxos解決的問題之一是,在多個機器的集合中,集合中初始狀態相同的任何機器能否通過相同的命令序列到達同樣相同的狀態點,形成一個一致的收斂的狀態機。另一個問題是,作為集群中的一員,通過微觀的時間串行通訊方式,需要找到一個始終有效的協議,當一個機器的某個數據狀態需要改變時,需要和整個集群(包括其他機器)靠通訊和協議達成相同的認知,一起認同這個機器上的某個狀態的改變。

基于這兩點,基本上就解決了分布式集群架構中,不同角色的機器,達成一致性狀態機的問題。也就可以進一步設計出絕大多數分布式系統的框架。Paxos可以堪稱是P2P(Peer to Peer)的對等設計,更加抽象和通用,也更難以理解。而Raft則是選舉出Leader,再經由Leader發起對其他角色進行狀態一致性更新的實現,更容易理解。而協議本身的實現流程和Paxos有相似之處。

Parallel-Raft是在Raft協議的基礎上,針對PolarDB chunk Server的I/O模型,進行改良的一致性算法。Raft協議基于Log是連續的,log#n沒有提交的話,后面的Log不允許提交。而PolarDB實現的Parallel-Raft允許并行的提交,打破了Raft的log是連續的假設,提高并發度,通過額外的限制來確保一致性。

Docker

容器虛擬化技術最早的出現是Linux內核為了解決進程在操作系統之間,或者在進程運行過程當中做遷移,通過進程和操作系統之間的解耦,來達到進程運行時的上下文和狀態能夠保存,復制和恢復的目的。可是LXC的實現,卻促成了曾紅極一時的Docker的誕生。

從原理上講,容器虛擬化的實現相對于KVM等虛擬化技術而言,更加輕量級。如果用戶不需要感知整個操作系統的功能,那么用容器虛擬化技術理論上應該能夠獲得更好的計算能效比。其實LXC加上Cgroup這種進程虛擬和資源隔離的方式已經被使用很多年,在HPC領域就常被應用到MPI超級任務的checkpoint和restart恢復上。PolarDB采用Docker環境來運行DB計算節點,用更輕量的虛擬化方式,解決了資源的隔離和性能的隔離,也節省了系統資源。

User-Space文件系統

談到文件系統,就不得不提一下IEEE發明的POSIX語義(POSIX.1已經被ISO所接受),就像說到數據庫要談到SQL標準。通用分布式文件系統實現的最大挑戰就是在完全兼容POSIX標準的基礎上提供強勁的并發文件讀寫性能??墒荘OSIX的兼容勢必會犧牲一部分性能來獲得對于標準的完全支持,同時系統實現的復雜度也極大的增加。說到底是通用設計和專有設計的取舍和區別,也是易用性和性能之間的平衡,這是個經典問題。分布式文件系統是IT行業最經久不衰的技術,從HPC時代,云計算時代,互聯網時代,大數據時代一直在推陳出新,其實更嚴格的說應該是針對不同應用I/O場景涌現出很多定制化的實現,再說白點,就是不去支持POSIX標準。

這一點上,只能說知難而退,不過只服務于專門的I/O場景時,不適用POSIX也不是什么問題。這一點,和從SQL到NoSQL的發展如出一轍。支持POSIX的文件系統,需要實現兼容標準的文件讀寫操作的系統調用接口,這樣對于用戶而言,就無需修改POSIX接口實現的文件操作應用程序。這樣一來就要求通過Linux VFS層來鉚接具體的文件系統內核實現。這也是導致文件系統工程實現難度加大的原因之一。

對于分布式文件系統而言,內核模塊還必須和用戶態的Daemon進行數據交換,以達到數據分片以及通過Daemon進程傳送到其他機器上的目的。而User-Space文件系統提供用戶使用的專用API,不用完全兼容POSIX標準,也無需在操作系統內核進行系統調用的1:1mapping對接,直接在用戶態實現文件系統的元數據管理和數據讀寫訪問支持即可,實現難度大大降低,并且更加有利于分布式系統的進程間通訊。

小結:通過以上的介紹,我們不難發現,PolarDB采用了從計算虛擬化,高速網絡互聯,存儲塊設備,分布式文件系統,數據庫物理Replication等全方位的技術手段,可以說是眾多熱點技術的集大成。正式這些關鍵技術的整合創新,才使得PolarDB的性能有了質的飛躍。

寫在最后

阿里云PolarDB是云計算2.0時代產品進化的關鍵里程碑之一,也是開源數據庫生態的積極推動力。PolarDB將于2017年9月底推出的公測版本,會和MySQL完全兼容。接下來,我們也會啟動兼容PostgreSQL數據庫引擎的研發。

鏈接已復制,快去分享吧

企業網版權所有?2010-2024 京ICP備09108050號-6京公網安備 11010502049343號

  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 商都县| 克东县| 资中县| 社旗县| 太原市| 德庆县| 密云县| 沛县| 南京市| 奈曼旗| 塘沽区| 汽车| 西昌市| 遂溪县| 永丰县| 金塔县| 保康县| 富蕴县| 朝阳市| 安义县| 扶风县| 齐河县| 宜川县| 禄劝| 界首市| 玉环县| 陆川县| 开阳县| 石屏县| 韶关市| 孝昌县| 三穗县| 舞阳县| 文水县| 兴义市| 九台市| 榕江县| 榆林市| 汉沽区| 林口县| 宁海县|