oceanbase資料庫簡介

tianxia發表於2022-12-15

本節主要介紹 oceanbase 資料庫產品及其技術特點。

 

隨著網際網路行業和大資料的興起和蓬勃發展,資料量和併發訪問量呈指數級增長,這對整個系統的架構設計和產品的能力提出了巨大的挑戰。極高的總擁有成本、捉襟見肘的可擴充套件性、薄弱的大資料處理效能等。都成為了高併發和大資料訪問需求的燃痛。同時,阿里巴巴、螞蟻的各種應用場景極其苛刻,對併發的需求全球最大,對系統的可靠性和高可用性要求也很高。需要具備單機、機架、機房、區域容災能力。共享儲存、小型機等高階硬體的早期使用,只能部分滿足我們對效能和可靠性的要求。能否結合分散式系統和傳統關聯式資料庫的優勢,既有傳統關聯式資料庫的功能優勢,又有分散式系統庫的可擴充套件性和高可靠性?在這樣的歷史背景下, oceanbase 資料庫作為一個原生分散式資料庫誕生了。 oceanbase 資料庫的設計一開始就建立在由普通伺服器組成的分散式叢集上,具有可擴充套件性、高可用性、高效能、低成本和多租戶的核心技術優勢。目前已成功服務阿里巴巴集團和螞蟻內部多個核心業務,經歷了多年電商 “雙十一”促銷活動的嚴格考驗。 oceanbase 資料庫在阿里孕育發展了 10 年,才逐漸推廣到外部市場。目前服務於金融、保險、電信等多個行業。

 

1.1 的技術架構有哪些技術特點

作為一個原生分散式資料庫, oceanbase 資料庫具有以下技術特點 :

 

oceanbase 資料庫支援線上彈性擴充套件。當叢集的儲存能力或處理能力不足時,可以隨時加入新的觀察者。系統具有自動遷移資料的能力,根據機器的處理能力,將合適的資料分割槽遷移到新加入的機器上;同樣,當系統產能充足,加工能力過剩時,也可以將機器下線,以降低成本;在類似雙 11 促銷的活動中,可以提供良好的彈性伸縮能力。

 

負載平衡能力

 

oceanbase 資料庫是一個分散式資料庫,將許多觀察者作為一個觀察者叢集來管理,為多個租戶提供資料服務。 o cea nb ase 叢集控制的所有觀測器都可以看作是一個超大的“資源蛋糕”。分配資源時,按需分配給建立租戶時申請的資源。為了保證觀察者叢集的順利執行,在引導過程中會建立一個系統租戶,分配少量資源給系統租戶,保證內部執行。

 

oceanbase 資料庫的負載均衡能力可以保證整個觀察者叢集中多個租戶申請的資源佔用相對均衡,負載均衡演算法在動態場景下 ( 例如新增或刪除觀察者、新增或刪除業務租戶、資料新增和刪除過程中分割槽資料量傾斜等 ) 仍然可以均衡現有節點上的資源。 ). oceanbase 資料庫系統中的每個分割槽都維護多個副本,其中一個副本是領導者副本,提供強一致讀取的資料服務,其他副本是備份副本 ( 跟隨者副本 ) 。領袖副本的集中和分散也對映了未來業務負載的熱度分佈。在建立表和分割槽時, oceanbase 資料庫已經考慮到了負載均衡, oceanbase 資料庫有能力將所有副本的 Leader 以相對均衡的方式分散到叢集中的所有節點。將所有領導者副本隨機分散到不同的節點可以平衡不同節點的負載。但有可能業務需求對資料業務分發的需求並不一定儘可能分散。尤其是在不同的表和分割槽相互關聯的情況下。在分散式資料庫中,跨節點的請求可能會降低效能。 oceanbase 資料庫使用一個表組來聚合多個經常一起訪問的表。比如有使用者基本資訊表 (user) 和使用者商品表 (user_item) ,這兩個表都是按照使用者號雜湊的。只要設定到同一個表組,系統後臺就會自動將同一使用者所在的 user 表分割槽和 user_item 表分割槽排程到同一個伺服器上。這樣,即使操作某個使用者的多個表,也不會發生跨機事務。 oceanbase 資料庫還支援手動設定租戶的主區域以影響領導者的副本分佈偏好,以及設定位置以控制租戶或表的副本型別以影響提供資料服務的主副本的位置。這樣在充分利用 oceanbase 資料庫負載均衡能力的同時,可以更好地適應具有一定特徵和邏輯的業務資料訪問場景,獲得更快的請求響應時間。

 

