本文分享自華為雲社區《【GaussTech速遞】技術解讀之GaussDB多租技術》,作者:GaussDB資料庫。 資料庫多租技術介紹 隨著雲計算時代的到來,多租戶的概念也逐漸廣為人知。“多租戶”使得租戶之間可以共用物理資源,能夠幫助用戶節約硬體成本和運維成本,提高資源利用效率。同時,在實現的過程中, ...
本文分享自華為雲社區《【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 GaussDB多租架構
一個PDB歸屬於一個獨立的業務或公司。獨立的業務或公司可以連接到自己的PDB運行資料庫業務。
GaussDB多租技術特點
1.隔離性
多租戶架構的目的是為了讓多用戶或者多業務使用同一套資料庫集群,PDB數據的隔離性是實現該架構的基礎。
假設同一個公司的兩個業務共用同一個資料庫實例,業務A的相關數據可以被業務B查看,這是完全不可接受的行為。
GaussDB資料庫的PDB之間數據完全隔離,實現租戶數據完全獨立、互不幹擾,保障租戶數據的安全隱私:
(1)每個PDB除了有自己的表、索引等對象數據,也有自己的用戶、角色、表空間以及定時任務等對象。
(2)除了資料庫對象,PDB的其它屬性也完全隔離。比如:每個PDB有獨立的相容模式、線程組、GUC配置參數等。
圖2 PDB之間數據完全隔離
PDB之間數據互相隔離,但用戶業務開發並不需要感知是使用了一個PDB還是一個物理實例,對用戶業務開發來說,使用PDB和使用物理實例的操作沒有區別。
2.PDB粒度的資源管理
PDB資源的分配與變更由GaussDB內核接管,並不依賴任何外部組件。每個PDB可以設置自己的資源規格,包括CPU、記憶體以及IO。
GaussDB內核通過資源計劃管理所有PDB的資源,每個資源計劃包含了多個資源計劃指令,每個資源計劃指令設置了一個PDB的資源規格。
上層可以調用資源計劃高級包介面,完成資源的分配與變更。系統中可以有多個資源計劃,可以通過資源計劃的切換,做到一鍵切換所有PDB資源規格的能力。
圖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信息章節
(2)WDR報告SQL統計信息章節
如下圖所示,細化的統計信息中添加了“DB Name列”,PDB歸屬信息會顯示在該列。
(3)SQL Detail和Object Stats等章節中也添加了PDB信息,在此不一一列舉。
添加了PDB信息的WDR報告,可方便DBA瞭解指定時間段內PDB級別的系統資源使用情況以及資料庫運行情況,進行相應的運維處理。
總結
GaussDB內核提供的多租技術特性,在安全隔離的前提下,具備更高的資源利用效率,更快的實例發放效率和資源變更效率。同時將租戶相關的信息集成到WDR報告中,可以提升了客戶運維的便利性。因此,客戶可根據自身企業的組織結構,匹配相應的多租戶配置,更高效地利用現有資源,為企業節約成本。