終於,AWS Aurora 也走向了融合架構,這一次阿里雲 PolarDB-X 確實遙遙領先

小猿姐聊技術發表於2023-12-28
作者:張雲楊

2023 年 11 月 27 日,AWS 在 re:Invent 大會上宣佈推出 Amazon Aurora Limitless Database 預覽版。根據官方部落格的說明,Aurora Limitless 允許使用者在 PB 級別的資料規模上進行數百萬次/秒的寫請求,並且保持了 Serverless 的使用體驗,幫助開發者專注於構建高擴充性的應用程式而無需維護複雜的資料庫方案。

AWS 在自研資料庫方面的投資一直備受工業界認可,從 DynamoDB 開始,到 Redshift 和 Aurora,一直穩穩壓住 MonogoDB、Snowflake、Oracle 等強大的競爭對手。然而這次釋出的 Aurora Limitless,從產品形態和技術架構上看竟然隱隱約約有種“致敬”阿里雲 PolarDB-X 的感覺,而從強調寫入效能的應用場景上來看又跟自家的 DynamoDB 有些重合,一反以往涇渭分明的風格。 PolarDB 的整個產品體系在誕生之初受到了 Aurora 非常大的啟發,但是 PolarDB-X 的出現又大大早於 Aurora Limitless,這很有趣。(難道 AWS 終於開始從中國進口資料庫人才了?)

官方介紹:PolarDB-X 是一款面向超高併發、海量儲存、複雜查詢場景設計的雲原生分散式資料庫系統。其採用 Share Nothing 與儲存計算分離架構(Share Everything),支援水平擴充套件、分散式事務、混合負載等能力,具備企業級、雲原生、高可用、高度相容 MySQL 生態等特點。

一、 技術架構

從技術架構上看,Aurora Limitless 和 PolarDB-X 非常接近。一般廠商會在 Share Everything 或 Share Nothing 兩條路中選一種,比如 TiDB、OceanBase、CockroachDB、PlanetScale 都採用了 Share Nothing 架構,而 PolarDB、Aurora 和 Neon 則採用了 Share Everything 架構。 PolarDB-X 作為一個獨立產品,它的 Share Everything + Share Nothing 融合架構是在 2019 年第一次提出的,充滿了阿里雲特色;而 Aurora Limitless 應該是全球第二個採用該融合架構的資料庫產品。雙方的架構圖,看上去只有配色的差別

AWS Aurora 架構圖

PolarDB-X 架構圖

在這個分散式架構下面: - 庫和表的路由都是由 Proxy 控制的,只不過在 Aurora Limitless 裡面叫做“事務路由”,而在 PolarDB-X 裡面叫做“計算節點”; - 每個 Shard 都是由多個 MySQL 程式構成,分佈在不同的伺服器上保證高可用; - 每個 Shard 都包含全域性表的所有資料和分片表的部分資料,分配主要看資料的分割槽鍵雜湊值; - 當某個 Shard 的資料量太大,或者訪問的熱度過高時,部分資料會被遷移到比較空閒的 Shard。

雙方都聲稱做到了無感的水平擴縮容。雖然資料遷移在支援多點掛載的共享儲存上更容易實現,但是無感一般特指在負載比較低的時候做縮容操作,在負載比較高的時候做擴容, 體驗可能更接近陣痛而不是無感。 


二、分散式事務

作為分散式系統,Aurora Limitless 的全域性時間戳是透過 EC2 TimeSync Service 獲得的,雖然協議上使用了 NTP,但是精度上更接近 Google 提出的 TrueTime 方案,把時間誤差控制在了毫秒級別。Aurora Limitless 支援全域性範圍的寫後讀、本地事務(一階段提交)和分散式事務(兩階段提交),在 RR 和 RC 兩種事務隔離級別下的體驗完全對齊 PostgreSQL 的單機事務。

PolarDB-X 的全域性時間戳採用了 Time Stamp Oracle 方案,去除了外部的 NTP 依賴,但是引入了一個 GMS 元件來提供 TSO,以保證時間戳始終單調遞增。值得一提的是,PolarDB-X 的時間戳格式是“物理時鐘+邏輯時鐘”的形式,意味著為 HLC 方案做好的切換準備。不出意料的,PolarDB-X 也有寫後讀、本地事務、分散式事務,以及 RR 和 RC 兩種事務隔離級別。

無論是 Aurora Limitless 還是 PolarDB-X,都不太推薦使用者在資料庫上面做太多分散式事務。畢竟二階段提交的限制擺在那裡,如果寫入全部是分散式的話,誰都不太可能做到幾百萬/秒的提交。

三、語法相容

