本文作者:YashanDB高階服務工程師周國超
YashanDB共享叢集是崖⼭資料庫系統(YashanDB)的⼀個關鍵特性,它是⼀個單庫多例項的多活資料庫系統。⽤⼾可以連線到任意例項訪問同⼀個資料庫,多個資料庫例項能夠併發讀寫同⼀份資料,同時保證例項之間讀寫的強⼀致性。這種設計賦予了系統⾼可⽤性、⾼擴充套件性和⾼效能的特點。
共享叢集基於YashanDB核心持續演進,硬體上依賴共享儲存實現shared-Disk的架構,同時引⼊了Cohesive Memory核⼼技術實現Shared-Cache能⼒。這使得叢集資料庫多個例項之間能夠協同資料⻚的讀寫訪問以及各種⾮資料類資源的併發控制。
共享叢集的核⼼元件主要包括崖⼭叢集核心(YCK,Yashan Cluster Kernel)、崖⼭叢集服務(YCS,Yashan Cluster Service)和崖⼭⽂件系統(YFS,Yashan File System)。崖⼭叢集核心透過聚合記憶體技術,聚合多例項對資料資源和⾮資料資源的併發訪問。崖⼭叢集服務負責管理共享叢集資料庫,包括叢集伺服器配置管理、資源配置管理、啟停、監控伺服器以及資源,並在故障時負責投票仲裁併重組叢集。崖⼭⽂件系統是YashanDB的專⽤並⾏⽂件系統,提供儲存裝置管理、儲存⾼可⽤、⽂件系統接⼝等功能。
崖山資料庫(YashanDB)共享叢集的獨特性主要體現如下⽅⾯:
核心技術突破:YashanDB共享叢集攻克了共享叢集的關鍵技術瓶頸,實現了⾦融級⾼可⽤能⼒,RPO為0、RTO<10秒。
高可用性:YashanDB共享叢集具備天然的⾼可⽤優勢,任何例項故障後都不影響應⽤的連續性,採⽤了快速恢復和連線連續性技術保證服務端的透明接管和客⼾端的透明切換。
效能最佳化:YashanDB共享叢集在效能⽅⾯有顯著優勢,經實測,在同等硬體條件下,其TPC-C基準測試表現⽐Oracle RAC⾼30%。
多例項讀寫:YashanDB⾃研了“七種武器”技術,包括⻚內鎖技術、免鎖讀技術、去中⼼化的事務管理機制等,以解決讀寫衝突,提⾼讀寫效能。
自適應非同步並⾏排程:YashanDB提出了⾃適應的非同步並⾏任務排程機制,⼤幅度降低了多核之間的事務衝突協調開銷,提⾼了效能。
共享叢集架構:YashanDB共享叢集基於YashanDB核心持續演進,引⼊了Cohesive Memory核⼼技術,實現Shared-Cache能⼒,⽀持線上故障⾃動切換和故障⾃動恢復。
全自研共享叢集解決⽅案:YashanDB全⾃研共享叢集解決⽅案為⽤⼾提供應⽤透明的⾼可⽤和⾼效能資料庫能⼒,構建了基於國產應⽤/中介軟體、共享叢集資料庫、芯⽚/伺服器/儲存的⾼端全棧⽅案。
專用並行檔案系統:YashanDB⾃研叢集⽂件系統,採⽤In memory FAT + Direct access專利技術,實現檔案系統後設資料常駐記憶體,提供更⾼效的儲存管理能⼒和效率。
原創理論與領先架構:YashanDB擁有世界領先的基礎理論作為⽀撐,透過“原創理論+領先架構+⼯程能⼒”三位⼀體的⼯程研發體系,打造技術先進、效能穩定、持續創新的產品核心。
這些獨特性使得YashanDB共享叢集在資料庫國產化替代的浪潮下,能夠滿⾜⾦融、電信等⾏業核⼼系統對關鍵技術的需求,推動核⼼系統國產化替換的規模化應⽤。
相對於Oracle資料庫共享叢集的關鍵技術總結如下:
1.Oracle RAC (Real Application Clusters):Oracle RAC是Oracle資料庫中的⼀項核⼼技術,它允
許多個伺服器節點共享訪問相同的資料庫⽂件,從⽽實現⾼可⽤性和負載均衡。
2. 快取融合 (Cache Fusion):這是Oracle RAC的⼀個關鍵元件,它透過在節點之間共享快取資料來
減少磁碟I/O,提⾼資料庫效能。
3. 全域性資源管理器 (Global Resource Manager, GRM):GRM負責管理叢集中的資源,包括鎖定和資
源的分配。
4. 投票磁碟 (Voting Disks):在Oracle RAC中,投票磁碟⽤於儲存叢集的配置資訊和狀態,幫助在節
點故障時進⾏決策。
5. Oracle Clusterware:這是Oracle RAC運⾏所依賴的中介軟體,負責叢集的管理和協調。
6. 服務和例項:Oracle RAC可以配置多個服務和例項,它們可以在不同的節點上運⾏,以提供⾼可⽤
性和故障轉移。
7. 儲存系統:共享儲存是Oracle RAC的基礎,它允許多個節點訪問相同的資料⽂件。
8. 網路:高速網路連線是Oracle RAC正常運⾏的關鍵,它⽀持節點之間的通訊和資料共享。
Oracle RAC技術透過這些關鍵技術實現了資料庫的⾼可⽤性、可擴充套件性和效能最佳化,使其成為企業級核⼼交易資料庫領域的⼴泛應⽤解決⽅案。
共享叢集技術最核⼼的難點在於例項間的互動,如何保證多個例項間資料的強⼀致性?如何協調資料之間發⽣的衝突?如何處理⽹絡通訊的各種異常情況?這對架構設計的挑戰⾮常⼤,需要⼀整套協調機制來實現。
YashanDB共享叢集中所有資料庫例項共享快取,本地訪問⻚⾯時若未命中,可透過⽹絡從其他例項拿到最新版本⻚⾯,實現資料交換,應⽤可以連線任意節點訪問和使⽤資料庫完整能⼒。為解決讀寫衝突,提⾼讀寫效能。
我們來初步探索下YashanDB⾃研了“武器”技術。
頁內鎖技術
在崖⼭資料庫系統(YashanDB)中,⻚內鎖技術是⼀種⽤於實現併發控制的技術。它透過在資料⻚級別上設定鎖來控制對資料的訪問和操作,以確保資料的⼀致性和併發性。當⼀個事務需要訪問或修改某個資料⻚時,系統會根據事務的需求和當前資料⻚的鎖狀態來決定是否可以進⾏操作。這種技術可以有效地避免資料的衝突和混亂,保證事務的正確執⾏和資料的完整性。
在崖⼭資料庫系統(YashanDB)中,可以透過以下步驟驗證⻚內鎖技術的有效性:
- 建立多個事務並訪問同⼀個資料⻚:可以建立多個併發的事務,讓它們同時訪問同⼀個資料⻚,嘗試進⾏讀取或寫⼊操作。
- 觀察鎖的狀態:透過資料庫系統的監控⼯具或查詢系統檢視,觀察資料⻚上的鎖狀態,包括鎖的型別、持有者、等待者等資訊。
- 測試併發控制:在不同事務之間製造資料衝突,例如⼀個事務嘗試修改資料⻚上的資料,⽽另⼀個事務同時也在嘗試修改相同資料⻚的資料,觀察系統如何處理併發訪問。
- 檢查事務的隔離級別:驗證⻚內鎖技術是否按照事務的隔離級別正確地處理併發訪問,確保事務之間的資料操作不會相互⼲擾。
透過以上步驟可以驗證⻚內鎖技術在崖⼭資料庫系統中的有效性,確保資料的⼀致性和併發控制機制的正確性。
透過以上步驟可以驗證⻚內鎖技術在崖⼭資料庫系統中的有效性,確保資料的⼀致性和併發控制機制的正確性。
去中心化的事務管理機制
崖⼭資料庫(YashanDB)採⽤了去中⼼化的事務管理機制,這是其共享叢集技術的核⼼特點之⼀。這種機制避免了傳統中⼼化事務管理可能帶來的效能瓶頸和擴充套件性問題。在YashanDB共享叢集中,所有資料庫例項共享快取,並且透過去中⼼化的事務管理,實現了多個例項間資料的強⼀致性,同時協調資料之間發⽣的衝突和處理⽹絡通訊的各種異常情況。
利⽤去中⼼化的事務管理機制,可以實現在分散式環境下對事務進⾏管理和控制,確保資料的⼀致性和可靠性。在YashanDB中,可以透過配置例項親和性和分散式事務處理能⼒來實現去中⼼化的事務管理機制。具體步驟包括:
- 配置例項親和性:根據業務需求和資料分佈情況,設定資料表或資料⽂件在特定例項上的儲存和處理,以確保相關資料在特定例項上進⾏操作。
- 分散式事務處理:利⽤YashanDB原⽣的分散式處理系統,⽀持分散式事務的提交、回滾和併發控制,保證跨多個節點的事務操作的⼀致性和隔離性。
- 實現事務ACID特性:透過YashanDB的事務管理功能,⽀持完整事務ACID特性,包括細粒度鎖管理、語句讀寫⼀致性、UNDO⾃管理和多版本併發控制,確保事務的正確執⾏和資料的⼀致性。
- 配置⾼可⽤和備份策略:利⽤YashanDB提供的⾼可⽤能⼒,配置⼀主多備、級聯備等⾼可⽤架構,保證系統的可⽤性和資料的安全性。
透過以上步驟,可以充分利⽤YashanDB的去中⼼化事務管理機制,實現分散式環境下的⾼效、可靠的事務處理。
此外,YashanDB還採⽤了基於時間戳的多版本併發控制(MVCC)機制,以及例項間透過Lamport訊息⽅式實現時間戳同步,確保跨例項的資料交換不會影響事務的可⻅性。這些技術的結合,使得YashanDB能夠在保持資料⼀致性的同時,提⾼系統的併發處理能⼒和整體效能。
例項親和性的空間分配機制
崖⼭資料庫(YashanDB)的例項親和性的空間分配機制是其共享叢集技術的⼀部分,旨在提⾼資料庫的效能和效率。具體來說,這種機制允許例項間對同⼀張表並⾏導⼊資料時避免空間爭⽤,從⽽最佳化了資源的分配和使⽤。
例項親和性的空間分配機制是指在資料庫系統中,可以透過設定例項親和性來指定某個表或資料⽂件在特定例項上進⾏分配和儲存。這種機制可以確保特定的資料在特定的例項上進⾏處理,提⾼資料訪問的效率和效能。
在YashanDB中,配置例項親和性的空間分配機制需要在建庫時根據資料量、併發數、應⽤場景等因素來確定。對於不同⽤途的表空間,應根據資料庫效能和每種型別的表空間的關聯性來進⾏配置。在建立資料庫時,應為所有內建表空間配置合理的初始⼤⼩,以滿⾜實際需求。
對於臨時型別表空間,建議初始⼤⼩不要配置過⼤,可以開啟⾃動擴充套件功能,除⾮應⽤系統有明確的臨時表需求。在YashanDB中,臨時表的儲存空間採⽤預佔⽅式,只有在BUFFER不⾜需要換出時才會被使⽤,並且在資料庫重啟後會被重置。因此,⽤⼾可以根據需要透過RESIZE或ADD DATAFILE的⽅式增加臨時表空間的容量,或者透過SHRINK來釋放過剩的空間。
在初始化配置引數時,需要根據應⽤需求和環境資源,為效能引數賦予合適的初始值。⼀些重要的配置引數包括VM_BUFFER_SIZE、REDOFILE_IO_MODE、REDO_BUFFER_SIZE、REDO_BUFFER_PARTS等,這些引數的合理配置對資料庫效能⾄關重要。在⾼可⽤的⾃動選舉配置中,需要預先規劃好引數以便⽇後擴充套件,確保Raft叢集架構能夠正常運⾏並實現⾃動選舉。
在YashanDB中,可以透過設定例項親和性來控制資料的分佈和儲存,以滿⾜不同業務需求和效能要求。例項親和性的空間分配機制可以透過物理屬性和表空間設定來實現,確保資料在分散式部署環境中的合理分配和管理。
基於負載快取⾃動排程策略
基於負載快取⾃動排程策略是YashanDB共享叢集中的⼀項技術,旨在提⾼資料庫叢集整體的快取命中率和效能。這種策略透過動態調整和最佳化快取資源的使⽤,以適應不斷變化的負載情況,從⽽實現更⾼效的資料訪問和處理。
以下是該策略可能包含的⼏個關鍵⽅⾯:
- 動態資源分配:根據當前的資料庫負載情況,⾃動調整各個例項的快取⼤⼩和資源分配,以確保資源被有效地利⽤。
- 負載預測:透過分析歷史資料和實時監控資料,預測未來的負載變化,從⽽提前做出資源調整。
- 快取置換演算法:採⽤⾼效的快取置換演算法,確保最常訪問的資料被保留在快取中,減少對磁碟的訪問次數。
- 併發控制:在多例項環境中,協調不同例項的快取訪問,避免快取爭⽤和衝突,提⾼併發處理能⼒。
- 資料區域性性最佳化:透過最佳化資料儲存和訪問模式,增強資料的區域性性,使得相關資料更可能被⼀起載入到快取中。
- 故障恢復:在發⽣故障時,快速恢復快取狀態,確保系統的連續性和穩定性。
- 監控與調優:實時監控快取的效能指標,根據監控結果動態調整排程策略,以適應不斷變化的運⾏環境。
YashanDB透過實施基於負載的快取⾃動排程策略,可以顯著提⾼資料庫系統的響應速度和吞吐量,同時降低延遲和系統資源的消耗。這對於需要處理⼤規模資料和⾼併發請求的企業級應⽤尤為重要。
髒頁快傳技術
髒⻚快傳技術是YashanDB共享叢集中⽤於提⾼效能的關鍵技術之⼀。這項技術主要針對在資料庫操作過程中產⽣的髒⻚(即已修改但尚未持久化到磁碟的資料⻚)進⾏最佳化,以減少因髒⻚寫回磁碟造成的延遲。
在傳統的資料庫系統中,髒⻚需要週期性地被重新整理回磁碟以確保資料的永續性,這個過程稱為Checkpointing。如果髒⻚數量較多,或者系統負載較⾼,這個過程可能會引⼊顯著的延遲,影響資料庫的效能。
YashanDB的髒⻚快傳技術透過以下⽅式來提⾼效率:
1.遵從WAL協議:在確保遵循預寫⽇志(Write Ahead Logging,WAL)協議的前提下⼯作,這是資料庫保證事務永續性的關鍵機制。
2. 減少磁碟I/O等待:透過最佳化演算法減少髒⻚寫回操作時對磁碟I/O的等待時間,從⽽降低整體的事務處理延遲。
3. 快速傳遞:髒⻚快傳技術允許髒⻚在例項間快速傳遞,⽽不是等待全部修改完成再統⼀寫回,這樣可以更快地釋放記憶體資源並減少鎖的競爭。
4. 最佳化的刷盤策略:YashanDB可能採⽤了⼀些智慧的刷盤策略,⽐如根據當前系統負載動態調整刷盤頻率,或者優先處理最有可能影響效能的髒⻚。
5. 非同步處理:髒⻚的寫回操作可能是非同步進⾏的,這樣就不會阻塞主資料庫操作流程,提⾼了資料庫的併發處理能⼒。
髒⻚快傳技術是YashanDB共享叢集技術優勢的⼀部分,它幫助YashanDB在保持資料⼀致性和永續性的同時,提⾼了資料庫的效能和響應速度。
除此之外,為了提⾼資料庫的效能,YashanDB⾃研叢集⽂件系統,採⽤ In memory FAT(AllocationTable, ⽂件分割槽表) + Direct access 專利技術,該技術能實現⽂件系統後設資料常駐記憶體,提供更⾼效的儲存管理能⼒和效率。⽂件系統客⼾端程式透過直連共享記憶體訪問 FAT 資料,確保 YashanDB 針對所有持久化⽂件(包括但不限於控制⽂件、資料⽂件以及redo⽂件)的 read/write 操作,不涉及等待磁碟 IO 或⽹絡 IO,實現效能最優。
YashanDB共享叢集的這些先進性和特殊性機制,使其成為⾼端核⼼交易場景的有⼒競爭者,為⽤⼾提供了⼀個⾼效能、⾼相容、更開放的資料庫解決⽅案。我們對此有更⾼的要求和期待,共享叢集后續發展如何,我們拭⽬以待。