技術解讀資料庫如何實現“多租戶”?

华为云开发者联盟發表於2024-06-20

本文分享自華為雲社群《【GaussTech速遞】技術解讀之GaussDB多租技術》,作者:GaussDB資料庫。

資料庫多租技術介紹

隨著雲端計算時代的到來,多租戶的概念也逐漸廣為人知。“多租戶”使得租戶之間可以共享物理資源,能夠幫助使用者節約硬體成本和運維成本,提高資源利用效率。同時,在實現的過程中,考慮到共享帶來的安全、隔離等問題以及後續業務面臨的擴充套件需求,“多租戶”在隔離性和擴充套件性方面也進行了相應的設計實現。

那麼,在資料庫領域是如何實現“多租戶”呢?

業界有虛擬機器多租、容器多租、資料庫核心多租等多種技術可以實現多租戶。

虛擬機器多租和容器多租,顧名思義就是在一臺物理伺服器上部署多個虛擬機器或者容器,然後在虛擬機器或者容器內進行資料庫服務的部署。這類技術方案在安全性和隔離性方面具有天然的優勢。

資料庫核心多租,是由資料庫核心提供的多租戶特性。相比於虛擬機器多租和容器多租,核心多租沒有虛擬化管理層、OS(Operating System,簡稱作業系統)層、資料庫公共層的額外開銷,而且底噪小,在資源整合、資源的彈性伸縮等方面具備天然優勢。資料庫核心多租透過將資料庫核心語義與成熟的資源隔離技術棧相整合,實現更高的Scale-Down(縮容)能力,極大地提升了資料庫在計算資源方面的利用率。

GaussDB支援被部署在虛擬機器或者容器內,給客戶提供整體虛擬機器/容器多租的解決方案,同時也提供了資料庫核心多租特性,滿足客戶不同業務場景的需求。

  • 在客戶資金充裕,且對資源的隔離性、可靠性等要求更高的場景下,可以選擇虛擬器/容器多租方案;
  • 在客戶投入有限,需要更大力度利用現有資源的場景下,可以選擇GaussDB資料庫核心提供的多租方案。

本文將對GaussDB資料庫核心集中式場景下提供的多租技術進行重點介紹。

GaussDB多租架構

GaussDB多租是指在一個資料庫例項中劃分出多個邏輯處理單元,我們稱這個邏輯單元為PDB(pluggable database),每個PDB具備物理資料庫的絕大多數能力,同時相互隔離。

在資料庫初始化時,會生成一個template pdb作PDB建立的模板。

叢集內可以建立多個資源計劃,每個資源計劃下掛載多個plan directive,每個plan directive對應一個PDB,PDB透過plan directive配置自己的資源規格,包括CPU、記憶體、IO等。

1.png

圖1 GaussDB多租架構

一個PDB歸屬於一個獨立的業務或公司。獨立的業務或公司可以連線到自己的PDB執行資料庫業務。

GaussDB多租技術特點

1.隔離性

多租戶架構的目的是為了讓多使用者或者多業務使用同一套資料庫叢集,PDB資料的隔離性是實現該架構的基礎。

假設同一個公司的兩個業務共享同一個資料庫例項,業務A的相關資料可以被業務B檢視,這是完全不可接受的行為。

GaussDB資料庫的PDB之間資料完全隔離,實現租戶資料完全獨立、互不干擾,保障租戶資料的安全隱私:

(1)每個PDB除了有自己的表、索引等物件資料,也有自己的使用者、角色、表空間以及定時任務等物件。

(2)除了資料庫物件,PDB的其它屬性也完全隔離。比如:每個PDB有獨立的相容模式、執行緒組、GUC配置引數等。

2.png

圖2 PDB之間資料完全隔離

PDB之間資料互相隔離,但使用者業務開發並不需要感知是使用了一個PDB還是一個物理例項,對使用者業務開發來說,使用PDB和使用物理例項的操作沒有區別。

2.PDB粒度的資源管理

PDB資源的分配與變更由GaussDB核心接管,並不依賴任何外部元件。每個PDB可以設定自己的資源規格,包括CPU、記憶體以及IO。

GaussDB核心透過資源計劃管理所有PDB的資源,每個資源計劃包含了多個資源計劃指令,每個資源計劃指令設定了一個PDB的資源規格。

上層可以呼叫資源計劃高階包介面,完成資源的分配與變更。系統中可以有多個資源計劃,可以透過資源計劃的切換,做到一鍵切換所有PDB資源規格的能力。

