百度雲原生資料庫GaiaDB的HTAP與多地多活技術實踐

来源:https://www.cnblogs.com/ninedata/archive/2023/05/25/17430316.html
-Advertisement-
Play Games

雲原生資料庫在使用存算分離技術後,可以在完全相容MYSQL協議和語法的情況下,極大提升單實例所能承載的數據規模與吞吐能力上限。但除了對客戶端相容外,對整個數據生態(地域容災,數據分析,備份恢復)的適配同樣需要大量的設計優化工作。本次分享GaiaDB在跨地域/異構數據同步場景下,吞吐/實時性/一致性方... ...


摘要:雲原生資料庫在使用存算分離技術後,可以在完全相容MYSQL協議和語法的情況下,極大提升單實例所能承載的數據規模與吞吐能力上限。但除了對客戶端相容外,對整個數據生態(地域容災,數據分析,備份恢復)的適配同樣需要大量的設計優化工作。本次分享GaiaDB在跨地域/異構數據同步場景下,吞吐/實時性/一致性方面能力打造與實踐經驗。

在2023雲資料庫技術沙龍 “MySQL x ClickHouse” 專場上,百度資料庫資深技術專家邱學達,為大家分享一下《百度雲原生資料庫GaiaDB的HTAP與多地多活技術實踐》的一些技術內容。

 

邱學達,百度資料庫資深技術專家,主要負責分散式架構設計與資料庫內核特性設計和開發。多年資料庫與分散式存儲開發經驗,專註於分散式高可用+高可靠架構設計與雲原生化改造。在分散式性能優化、端到端可用性提升方面具有豐富經驗

本文內容根據演講錄音以及PPT整理而成。

大家好,今天我想和大家分享的內容是百度雲原生資料庫GaiaDB在數據分析場景與多地多活方面的一些實踐經驗。

 

GaiaDB是百度智能雲研發的一款雲原生資料庫,目前已經在雲上獲得了廣泛的應用,承載了多個高吞吐/超大容量業務,特別是幫助很多業務在0改造成本下,實現了服務多地域多活,在每個地域都可以實現接近本地的低延遲讀取能力。在大數據量承載方面,多個線上百TB以上業務實踐證明,GaiaDB在這種規模下依然具備良好的吞吐與彈性能力。

 

下麵我來介紹一下GaiaDB的整體架構。

首先是接入層 ,接入層主要用來提供自動讀寫分離/流量控制/SQL防火牆/鑒權與負載均衡等功能,業務無需維護複雜的讀寫分離/連接池邏輯,直接使用proxy即可享受豐富的接入管理功能。對於有讀寫一致性要求的業務,還可以選擇使用主從一致性或全局強一致等多種一致性級別,解決傳統架構寫後讀不可見導致的多種複雜相容問題。

再往下是計算層,計算層依然是多個計算節點互相負載均衡的架構。對於讀場景已經實現了無狀態的橫向與縱向彈性伸縮,可以實現秒級擴縮容,方便應對線上各種活動流量與突發尖峰。對於寫場景,預設仍提供基於縱向擴展的彈性伸縮能力,可以滿足線上大部分業務的寫吞吐需求。

對於寫能力的橫向擴展,我們也做了大量的技術儲備,寫的擴展能力主要取決於請求的衝突情況;在完全無衝突的負載下,樂觀事務可以提供近似線性的寫擴展能力,但是大部分的交易類負載都是存在衝突的,在這種情況下樂觀事務模型的使用體驗就會變得不易接受;對於目前主流的悲觀事務模型來講,解決衝突主要使用鎖機制實現,橫向寫擴展引入的跨節點鎖協商會帶來較高的事務延遲與吞吐瓶頸,目前在工程上還是非常具有挑戰性的。當前對於寫的橫向擴展我們更多的是結合業務特點進行專屬方案定製,實現業務上的整體最優解。

接下來是存儲層的架構設計,對於分散式存儲系統來講,核心就是數據分區演算法與數據引擎設計。數據分區演算法的核心在於如何在儘量降低映射獲取時延的同時,將記憶體消耗控制在可接受的範圍內,同時又儘量避免數據的大規模搬運。對於實時性要求越高的系統,分區演算法的設計應該層級越少、規則越簡單,避免引入過多的切換消耗。而數據引擎的設計優化方向則集中在Base數據的讀取優化以及增量數據(WAL)的可靠性/一致性保證上。

GaiaDB的存儲引擎在設計上將Base數據與增量更新分離到了兩個子系統中,即存儲子系統和日誌子系統,避免了日誌流與數據流的IO爭搶導致各類性能問題,存儲子系統可以向極致讀性能方向優化,將讀IO優先順序設為最高,寫則可以使用非同步落盤+記憶體動態回放技術降低對磁碟占用;日誌子系統向極致寫性能方向優化,使用視窗技術+增量引擎,將寫能力優化至極致水平,讀使用熱數據緩存技術提升性能。通過將讀寫數據流解耦分別優化,實現了資源的最大化利用。