將集中式資料庫改造成分散式資料庫,最大的問題就是老的使用習慣相容不了,特別是複雜查詢、儲存過程、觸發器、三方外掛。如果相容性做的不好,老的應用就沒有辦法用比較小的代價遷移到分散式資料庫上面。Aurora Limitless 目前能夠比較好地支援分片內的操作,也能在建立索引、收集統計資訊和少量聚合操作上面充分利用多個分片的計算資源,但是沒有給出完整的相容性列表,可能要到正式版出來之後才會有。

PolarDB-X 出道更早,對於不相容的使用習慣有比較明確的說明,比如識別符號限制、SQL 語法限制、資料庫物件限制:

四、使用體驗

在實際的使用體驗上,Aurora Limitless 還是比較友好的,根據 AWS 官方給出的指引文件和 re:Invent 上面的演講影片,使用者只需要兩步就能開啟“無盡”的體驗。

首先,使用者需要透過 AWS Console 或者 API 為指定的 Aurora 叢集開啟 DB Shard Group:

接著,用 PG 客戶端(比如 psql)連線 Limitless Endpoint,透過設定環境變數的方式控制表的型別,例子和 PolarDB-X 也非常像:

# Create Sharded Table
SET rds_aurora.limitless_create_table_mode='sharded';
SET rds_aurora.limitless_create_table_shard_key='{"cust_id"}';
CREATE TABLE customer (
    cust_id INT PRIMARY KEY NOT NULL,
    name ТЕХТ,
    email VARCHAR (100)
);
# Create Co-located Table
SET rds_aurora.limitless_create_table_mode='sharded';
SET rds_aurora.limitless_create_table_shard_key:='{"cust_id"}';
SET rds_aurora.limitless_create_table_collocaate_with='customer';
CREATE TABLE order (
    order_id INT NOT NULL,
    cust_id INT NOT NULL,
    amount DOUBLE NOT NULL,
    tax_rate_id DOUBLE,
    PRIMARY KEY (order_id, cust_id)
);
# Create Reference Table
SET rds_aurora.limitless_create_table_mode=='reference';
CREATE TABLE tax_rate (
    tax_rate_id INT PRIMARY KEY NOT NULL,
    city TEXT NOT NULL,
    state TEXT,
    country TEXT NOT NULL,
    tax_rate DOUBLE NOT NULL
) ;

PolarDB-X 的物件概念類似,只是操作方法上面稍有不同。使用者在建表的時候指定分割槽鍵或者表組(Table Group),具有相同鍵值的資料就會被存放在同一個 Shard 內。不過 PolarDB-X 比 Aurora Limitless 多了一個全域性二級索引,可能很快就會被“借鑑”。

五、網友評論

Hacker News 的熱心群眾對 Aurora Limitless 進行了褒貶不一的點評:有開發者認為 Limitless 是一個有野心的說法,迫不及待想要在生產環境使用;而有的開發者則認為 Limitless 只適合財富 500 企業,並不適合初創公司。關於 Citus 魔改換皮的猜測,引得 AWS 官方不得不下場解釋了一番,順便炒了一下 Aurora 論文的冷飯。

Reddit 上也有類似的討論。很多人在質疑這個是不是能 scale down 到 0,也有人會說價效比的問題以及什麼程度的資料量才值得去採用 Aurora Limitless。

怎麼說呢,連評論都有些似曾相識。雖然國內有不少人批評分散式資料庫、HTAP 資料庫的應用場景有限。但是實際上,不僅僅 AWS Aurora,還有 Oracle HeatWave 都在往這些地方擠。也許阿里雲只是比 AWS、Oracle 更早感受到了增長的壓力,不得不在技術上面做更多的投入,並且真的在部分領域實現了“遙遙領先”?從這個角度看,AWS 的產品特性會越來越像阿里雲。 我們甚至可以大膽猜測,AWS Aurora 會不會在某天也推出了 HTAP 特性,透過不同的儲存格式或者使用更多的記憶體來提升事務性引擎的分析能力。 

六、最後

Aurora Limitless 目前還在 Preview 狀態,正式開放估計要 6-12 個月。而 PolarDB-X 不僅僅提供了阿里雲託管的版本,還提供了可以執行在其它環境的開源版本。如果大家對分散式資料庫感興趣,又不想花錢在雲上試用,不妨可以看看 KubeBlocks 這個專案。

KubeBlocks 已經完成了 PolarDB-X 的相容性認證,支援一鍵拉起 PolarDB-X 叢集,歡迎大家試用並留下寶貴意見!

關於作者

張雲揚,雲猿生資料 COO & 聯合創始人,前阿里雲資料庫產品總監,阿里雲資料庫產品及運營負責人。在職期間主要負責 RDS、MongoDB、Redis、PolarDB 等產品的使用者體驗、商業化和國際化,帶領阿里雲資料庫產品第一次進入 Gartner OPDBMS 魔力象限。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70035809/viewspace-3001950/,如需轉載,請註明出處,否則將追究法律責任。

相關文章