oceanbase 資料庫透過 RootService 管理節點間的負載平衡。不同型別的副本需要不同的資源。 RootService 在執行分割槽管理操作時需要考慮的因素包括 CPU 、磁碟使用量、記憶體使用量、每個觀察者上的 IOPS 使用量、避免同一個表的所有分割槽落到幾個觀察者身上等等。讓記憶體多的副本和記憶體少的副本位於同一臺機器上,讓磁碟空間多的副本和磁碟空間少的副本位於同一臺機器上。負載均衡後,所有機器佔用的各種資源最終會處於相對均衡的狀態,充分利用每臺機器的所有資源。負載平衡可以分為兩個粒度 : 機器和單元。前者負責機器之間的平衡,選擇一些單元從高負載的機器遷移到低負載的機器。後者負責兩臺機組之間的平衡,從高負荷的機組到低負荷的機組。

 

oceanbase 資料庫系統中的每個分割槽維護多個副本,一般是三個副本,部署到三個不同的資料中心 (Zone) 。整個系統可能最多有一百萬個分割槽,這些分割槽的多個副本的日誌是透過 Paxos 協議同步的。每個分割槽及其副本形成一個獨立的 Paxos 組,其中一個副本是領導者,其他副本是追隨者。每個觀察者服務的部分分割槽是領導者,部分分割槽是追隨者。當觀察者失效時,從分割槽不會受到影響,短時間內會影響到主分割槽的寫服務,直到透過 Paxos 協議選出這個分割槽的一個從分割槽作為新的主分割槽,整個過程不會超過 30s 。透過引入 Paxos 協議,可以保證強資料一致性條件下的高可用性和高效能。

 

同時, oceanbase 資料庫還支援主 / 備用資料庫架構。 oceanbase 叢集的多副本機制可以提供豐富的容災能力,在機器級、機房級、城市級故障的情況下可以自動切換,不丟失資料, RPO = 0 oceanbase 資料庫一級和二級資料庫的高可用性架構是 oceanbase 資料庫高可用性的重要補充。在主群集計劃內或計劃外不可用 ( 多數副本出現故障 ) 的情況下,備用群集可以接管服務,並提供兩種容災能力 : 無損切換 (RPO = 0) 和有損切換 (RPO > 0) ,以最大限度地減少服務停機時間。

 

oceanbase 資料庫支援建立、維護、管理和監控一個或多個備用叢集。叢集是生產庫資料的熱備份。管理員可以選擇將資源密集型報告操作分配給備用叢集,以提高系統效能和資源利用率。

 

oceanbase 資料庫採用無共享分散式架構,每個觀察者都是對等的,管理不同的資料分割槽。管理不同的資料分割槽。 oceanbase 資料庫的儲存引擎基於 LSM 樹架構,資料分為 MemTable( 也常稱為 MemStore) SSTable 兩部分。 MemTable 提供讀寫,而 SSTable 是隻讀的。使用者新插入 / 刪除 / 更新的資料先寫入 MemTable ,事務由重做日誌保證,重做日誌會透過 Paxos 協議同步三個副本。當單臺伺服器當機時,我們可以透過 Paxos 協議保證資料的完整性,透過較短的恢復時間保證資料的高可用性。當 MemTable 的大小達到某個閾值時, MemTable 被轉移到 SSTable 。查詢時, MemTable SSTable 的資料需要合併才能得到最終的查詢結果。對於 SSTable ,我們新增了多層快取來快取頻繁訪問的資料。

 

 

 

由於存在大量的靜態基線資料,因此可以方便地對其進行壓縮,降低儲存成本。寫入記憶體的增量資料不可能無止境增長。當 MemTable 的大小超過某個閾值時,需要將 MemTable 中的資料轉儲到 SSTable 中來釋放記憶體。這個過程稱為轉儲。轉儲將生成新的表。當轉儲數量超過某個閾值時,或者在每天的業務高峰期,系統會將基線表和後來轉儲的增量表合併為一個表。這個過程叫做合併。 oceanbase 資料庫的高儲存引擎在最佳化資料儲存空間的基礎上,提供高效的讀寫服務,保證事務性和資料完整性。

 

 

oceanbase 資料庫是一個支援多租戶的分散式資料庫。一個叢集支援多個業務系統,這通常被稱為多租戶。多租戶架構的優勢在於可以充分利用系統資源,讓同樣的資源服務更多的業務。將具有不同峰值和谷值的業務系統部署到一個叢集中,以最大限度地利用系統資源。在租戶的實現上,保證了租戶之間的隔離 : 在資料安全上,不允許跨租戶的資料訪問,保證使用者的資料資產沒有洩露的風險;在資源利用上,租戶“壟斷”了自己的資源配額。該租戶對應的前端應用在響應時間和 TPS/QPS 上相對穩定,不會受到其他租戶負載的影響。



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

相關文章