天天看點

PolarDB-X 的誕生和發展

資料庫系統是一個曆史悠久卻又生機勃勃的領域,1970s Edgar F. Codd 提出關系模型,随後有了 IBM System R 關系資料庫原型的故事。1974~1979年,System R 引入 SQL 關系文法、Access Path 來描述索引、回表等、Join Method 等概念( Index Join 和 Sort Join 的實作),在使用者管理上有了 Grant、View 等運維指令,資料庫的當機恢複、事務 Lock 機制基本已經成型,除此以外在系統層面已經在考慮平衡生成 Codegen 的 CPU 開銷和帶來的加速,有了分層的 B 樹做存儲和索引的概念。經過一段時間的發展後,關系資料庫架構基本就成型了,核心就是 Query 和 Storage。

PolarDB-X 的誕生和發展
參考論文:《A History and Evaluation of System R》、《Architecture of a Database System》

NoSQL & NewSQL

2000 年後,伴随網際網路的興起,資料規模也在急速膨脹,傳統的單機資料庫在擴充性上受到了極大的挑戰。為解決擴充性問題,資料庫系統在多個方向上進行了探索,新型架構和産品也如雨後春筍,層出不窮。早期階段出現了以犧牲事務、SQL 等特性換取極緻擴充性的 NoSQL 系統,比如 Bigtable、Hbase、Cassandra、MongoDB 等。之後在一段時間的探索後,業界普遍認識到了 SQL、事務等的不可或缺性,2012 年 Google Spanner 論文的發表,讓大家看到了不一樣的分布式+資料庫的工程實作。在這之後的幾年中,NewSQL 概念逐漸進入大家的視野。

PolarDB-X 的誕生和發展

NewSQL發展

經過了10來年的發展,目前分布式資料庫可以分為三個技術方向,一是以 DRDS、TDSQL 等為代表的 Sharding 技術,其最大的優勢在于繼承了 MySQL 存儲多年的的技術積累,其穩定性可以很好滿足大 B 使用者的訴求;二是以 Cockroach/YugabyteDB/TiDB 為代表的 NewSQL,最大的優勢在于全自研的技術棧,提供了水準伸縮和原生分布式的能力,重點以 Raft/Paxos 資料高可用、分布式強一緻事務為典型技術,滿足使用者對于分布式下資料一緻性的要求;三是以 PolarDB/Aurora 為代表的雲原生 DB,特點是基于雲的虛拟化的技術,提供資源池化的能力,重點以新的 RDMA 硬體 + 存儲計算分離的模式,在資料庫的資料庫秒級備份、極速彈性、按需付費有創新的技術突破,滿足使用者低成本和高性能的使用要求。(ps. 有興趣的可以看下論文《What’s Really New with NewSQL?》)。

PolarDB-X 的誕生和發展

回首和展望

回顧這段曆史我們可以看到,目前主流單機或分布式資料庫依然沿用了 40 年前 System R 的模型和設計,Codegen、Paxos、MVCC 等很多主流技術在 80、90 年代就已經有了比較好的理論基礎和技術沉澱,面對新興場景的擴充性需求,采用分布式技術的三個新的探索方向還未成定局。一方面,分布式技術可以有效的解決擴充性問題,并降低系統成本,是以是一個非常有潛力的方向;另一方面,正如 Fred Brooks 所說,No Silver Bullet,分布式更多是幫助使用者解決單機解決不了的擴充性,而不是純定位為替換單機資料庫。在小規模資料下,分布式資料庫反而會增加更多的成本和運維負擔。

目前分布式資料庫方向還未形成明确的行業标準,單機資料庫生态依然非常繁榮,是以如何在解決擴充性問題的同時,支援從單機到分布式的平滑過渡,成為實際業務系統中同樣關注的能力,另外如何建構生态,實作單機資料庫生态向分布式的擴充或演進,成為分布式方向能否走的更遠的關鍵。

PolarDB-X 的發展史

2003 年淘寶網成立之初采用的是經典的 LAMP 架構,随着使用者量迅速增長,單機 MySQL 資料庫很快便無法滿足資料存儲需求,之後淘寶網進行了架構更新,資料庫改用 Oracle。随着使用者量的繼續快速增長,Oracle 資料庫也開始成批成批的增加,即使這樣,仍然沒有滿足業務對資料庫擴充性的訴求,是以阿裡巴巴内部在 2009 年時發起了著名的去 IOE 運動,PolarDB-X 也開啟了自己的演進之路。

PolarDB-X 的誕生和發展

PolarDB-X 0.5 時代