3.png

圖3 PDB資源的變更和切換

每個PDB的資源使用由GaussDB核心中的資源管理模組管理。相較於將資源分配交由外部元件(虛擬機器,容器等)管理,GaussDB透過實現資料庫核心的自主資源分配,在保證租戶資源按照配額公平使用的前提下,也可獲得以下優勢:

(1)提高資源利用率:租戶間的後臺工作整合,透過合理的排程演算法,最大限度地利用系統空閒資源。

(2)核心感知資源分配,根據資源分配情況,動態調整CPU佔比,記憶體大小以及執行緒池、連線池等資源,最終獲得更優的整體表現。

(3)在物理機資源充足的情況下,PDB的資源變更透過SQL語句即可完成,實現資源秒級變更,業務無感知。

相比而言,目前雲上虛擬機器的規格變更耗費時間較長,需要先變更備機,然後主備倒換,然後進行其他變更操作,端到端時間約為:(虛擬機器關機 + IaaS資源排程+新虛擬機器開機+資料庫拉起)X 資料庫節點個數。

(4)核心中所有PDB公用一套系統資源,有效的減少了核心底噪的資源佔用。

3.例項發放

GaussDB核心多租技術的例項發放效率領先於其他的多租技術。

以虛擬機器多租為例,虛擬機器例項的發放需要先申請一定規格的虛擬機器,然後再部署GaussDB叢集,需要消耗10-30分鐘或者更多的時間。

而GaussDB核心多租技術,核心中管理了PDB的建立/開啟/關閉/刪除。在物理機上部署GaussDB的基礎上,使用幾個SQL語句即可完成這些操作,秒級時間內即可實現例項的發放。

4.GaussDB多租規格配置

GaussDB多租支援的PDB規格配置見下表:

技術解讀資料庫如何實現“多租戶”?

可以看到,GaussDB支援1U(1個CPU)級別的PDB規格,而當前虛擬機器多租和容器多租一般只能提供8U級別的商用規格。這是因為:

  • 資料庫中通常存在很多後臺任務以及運維任務,需要維護整個叢集的正常執行。

以GaussDB為例,存在auto vacuum、慢/全量SQL收集等後臺任務。

  • 資料庫管控層的例項指標監控也需要連線到資料庫收集資訊。

例如TPS,QPS等。

這些任務都需要消耗CPU,故虛擬機器/容器例項做到更小規格(例如2U)基本不太可能。而核心多租是在GaussDB程序中劃分了多個邏輯例項,所有邏輯例項共享同一份後臺任務,管控的指標監控連線一次就可以收集到所有PDB的資料,大大減少了資料庫底噪,因此核心多租可以很好的支援1U邏輯例項的發放。

另外,GaussDB後續會繼續最佳化PDB規格。比如,後續計劃支援1U4G的PDB規格,以滿足更多客戶場景的需求。

5.支援PDB關閉

對於不需要一直執行的資料庫業務,GaussDB支援關閉該業務的PDB並釋放資源。關閉PDB非常簡單,核心中只需要執行語句:ALTER PLUGGABLE DATABASE [pdbname] CLOSE語句即可。

PDB關閉即意味著業務無法連線到這個邏輯例項,使用者可以釋放PDB的CPU、記憶體、IO資源,對不使用的資源不計費,實現節約成本。

6.WDR報告中PDB相關增強

GaussDB在WDR(Workload Diagnosis Report 負載診斷報告)工具中適配了多租特性,可在WDR報告中檢視PDB資訊,以及PDB級別的SQL Statistics等效能資料檢視。

(1)WDR報告中的PDB資訊章節

5.png

(2)WDR報告SQL統計資訊章節

如下圖所示,細化的統計資訊中新增了“DB Name列”,PDB歸屬資訊會顯示在該列。

6.png

(3)SQL Detail和Object Stats等章節中也新增了PDB資訊,在此不一一列舉。

新增了PDB資訊的WDR報告,可方便DBA瞭解指定時間段內PDB級別的系統資源使用情況以及資料庫執行情況,進行相應的運維處理。

總結

GaussDB核心提供的多租技術特性,在安全隔離的前提下,具備更高的資源利用效率,更快的例項發放效率和資源變更效率。同時將租戶相關的資訊整合到WDR報告中,可以提升了客戶運維的便利性。因此,客戶可根據自身企業的組織結構,匹配相應的多租戶配置,更高效地利用現有資源,為企業節約成本。

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章