「分散式技術專題」事務型、分析型資料資源隔離機制

Hubble資料庫發表於2023-02-14

資源隔離

在分散式系統裡通常將程式進行資源隔離,然後在同一個程式裡的各種業務都共享執行緒池對外提供服務,這就經常會遇到這樣的問題:分析型的負載較高,搶佔了執行緒池裡的大部分執行緒資源,從而會造成事務業務的服務質量下降;或者某個業務負責較高,使其他的業務質量下降。同一個程式內新加入一個業務,這個業務會搶佔其他業務的資源,從而造成系統的不穩定,比如業務效能抖動;難以除錯,比如同一個程式裡的 10個業務共享同一個執行緒池,當出現故障時難以透過簡單的日誌判斷是哪個業務出了問題。因此,希望透過一種機制處理上面的問題,資源隔離的方式包括程式隔離和執行緒隔離。

resources_isolation

隔離型別

1.程式隔離

程式級別隔離通常指的是容器化隔離,比如透過使用 docker實現業務程式之間的資源隔離;

2. 執行緒隔離

執行緒級別隔離是指給每個跑在程式裡的業務都按業務型別建立一個執行緒池,從而實現執行緒級別細粒度的資源隔離,執行緒隔離具有以下優勢:
•提高業務可靠性,減少業務受其他業務影響的程度,當一個業務耗盡自身的執行緒資源後也不會影響另外一個業務的服務質量;
•降低新加入的業務的給系統帶來的風險,比如當前系統的一個程式用例中有10個業務。當新加入一個業務時,必然會搶佔此前10個業務的執行緒資源,從而給系統帶來不穩定,比如效能抖動;
•利於除錯,給每一個業務都分配一個執行緒池名稱,當業務出故障時,透過執行緒池名稱可以很方便地定位是哪個業務出了故障,並且透過監控執行緒池的請求失敗次數、超時次數、拒絕請求次數等可以實時的反應當前業務服務質量。

資源隔離的實現

1.記憶體資源隔離

監控每個任務的程式樹或者執行緒樹,程式樹和執行緒樹使用的總實體記憶體或者總虛擬記憶體量超過了預先設定值,則依次傳送 TERM和KILL兩個訊號將整個程式樹殺死。也可以通引數配置進行資源隔離。

2.CPU資源隔離

CPU資源按照百分比進行使用和隔離,透過引數的引數實現的,這種方式能夠保證每個節點上的cpu資源得到充分的共享和使用,從而產生較高的CPU利用率。限制每個執行容器的CPU資源使用上限,透過嚴格限制cpu使用上限,即使機器上仍有大量空閒CPU資源,也不會允許使用。限制使用的CPU上限,需要注意的是,資源管理系統允許配置每個節點上可使用的物理cpu個數,以及物理cpu與虛擬cpu個比例,而使用者申請資源時,只能申請虛擬cpu。

3.IO資源隔離

IO資源分為磁碟IO和網路IO兩種。IO資源的隔離比CPU和記憶體複雜的多,為了量化IO資源,透過“虛擬磁碟”(vdisk),使用cgroup的blkio模組實現磁碟IO隔離。當然,在實現該功能之前,還需要將IO資源加入排程器管理的範疇,比如公平排程器或者容量排程器,可以對磁碟IO和網路IO進行排程。

 

以上為事務型、分析型資料資源隔離機制, 「分散式技術專題」是國產資料庫 hubble 團隊精心整編,專題會持續更新,歡迎大家保持關注。


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

相關文章