去 IOE 的關鍵一環是實作對 Oracle 的替換,當時淘寶的業務體量已很難用成熟的技術産品支撐,為了避免以後出現卡脖子情況,技術的自力更生和自主可控成為一個核心訴求。一方面,随着 x86 技術日趨成熟,穩定性與小型機的差距不斷縮小,另一方面,MySQL 采用輕量化線程模型并具備高并發的支援能力,其生态逐漸完善,是以新方案采用了基于 Sharding 技術 + 開源 MySQL 的分布式架構( TDDL + AliSQL ),我們稱為 PolarDB-X 0.5 版本時代。這代産品的特征是以解決擴充性為目标、面向系統架構使用,尚不具備産品化能力。

PolarDB-X 1.0 時代

随着這套架構的逐漸成熟,14 年開始,我們基于阿裡雲走上了雲資料庫發展之路。作為分庫分表技術的開創者,我們推出了 DRDS + RDS 的分布式雲資料庫服務,我們稱為 PolarDB-X 1.0 時代。這代産品的特征是采用 Share-Nothing 架構、以解決存儲擴充性為出發點、提供面向使用者的産品化傳遞能力。1.0 版本是國内第一家落地分布式技術的雲服務,成為雲市場上分布式資料庫技術方向的開創者和引領者。

針對使用者使用中的痛點,我們不斷進行産品能力疊代,陸續支援了分布式事務、全局二級索引、異步 DDL 等核心特性,持續改進 SQL 相容性,實作子查詢展開、Join 下推等複雜優化,并開發了平滑擴容、一緻性備份恢複、SQL 閃回、SQL 審計等運維能力。這段時間我們不斷擴充所謂分庫分表中間件技術的能力邊界,試圖找到它的能力上限。這個探索的過程,一方面使我們的計算層能力更加穩定、豐富和标準化,另一方面也促使着 DRDS 從中間件到分布式資料庫的蛻變。

PolarDB-X 2.0 時代

18 年開始,我們逐漸觸碰到了計算層的能力邊界,比如無法提供 RR 隔離級别的事務能力、計算下推受限于 SQL 表達能力、資料查詢的傳輸效率底下、多副本的線性一緻性不可控等,這些問題像一個無法穿透的屏障,我們能看到屏障的對面是什麼,能看到所有障礙都指向了同一個方向:計算層需要與存儲層深度融合。

值得高興的是,我們的 AliSQL 分支從誕生起就沒有停止前進的步伐,通過集團業務多年的技術錘煉,基于 AliSQL 演化而來的 X-DB 資料庫(包括 X-Paxos 協定庫、X-Engine 存儲引擎等),在全球三副本、低成本存儲等技術有了非常好的沉澱。

與此同時,基于雲原生架構理念的 PolarDB,通過引入 RDMA 網絡優化存儲計算分離架構,實作一寫多讀的能力,并提供資源池化降低使用者成本,優化并提供秒級備份恢複、秒級彈性等能力,成為公有雲增速最快的資料庫産品。

這些技術探索和沉澱,使 PolarDB-X 團隊有底氣開始思考基于雲架構的分布式資料庫應該是什麼樣的形态,從宏觀角度來看,會有雲原生、國産化、分布式、HTAP 等訴求,從使用者角度來看,需要滿足使用者使用雲的一些期望,比如使用者的資料庫資料永遠不會丢,即使主機異常當機,這裡需要有資料強一緻以及高可用容災等能力。再比如随着移動網際網路和 IoT 的普及,資料層面會有爆炸式的增長,以及今年疫情之後有更多的企業會關注IT成本,是以高性能、低成本和可擴充的計算和存儲能力也成為普适性訴求,另外類似 Snowflake 的按查詢付費的彈性能力,也是市場的另一個訴求。是以,簡單總結一下,下一代的分布式資料庫需要具備:金融級高可用和容災、水準擴充、低成本存儲、按需彈性、透明分布式、HTAP 混合負載、融合新硬體等。

是以,2019 年 PolarDB-X 團隊完成 DRDS SQL 引擎和 X-DB 資料庫存儲技術的融合,并結合 PolarDB 的雲原生特性,承上啟下推出了新一代的雲原生分布式資料庫。 專注解決單機解決不好的分布式擴充性問題,滿足分布式資料一緻性要求,并支援從單機到分布式的平滑演進,利用雲原生技術的優勢提供低成本和彈性能力,在傳遞上具備線上公有雲、線下專有雲、輕量化等全形态輸出。

架構演進理念

PolarDB-X 的誕生和發展

目前分布式領域的 3 個技術方向( Sharding 技術/ NewSQL 原生分布式技術/雲原生 DB 技術),每種分布式都有其自己的優勢和特點,PolarDB-X 的架構是站在巨人的肩膀之上,繼承了 DRDS 和 X-DB 技術的穩定性、結合 PolarDB 的雲原生技術、融入 NewSQL 對于分布式資料一緻性的能力,為使用者提供新的雲原生+分布式的産品體驗。