在整體架構設計上,GaiaDB對於系統數據一致性與可靠性方面做了重點加強。Mysql的主從切換一直是一個比較複雜的課題,在硬體掉電/網路不可達等場景下,保證數據的嚴格一致較為困難。GaiaDB將原生數據可靠能力(RPO=0)固化到系統的基礎設計之中,通過將一致性協議中的任期機制融入到整個數據鏈路中,新的寫入任期開啟後,任何過時寫入都會被排除在數據流之外,確保即使發生了假死等情況,數據的完整性也完全不會受到影響。

 

接下來想和大家分享一下 GaiaDB 在配合業務的分析需求、讓業務可以更高效流暢實現數據分析的一些實踐經驗。

很多業務在使用GaiaDB滿足交易類和輕度分析類需求的同時,還會使用Doris解決分析型場景下的需求,Doris是由百度自研並捐贈至Apache軟體基金會的開源MPP資料庫,在行業內獲得了廣泛的應用,對於不同種類的數據分析讀取需求,我們積累了一些成本與效率最優的解決方案,下麵我來結合具體的案例進行分析。

如圖是一個典型的泛互聯網產品架構:最前端是網路接入層,用於承接APP/Web發來的業務請求、聚合和分發不同子系統之間流量;後面有多個業務子系統,例如商品、訂單、活動、推送等。這些用戶業務系統更關註的是數據的高併發+低延遲訪問,對數據的一致性和事務隔離性也有較高的要求,同時由於線上活動或者節假日流量高峰,對彈性和擴展性也有迫切需求,GaiaDB可以很好滿足這類業務的需求。

與用戶業務系統使用同一份數據的部門往往還有另外兩類,一類是後臺服務,也就是對內的客服系統/運營維護系統/供應鏈業務系統等。這些系統的特點是:由於只有公司內部人員使用,QPS和併發不高,但負載複雜而且迭代要求高。比如運營部門經常需要進行新活動設計與配置,客服/MIS系統則需要配合線上活動情況增加各種查詢功能。因此,對於後臺類業務來講,能用SQL和事務快速完成複雜可靠的功能開發是剛性需求,所以SQL的功能豐富度與相容性顯得尤為重要,同時SQL的並行能力與計算下推對於這類場景的體驗優化具有重要作用。

第二類則是專業的數據分析團隊,數據分析團隊往往承擔了多維度、高複雜度的數據分析需求,所以通常使用專業的數據分析一攬子方案,這種場景下數據請求不會直接發往線上資料庫,而是需要儘量實時的從線上庫導入至分析庫,因此快速、簡單、可靠的數據導入導出能力成為首要關註點。

 

所以針對異構分析的需求,100%生態相容的導入導出功能是首要+必備選項,特別是分析型解決方案的數據同步組件都是通用而非業務自研組件,上雲用雲過程中修改這部分基礎設施難度是非常高的。因此GaiaDB在這方面做了很多增強工作,比如基於日誌流的高可靠強一致能力原生實現了RPO=0級別的Binlog流支持能力,同時對於通用的DTS產品和社區導入導出工具,也是保證了完全相容和歷史經驗復用,不增加額外的學習成本。

而對於輕度的離線分析需求,這部分的特點是需求多變、對成本敏感、與線上服務有隔離訴求。GaiaDB使用多入口技術支持業務在離線請求完全隔離,對於離線類請求使用單獨計算資源,不會對線上造成影響,同時充分利用存儲層分散式MVCC能力,不增加額外的存儲成本和數據一致性維護開銷,隨著離線負載的變化,對應計算資源還可以動態伸縮以進一步增強成本節省能力。對於支持數據分區的業務來講,GaiaDB同樣相容了該功能,數據分區可以有效降低資源爭搶密度,提升並行讀取能力,對於並行分析具備很好的提速作用。

 

還有一類對數據一致性要求更高的業務,如金融類產品,期望拿到精確到秒級的全局一致數據用於分析,不但從空間維度要求數據一致,從時間維度上也期望在分析的過程中數據可以保證前後一致,這種場景下GaiaDB只讀鏡像庫的能力就得以體現,在資源空閑的低峰時段創建鏡像庫同時啟動分析任務,有效利用低峰時段空閑算力。由於只讀鏡像無需處理寫負載,所以寫相關的日誌子系統可以裁剪以節省成本,同時也解耦了對高性能介質的依賴。只需要計算節點+冷存儲介質,結合查詢並行化技術充分利用分散式IO吞吐能力,即可實現超低成本離線分析解決方案。同時全量鏡像也確保了數據嚴格一致,避免了增量同步可能導致的DDL處理、數據校驗等複雜問題,有效保證了數據的可用性與可靠性。

 

