天天看點

建構雲上企業資料庫架構分為哪五步?異地多活DB容器化彈性混合雲計算存儲分離DB與離線混部

阿裡巴巴進階資料庫架構師黃歡歡在2017雲栖大會蘇州峰會上與大家分享了雲上企業資料庫架構之路。主要分享了建構企業級資料庫架構包括異地多活、資料庫容器化、混合雲架構、計算存儲分離和資料庫與離線混布,其中包含X-DB、HDM等重要雲産品。

以下是精彩視訊内容整理:

做資料庫架構需要滿足三個基本需求。第一個問題是擴充,業務高速發展,單地資源容量受限;第二個問題是彈性,雙十一對彈性擴充和收縮的需求;第三個問題是成本,在盡可能小的預算成本内完成業務目标。

為了滿足這三個需求,阿裡巴巴在資料庫架構上做了很多探索和改進,包括異地多活更新、資料庫容器化、混合雲架構、計算存儲分離和資料庫與離線混布。

建構雲上企業資料庫架構分為哪五步?異地多活DB容器化彈性混合雲計算存儲分離DB與離線混部

從資料庫的角度看異地多活,從設計原則上要遵循兩個規則。第一,資料要從一個角度進行拆分,保證資料不會被雙寫;第二,單元内實作業務封閉,比如下單過程中要登入、扣庫存、扣優惠,登入在一個單元裡,扣庫存跳到另外一個單元,這就會導緻混亂。是以,資料庫的設計比較簡單:每個Region獨立的DRDS叢集,Region之間DTS資料實時傳輸。

多活的基礎:DTS

建構雲上企業資料庫架構分為哪五步?異地多活DB容器化彈性混合雲計算存儲分離DB與離線混部

DTS可以打通各種異構資料源間的資料流動,讓資料發揮更大的業務價值,它源自阿裡去IOE及異地多活架構的實踐。典型的業務場景比如異地多活,單元間的資料同步可以通過DTS實時同步/分發,延遲都在秒級别内;另外,異構資料源之間的遷移同樣可以通過DTS進行實作。

X-DB多region部署

不是所有資料都能在各個Region中寫入,比如庫存資料一般隻在單點寫、多點讀,在這種業務場景下,如果使用原來的業務架構,當一個中心挂掉實作異地容災時,由于單元之間的資料是異步同步的,切過來後可能出現資料不是強一緻。對此,我們提供了第二代分布式關系型資料庫X-DB。

建構雲上企業資料庫架構分為哪五步?異地多活DB容器化彈性混合雲計算存儲分離DB與離線混部

庫存業務通過X-DB多Region部署如圖,主備5節點保證主節點每一個寫日志一定需要同步超過3個以上的備節點才能夠傳回業務成功。是以,X-DB的優點包括以下四個方面:

Region級的強一緻性,做到單個Region不可用0資料丢失;

高性能。跨Region強同步下依然保持高性能;

靈活的切換政策。優先切換同Region,定制跨Region切換順序;

高伸縮性。可無限制的擴充Region/AZ的節點,可自由的調節Region/AZ内節點。

異地多活更新後,下一步開始嘗試做資料庫容器化。

建構雲上企業資料庫架構分為哪五步?異地多活DB容器化彈性混合雲計算存儲分離DB與離線混部

一方面,我們做了AliSQL in Docker,通過統一的一層排程支援資料庫二層排程,比如主備容器規格一樣。AliSQL in Docker支援資料庫業務邏輯的排程政策,建構了完善的資源隔離方案,已經做到了100%容器化;

另一方面,我們做了AliSQL in 高性能ECS,使用了SPDK+NVMe存儲和DPDK網絡,整體上測試得出,與同等規格實體機相比,虛拟化帶來的損耗降到了最低,性能降低5%以下。

資料庫容器化是資料庫建構起可擴充架構的基礎部分,隻有做完容器化,才可能實作架構的進一步演進。

在日常的流量下,使用者可以跑在自建IDC下,大促期間使用彈性混合雲架構,大促前将資料庫彈性擴充上去,大促結束後将申請的ECS資源返還回去,擴上去和彈下來可以在一個月内完成。為什麼我們有這麼快的彈性伸縮能力?這依賴于新的雲産品混合雲資料庫管理平台。

建構雲上企業資料庫架構分為哪五步?異地多活DB容器化彈性混合雲計算存儲分離DB與離線混部

我們可以做到一鍵建構新的資料庫雲單元,混合雲資料庫管理主要提供三大塊内容:

統一管理:HDM可以進行雲上雲下資料庫統一管理;

快速彈性:比如原來資料庫在雲下,大促時在雲上加隻讀節點, 大促結束後再銷毀隻讀節點。也可以在雲上快速建立起大規格資源,支撐完業務後再彈下來,最大限度享受雲資源的彈性能力;

容災切換:自建IDC出現問題時,HDM提供了資料庫容災切換能力,包括雲上切換雲下,或雲下切換雲上。

完成異地多活架構、資料庫容器化和混合雲架構後,我們仍然與應用不一樣,應用容器化後可以快速排程,但資料庫還不行,為什麼?因為應用是無狀态的,而資料庫是有狀态的,資料庫下面拖有資料,如果有持久化資料,就沒辦法與應用一樣做到彈性能力,是以,我們隻有進行計算存儲分離。

那麼,為什麼要做計算存儲分離?原因有以下四點:

第一, 要做更好的彈性能力就要把DB去狀态化,将計算節點和存儲分開,使排程變得更簡單;

第二, 解除計算和存儲Bond,如果計算節點需要擴2倍、存儲節點需要擴4倍,分别對計算和存儲進行擴容。另外,将資料放在統一的存儲裡,磁盤碎片會大大減少;

第三, 計算節點不再需要備援,節省了成本;

第四, 為資料庫線上和離線任務的混部提供了基礎。

建構雲上企業資料庫架構分為哪五步?異地多活DB容器化彈性混合雲計算存儲分離DB與離線混部

資料庫計算存儲分離架構如圖,AliSQL為計算層,計算層與存儲層之間使用25G TCP/RDMA網絡,存儲層按照一定的規則和資料可靠性要求将資料打散在不同的Rack和叢集中。

做計算和存儲分離面臨的技術挑戰很大,對吞吐和時延的要求非常高。我們需要在各個次元做很多優化,包括:

分布式存儲優化:長尾時延優化,寫三反二;Partial recovery,降低對線上業務的影響。

資料庫優化:AliSQL 吞吐優化,提升100%;原子寫優化,關閉double write buffer,提高吞吐;時延接近本地盤。

軟硬體優化:引入RDMA網絡協定,SPDK使用者态檔案系統等。

為了進一步減少成本,我們将資料庫與離線任務混部在一起。

建構雲上企業資料庫架構分為哪五步?異地多活DB容器化彈性混合雲計算存儲分離DB與離線混部

實作計算存儲分離後,離線上混部即成為可能,大促時可以借助離線機器計算資源,存儲資源仍舊放在分布式存儲中。可以看到,在大促時,将資料庫計算節點彈到離線機器上去,與離線任務一起跑;在日常運作時,離線和線上任務排程到DB節點,提高資源使用率。那麼,如何保障資源隔離呢?我們做了CPU獨立socket,避免L3 cache幹擾,同時進行了NetQos打标,保證優先級。此外,我們也在離線上混部時建構了彈性能力,使計算節點快上快下,MySQL BP和容器規格動态擴縮容。

通過異地多活、X-DB、容器化、混合雲、計算存儲分離以及DB離線混部共同建構了企業級資料庫架構。

以上由雲栖社群志願者小組整理,毛鶴校審,編輯:郭雪梅