大家或許會有疑惑,基于雲原生共享存儲模式的分布式會有哪些不一樣的優勢,這裡也從幾個角度來分析論證一下。

  1. 存儲成本角度。雲是目前的發展趨勢,而雲的本質是虛拟化,目前基于安全容器、ECS等雲的虛拟資源部署資料庫也得到了成功的實踐證明,ECS下挂的高效雲盤預設已經做了3副本高可用,傳統資料庫三副本技術疊加虛拟化之後,會出現3*3=9份存儲副本,雖然可以通過logger節點、EC技術部分消除成本,但還是存在一定程度的放大。比較理想的做法,是基于共享存儲的理念,将三副本的技術下層到存儲層,機頭部分可以做無狀态輕量化,這是面向雲的架構理念。
  2. PolarDB全面助力分布式。 PolarDB中共享存儲的設計是PolarFs(《PolarFS-An Ultra-low Latency and Failure Resilient Distributed File System for Shared Storage Cloud Database》),相比通用的雲盤存儲,PolarFs結合資料庫的特點設計了一寫多讀、秒級備份、快速克隆、透明壓縮等能力,在低成本、高性能、彈性能力上相比于傳統的本地盤模式有更強的競争力,未來PolarDB也會陸續有更強的技術爆點。比如:PolarFs針對一個PolarDB實作多點可寫,基于資料庫中的庫、表等次元實作無資料沖突的并發多點寫,結合分布式天生的分片能力,可以做到分布式更好的彈性能力。
  • 想象一個場景A:PolarDB-X的多個分片資料都在一個共享存儲上,我們要做分片能力擴容,其實就是重新拉起一份CN或DN節點,因資料都在一份存儲之上,這樣就不需要做任何資料遷移動作,整個分片擴容可以說是秒級完成,和傳統的小時或者天級别的擴容是有質的差別,這就是真正意義上的極緻彈性能力。基于這個PolarDB-X的極緻彈性,使用者就可以做更好的業務容量規劃,比如隻需要在大促活動的前1個小時做一下彈性擴容,而不需要提前幾天做傳統意義上的資料遷移擴容。
  • 想象一個場景B:使用者剛開始使用一個PolarDB,解決存儲擴充性的問題,随着使用者單表資料的膨脹,會遇到MySQL B+Tree的大表或熱點表問題。這時候如果能對其中幾張業務大表發起一個表分裂的Online DDL,使用者可以不需要遷移資料就平滑演進到分布式PolarDB-X,基于分布式的分布式事務、分布式SQL引擎等透明分布式能力,使用者可以不用停機做到平滑演進。ps. 現實情況中使用者大部分隻是個别大表的情況,但将全部小表也進行資料分片,反而會極大影響小表的性能和增加使用者的改造成本,這也是普遍NewSQL所帶來的業務問題,因為引入全新的技術棧所帶來的生态相容的問題。基于這個PolarDB-X的平滑演進,使用者可以保留最好的單機使用體驗的同時,滿足分布式的擴充性。
PolarDB-X 的誕生和發展

阿裡巴巴下一代雲原生分布式資料庫

另外時下分布式資料庫落地過程中,最難的或許不是純自研帶來的那種掌控感,而是生态建構,正所謂得生态者得天下,PolarDB-X 在生态的建構上有兩個主要政策:

  1. 選擇高度相容主流生态,而不是另起爐竈、自我封閉。開源和标準是建立生态的方法之一,但不是唯一,是以在發展過程中 PolarDB-X 堅定自主可控、開放生态的發展思路,持續圍繞 MySQL 開源生态建構分布式能力。因分布式特性的要求,我們也會在滿足 MySQL 相容性的要求前提下,引入分布式的計算下推和優化、RPC 通路協定、Paxos 共識協定、全局一緻性事務、全局 TSO 時鐘、自研存儲引擎、資料動态擴縮容等,打造 NewSQL 原生分布式的能力。
  2. 業務多樣性支援。資料庫生态有一個很關鍵的特征是多樣性,這也是為什麼傳統資料庫領域中有 OLTP/OLAP/NoSQL 等多種分類的原因。接下來的關系資料庫的發展越來越多會看到像HTAP(Hybrid Transactional/Analytical Processing)、HSAP(Hybrid Serving/Analytical Processing) 這樣的技術,将線上事務處理和分析合二為一,将線上分析和離線計算合二為一。我們會越來越多的看到資料庫和大資料系統的結合,為客戶提供資料從生産到處理、從存儲到計算分析的資料庫整體方案。PolarDB-X 2.0 基于分布式下 MPP 的擴充性、以及結合低成本存儲和高性能列存,HTAP 能力未來也會給大家帶來不一樣的體感。

雲的未來已來,PolarDB-X 雲原生分布式我們在路上,歡迎大家加入我們,一起以必成之心,創未有之業 !