612
京東網上商城
POLARDB雲數據庫分布式存儲引擎揭秘
2017雲棲大會POLARDB專場,阿裏雲資深技術專家曹偉帶來POLARDB雲數據庫分布式存儲引擎揭秘的演講。本文主要從計算和存儲分離的優勢談起,然後說明控製平麵與數據平麵分離,接著分享了劃時代的技術,包括零拷貝、並行副本等,最後解釋了麵向數據庫優化的智能存儲。
以下是精彩內容整理:
計算和存儲分離的優勢
如何把過去MySQL從單機磁盤數據庫,演進成基於共享存儲、集成數據庫的核心組建Polar store。我們把三副本分布式的存儲係統,做得延遲和本地SSD磁盤一樣快,這就是核心的武器。那麼,我們怎麼做一個又快又穩定的分布式存儲係統。
為什麼做POLARDB時會選擇把MySQL本地SSD單機數據庫改造成一個基於共享存儲集成數據庫,在做了七年RDS之後選擇做這件事。怎麼去做一個高性能的分布式存儲係統,同時讓它穩定,我們為什麼不用已有分布式存儲係統,因為我們要在穩定係統和存儲係統當中加入對數據庫的理解優化,讓它成為一個為數據庫定製和優化的智能存儲。
我們過去單機做數據庫有一個很頭疼的問題,怎麼先做容量的預測,每台機器SSD容量的預測和遷移。在“雙11”之前,我們一般會把核心用戶的機器、數據庫打散操作,把每個用戶買每台數據庫容量降低到60%以下,我們很擔心“雙11”那天大量數據進來,把機器塞滿之後弄不出去。我需要預留40%-50%的SSD容量在那兒放著,存不了數據,就是為了避免突然的流量高峰把機器用滿了,然後就要開始做遷移。
存儲池化
在存儲池化之後,我能用好每一塊盤,為什麼呢?因為今天的池子不再是單機十幾T、幾T,擁有的是幾PB的大池子。在大池子當中加機器就OK了,整個大池子可以保持85%,90%左右。把存儲池化之後,我們有一個大盤子了,就能把資源用得更好,TCO會下降。
計算存儲硬件分離優化
過去做數據庫的時候,每年很頭疼的一件事情是定義明年新機型是什麼,內存和存儲的平易怎麼控製,權衡之間的比例一直是很頭疼的事情。
當我把計算的機型、數據庫機型和存儲機型分離之後,就能很好的進行優化。數據庫的機型不需要再帶SSD,存儲機型不需要很好的CPU,也不需要很大的內存,但會有很多盤,單機存儲力度可以很高。
數據庫快速遷移能力
沒有不壞的硬件,包括供電、機器、風扇、溫度,硬件壞了之後,我們怎麼把恢複時間指標往下降,保證用戶可用時間往上走。在機器壞了的時候怎麼能快速恢複,把數據庫弄到一個好的機器上去跑,這個能力很重要,RDS的SLA是99.95%,這個時間很難保證。今天一份存儲的成本給多個數據庫節點也是我們獲得的關鍵能力。
軟件定義存儲能力更強
為什麼過去不這麼做呢?過去分布式存儲太慢,分布式存儲都還停留在HTD的延時,你得到的延遲是幾個毫秒,我們接受不了。因為數據庫是非常敏感的。軟件定義存儲和普通機器上硬件SSD相比擁有更強的能力,比如單個盤可以任意擴容,可以從10TB擴容到100TB,100TB對於本級SSD來說很難達到,因為SSD的製造工藝也有瓶頸,能夠放下的顆粒也是有限的,隨機而來的單機SSD密度是有限的。
還有數據快照技術,我們在存儲引入了分布式數據庫快照技術做數據庫的備份,完美解決了數據庫備份。我可以在5分鍾之內對100T數據庫完成備份,還可以一個備份在5分鍾之內掛載上去,成為一個新的實例,這些技術用傳統的單機數據庫是無法解決的。我們今天存儲層做了一個Thin-provisioning技術,按需分配,擁有它後,有可能就可以按你使用的存儲資源付錢了。
控製平麵與數據平麵分離
這樣一個強大的分布式存儲係統是怎麼構建的呢?我們借鑒了SDN的經驗,用控製平麵與數據平麵分離的思想在設計係統。簡單來說,存儲所有的複雜邏輯,比如故障怎麼處理,副本策略如何,全都會在微服務實現的控製集群當中,數據平麵非常高效的實現。
劃時代技術,超高性能、超低延遲
我們一些核心技術點如圖,首先直接操作裸的RDMA網卡,自己實現一套完整網絡協議棧和OR協議棧。零拷貝技術RDMA&SPDK、用戶態文件係統和並行同步技術,我們緊貼著RDMA,在RDMA網絡棧基礎上實現了ParallelRaft。
我們是真正的零拷貝,別人的不是零拷貝。當RDMA網卡收到請求之後,會直接把請求操作寫到物理機內存地址上去,直接用了很大的區域做這件事。網卡一旦寫入內存之後,這個內存就一直使用下去,永遠不拷貝,這就是零拷貝。啟動係統時會把物理內存注冊到網卡當中去,網卡會直接操作物理內存到CPU說知道有這個物理內存到了之後,我們就一直拿物理內存用DMA發給磁盤,用RDMA再發給遠程網卡一直使用下去,再也沒有拷貝過了。這件事情如果不是自己寫RO協議棧或者網絡協議棧不可能辦到。
POLARDB當中使用的文件係統是PolarFS文件係統。這個文件係統是一個libpfs形式直接嵌入到數據庫當中,數據庫拿著lib操作後麵的存儲。也會在文件係統內部維護,讓整個硬件在最合理的模式下工作,這是我們的設計思想。
ParallelRaft並行副本技術是傳統的複製協議。我們的思路就是亂序帶來並發,亂序帶來極高的性能,亂序做正確就是我們的挑戰,提出了一套專業的ParallelRaft技術解決這個問題。
麵向數據庫優化的智能存儲
麵向數據庫優化的智能存儲,包括防止DB腦裂寫壞數據、Group Commit批量I/O寫入優化、保證Page原子寫入,避免doubleWrite開銷、RedoLog高優先級寫入。數據庫的配置是大於10k的,一個16kb的頁麵如果出現部分顯示成功,部分顯示失敗,就會出現數據損壞。
MySQL當中怎麼做呢,它是用了DoubleWrite的方法做,先寫到一個正確的地方,然後再放回來。相當於I/O帶寬高了2倍,我們支持Page原子寫入。腦裂問題,假如兩個節點,一個在杭州,一個在上海。杭州和上海之間網絡斷開之後,兩個節點都認為自己是主節點,一般做法是一主一備,兩個節點都會寫壞數據。我們通常做法是一定要寫進去合並,再恢複到單機狀態。我們在Polar store當中對數據庫做了寫保護,防止DB寫入時腦裂,假如出現腦裂,存儲借助三副本技術,可以隨時授權進行仲裁,隻保證一個人寫的。
最後更新:2017-10-27 20:03:38