摘要: GaussDB(for MySQL)經過ND算子下推解決存儲節點和計算節點之間的傳輸速度,減小網絡開銷這個難題。
數據庫做爲高效穩定處理海量數據交易/分析的堅強數據底座,底層架構設計的重要性不言而喻。html
以當前主流的存算分離架構爲例,如何提升存儲節點和計算節點之間的傳輸速度,減小網絡開銷很是關鍵,GaussDB(for MySQL)就是經過ND算子下推解決了這個難題。數據庫
舉個例子,當計算和存儲分離以後,數據還得從存儲節點跨網絡到計算節點,計算節點處理完以後再寫回存儲節點,來來回回好幾回,效率很低。服務器
爲了提升性能,咱們把計算節點的數據處理挪到存儲節點。好比有一萬個page,a=1的結果只有一兩個,發給存儲只要一次IO就能完成計算結果,提高總體的查詢性能。網絡
除了算子下推以外,GaussDB(for MySQL)還有許多隱藏的黑科技,本篇文章,將從存儲層面談談華爲雲自研數據庫的技術優點。架構
華爲的存儲實力不可小覷,其在數據存儲領域的佈局已達18年,存儲專利超過800件,並在中國區連續16個季度保持市場份額和發貨量第一。根據市場機構Gartner發佈的2019Q4數據顯示,華爲存儲收入全球排名第四,中國市場連續多年排名第一。在全閃存收入方面,華爲存儲增加排名第一。併發
簡而言之,在自研數據庫方面,華爲雲相較於其餘雲廠商,最大的技術優點之一即是多年研發技術積累的存儲能力。負載均衡
畢竟地基穩了,才能造出更好的房子。框架
並且華爲GaussDB數據庫全面支持包含鯤鵬和x86在內的多樣化算力,且具有從芯片到服務器、存儲、操做系統、數據庫的E2E研發能力,因此在數據庫軟硬性能調優方面也佔有得天獨厚的優點。分佈式
也正是得益於領先的存儲硬件,華爲雲自研數據庫能夠實現算子下推近計算,使得軟硬協同性能調優相比友商高出30%,這也是華爲全棧軟硬件的優點體現,對比之下,其餘雲數據庫大多選擇是非自研的存儲硬件。高併發
目前,華爲已經研發了下一代存儲軟件架構DFV(數據功能虛擬化/Data Function Virtualisation)。該DFV架構於2018年部署在華爲公有云中,開始提供對象服務,以後自研的數據庫產品GaussDB系列也用上了DFV存儲架構。
DFV的性能亮點不少,好比單個資源池中具有數千個節點,提供EB級別的容量,一個bucket能夠保存100億個對象等等;同時,它能夠部署在公有云和私有云上,提供雲上雲下的統一體驗,爲GaussDB帶來了不少存儲上的優點。
在進入正題以前,先看看GaussDB(for MySQL)架構設計原則:
1.採用華爲下一代雲存儲(DFV)做爲快速,可擴展,可靠和共享數據庫存儲,不復制存儲層中的已有功能,例如數據複製,跨AZ可靠性,數據清理。
2.單個數據庫集羣只須要一份足夠可靠的數據庫副本集。全部只讀副本共享存儲在雲存儲中,甚至跨AZ,數據庫中沒有邏輯複製。一寫多讀,沒有獨立的備用實例。主節點發生故障轉移時,只讀副本能夠切換到接管主服務器。
3.只有數據庫日誌是經過網絡從數據庫計算機節點寫入 DFV 存儲層,基於DFV存儲層內的數據庫日誌重建數據面,以免繁重的網絡流量。
4.基於跨DFV存儲節點的切片策略對數據庫進行分區,以支持大型數據庫卷。單個 DFV 存儲節點管理來自不一樣數據庫集羣實例的多個分片,實現存儲容量和處理能力的無限擴展。
如圖所示,GaussDB(for MySQL)自上向下分爲3大部分:SQL節點、存儲抽象層SAL(Storage Abstract Layer)以及存儲層(storage Nodes)。
首先,SQL節點造成一個集羣,包括一個主節點和多個只讀副本(RO最多15個)。每一個集羣屬於一個雲租戶,一個租戶能夠具備多個集羣。SQL節點管理客戶端鏈接,解析SQL請求,生成查詢執行計劃,執行查詢以及管理事務隔離。
其次是 SAL(存儲抽象層),它是SQL節點和存儲層之間的橋接器。以下圖所示,SAL包括兩個主要組件,SAL SQL模塊和DFV存儲節點內部的Slice存儲。
SAL SQL模塊爲SQL節點(主/只讀副本)提供了SAL API,用以與底層存儲系統進行交互。 SAL SQL模塊包含通用日誌處理器CLP(Common Log Processor)、數據庫分片管理器SM(Slice Manager)、頁面讀取器PR(Page Reader)以及與只讀副本節點同步信息的工具程序。
其中,CLP負責將數據庫全局重作日誌持久到DFV,解析日誌並將其分發到相應的DFV分片,並生成同步消息(髒頁、活動事務列表、分片持久LSN等)以供只讀副本獲取。CLP還須要處理數據庫崩潰恢復,從新加載已提交的全局重作日誌,並將其從新分配給全部相應的分片。
SM維護分片策略以及頁面映射信息,肯定什麼時候添加更多的分片以及哪些數據庫頁面應分配給哪一個DFV切片等。
頁面讀取器負責經過查找頁面映射信息,將特定的頁面讀取請求路由到相應的切片管理器。
另外,SAL SQL模塊還爲SQL節點與存儲系統交互提供了其餘一些接口,包括按期將日誌清除信息(RecycleLSN)傳遞到數據庫片等。
Slice Store是在DFV存儲節點內部運行的插件模塊,它須要與DFV存儲框架一塊兒使用,用以在相同DFV節點上管理多個數據庫片,支持多租戶資源共享,並將頁面的多個版本提供給SQL節點。
對於每一個分片,Slice Store使用日誌目錄做爲中心組件來管理重作日誌和頁面數據。Slice Store的主要職責是:
1)、接收分片重作日誌,將其持久化並註冊到日誌目錄中;
2)、接收頁面閱讀請求並構建特定版本的頁面;
3)、垃圾回收和合並日志。
最後,GaussDB(for MySQL)存儲層創建在華爲雲存儲DFV持久層之上,DFV持久層爲上層SQL節點存儲提供讀寫接口,提供跨地域3AZs之間的數據強一致性和可靠性保證。
GaussDB(for MySQL)使用兩種模式實現write-optimized以及read-optimized,分別是Plog模式與iShard模式。Plog模式提供強一致性保證,而iShard模式實現最終的一致性。
其中,SQL節點使用Plog模式存儲整個數據庫的WAL重作日誌,使用iShard模式對數據在多個存儲節點之間進行分片和管理。Plog以SSD友好的追加寫方式使事務提交更快。
iShard將redo以頁面爲單位進行聚合,管理數據分片,實現快速數據讀取,並支持超大型數據庫(128 TB)。存儲層支持多個GaussDB(for MySQL)集羣實例,單個存儲節點支持多租戶數據庫分片。部署靈活,能夠將Plog和iShard部署在單獨的存儲池中或共享同一存儲池。
在這種體系架構下,整個數據庫集羣只需一份足夠可靠的數據庫副本集,極大節約成本。同時,全部只讀副本共享雲存儲中的數據,去除數據庫層的複製邏輯。一寫多讀,沒有獨立的備用實例,當主節點發生故障,集羣進行切換操做時,只讀副本能夠切換爲主節點,接管集羣服務。
並且因爲只有數據庫日誌經過網絡從數據庫計算節點寫入 DFV 存儲層,沒有髒頁、邏輯日誌和雙寫的流量,節省了網絡資源。
GaussDB(for MySQL)採用的新一代分佈式存儲系統DFV,節省了資源,極大提高了數據備份、恢復性能。
它將特定計算任務(備份與恢復邏輯)下推到DFV,以便更高效,快速地實現備份、恢復,而上層計算節點專一於業務邏輯處理。在這種模式之下,客戶能夠經過本地訪問數據並直接與第三方存儲系統交互,達到高併發、高性能。
另外,GaussDB(for MySQL)的共享存儲架構將數據持久化放入新一代存儲DFV中,充分保障數據強一致性和0丟失;針對硬件定製上層系統,利用RDMA 網絡、NVME SSD等硬件優點,在這些關鍵技術上整合創新,使得華爲雲自研數據庫的性能有了質的飛躍。
華爲雲在今年的全聯接大會也正式發佈了GaussDB(for MySQL)的分佈式版,採用share nothing架構,融合華爲自研分佈式SQL引擎和企業級分佈式存儲DFV雙重優點,業務請求經過負載均衡層轉發到分佈式SQL引擎層,分佈式SQL引擎相關的模塊對SQL進行解析、分解、路由到各個分片,最後各個分片返回相應結果匯聚返回給用戶端。
經過分庫分表,GaussDB(for MySQL)分佈式版最高支持PB級海量存儲,同時經過內部環境測試,純寫TPS可達百萬級,QPS可達千萬級,總體性能可隨分片數的擴展而成線性提高,可知足幾乎全部大型企業集團的核心數據庫的要求。
目前,華爲雲GaussDB已在500+大客戶中規模商用,遍及金融、政府、電信、能源、交通、物流、電商等行業。在新基建大潮下,華爲雲數據庫會繼續以開源開放的姿態,賦能企業,推進國內的數據庫生態發展。