近幾年隨著業務精細化程度的提升和基礎設施規模故障風險的存在,越來越多的業務將多活能力納入了架構設計考慮的範疇,業務既希望可以獲得高可用性,還想讓成本控制在比較低的程度,同時還不希望由業務實現多份數據的同步與維護,這樣就對資料庫這類基礎設施的多地多活能力提出了很高的要求,GaiaDB的高對稱架構天然適合多地多活方式部署,所有存儲副本邏輯上完全對稱,每個副本都具備動態回放任意版本數據能力,這樣就為數據就近訪問打下了堅實的基礎:業務請求可以自動路由到同機房計算節點,計算節點請求同機房存儲副本即可讀取實時數據,避免了主從架構副本導致的多次跨機房訪問問題。

同時全對稱架構還可以避免故障場景下批量選主帶來的服務中斷與請求風暴問題,任意副本故障不會影響其他副本工作,可用性更高、延遲更平穩。對於寫鏈路則使用並行寫入技術加速,最快的多數派返回即可實現寫入成功。綜上,GaiaDB的同城多活架構在讀寫鏈路上都可以避免單個慢節點/機房導致的性能抖動問題,使整體性能損耗控制在很小的範圍內。

 

此外GaiaDB也支持跨地域熱活實例組,將災備能力提升到了地域級,業務在地域間部署無需適配改造,即可實現就近讀取低延遲能力和寫請求自動轉發能力,無需維護複雜讀寫入口,提供了與單地域實例一致的使用體驗,幫助大量業務實現了跨地域災備能力。

 

以上就是我今天想和大家分享的內容,GaiaDB在架構設計上核心關註數據的高可靠與高可用性,重點打造了數據的極致可靠保障能力、跨地域多活能力與災備恢復能力,同時在使用體驗上註重簡單可靠,實現了對生態和使用經驗的完全相容,將用戶上雲門檻降至最低,讓所有上雲用雲業務都可以享受到基礎設施架構提升帶來的效能提升,謝謝大家。

本次大會圍繞“技術進化,讓數據更智能”為主題,匯聚位元組跳動、阿裡雲、玖章算術、華為雲、騰訊雲、百度的6位資料庫領域專家,深入 MySQL x ClickHouse 的實踐經驗和技術趨勢,結合企業級的真實場景落地案例,與廣大技術愛好者一起交流分享。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 哈嘍大家好,我是鹹魚 鹹魚在《[一文帶你瞭解容器技術的前世今生](https://mp.weixin.qq.com/s?__biz=MzkzNzI1MzE2Mw==&mid=2247484578&idx=1&sn=a8ae0d1c470351a8bbcb6891bae0ca23&chksm=c293 ...
  • > 本文首發於公眾號:Hunter後端 > 原文鏈接:[es筆記七之聚合操作之桶聚合和矩陣聚合](https://mp.weixin.qq.com/s/SFiLEtnUqxncL-ZQj1zqgg) 桶(bucket)聚合併不像指標(metric)聚合一樣在欄位上計算,而是會創建數據的桶,我們可以理 ...
  • ### 一、前言 最近由於工作需要,需要用到kettle工具進行數據遷移轉換。特意找資料學習了一下,kettle基本操作算是學會了。 所學的也結合實際工作進行了驗證。為了防止以後用到忘記了,便寫了幾篇文章記錄一下。 ![快速上手kettle](https://img2023.cnblogs.com/ ...
  • 在Elasticsearch這樣的分散式系統中執行類似SQL的join連接是代價是比較大的,然而,Elasticsearch卻給我們提供了基於水平擴展的兩種連接形式 ...
  • 中國是全球植物多樣性最豐富的國家之一,全球36個熱點地區主要或部分在我國境內的有四個。在一窮二白的基礎上,經全國312位作者和164位繪圖人員45年的努力,《中國植物志》自1959年開始出版,在2004年全部完成,記載了301科3408屬31142種植物的科學名稱、形態特征、生態環境、地理分佈、經濟 ...
  • ## 一、分頁查詢 ❓ 需求描述:客戶端查詢資料庫數據並顯示在表格中。在資料庫中進行一次查詢,查詢結果有1050條記錄,但表格row上限: 100,這時需要給本次查詢記錄分配 `?` 頁用來顯示? 可以通過固定公式進行計算(c偽代碼): ```c # define TABLE_SHOW_ROW 10 ...
  • DML操作: Data Manipulation Language,數據操縱語言;包含insert、update、delete操作; 1、單行插入數據格式: insert into 表名【欄位列表】 values(值列表); 向教師表插入: insert into teacher values('0 ...
  • 在引入ClickHouse過程中經歷各種困難,耗費大量精力去探索並一一解決,在這裡記錄一下希望能夠給沒有接觸過ClickHouse的同學提供一些方向上的指引避免多走彎路,如果文中有錯誤也希望多包含給出指點,歡迎大家一起討論ClickHouse相關的話題。本文偏長但全是乾貨,請預留40~60分鐘進行閱... ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...