如今后臺存儲設(shè)備性能也以指數(shù)級趨勢增長,由上圖看見,PCIe SSD的I/O帶寬每3年翻一倍。目前PCIe 5.0 I/O帶寬可以達到10GB/s,如此高的帶寬,在理論上可以極大地促進存儲子系統(tǒng)和數(shù)據(jù)庫的融合,滿足上層企業(yè)級應(yīng)用更高性能體驗的需求。然而現(xiàn)實并非如此。
在企業(yè)級應(yīng)用的下層,一般會有不同類型的數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)的存儲和分析服務(wù)。這其中包括傳統(tǒng)的關(guān)系數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫,而支撐數(shù)據(jù)庫運行的是不同類型的存儲設(shè)備,如基于SSD、HDD的存儲子系統(tǒng)或分布式文件系統(tǒng)。我們的研究發(fā)現(xiàn),在這三層構(gòu)架中,各類數(shù)據(jù)庫系統(tǒng)正在成為軟肋,也使得存儲設(shè)備潛力難以發(fā)掘,直接影響企業(yè)級應(yīng)用的體驗。
以廣泛應(yīng)用關(guān)系數(shù)據(jù)庫MySQL為例,我們不難發(fā)現(xiàn)以上現(xiàn)實:高并發(fā)用戶I/O可以導(dǎo)致不同類型鎖的嚴重競爭行為,從而消耗相當比例的CPU處理時間,造成長時間的鎖等待。更為嚴重的是,用戶之間鎖等待時間的分布,可能存在巨大的不公平性,這種不公平性還會隨著并發(fā)用戶數(shù)量的增加而不斷惡化,極大降低I/O的處理效率。低效I/O性能如以上數(shù)據(jù)所示,主要表現(xiàn)為吞吐率降低、請求延時波動上,這說明MySQL不能保證高并發(fā)環(huán)境下,公平高效的分配I/O資源。我們也發(fā)現(xiàn)其他類型數(shù)據(jù)庫,如作為NoSQL數(shù)據(jù)庫經(jīng)典的MongoDB,也有類似問題。
針對以上問題,我們推薦可以跨數(shù)據(jù)庫的應(yīng)用級調(diào)度技術(shù)AppleS(Application Level Scheduler),旨在實現(xiàn)非侵入式的數(shù)據(jù)庫外部I/O訪問控制和運行時調(diào)度機制,準確地隱藏超過數(shù)據(jù)庫能力的多余用戶并行請求。從而極大地降低了鎖競爭和隊列等待時間,并提高數(shù)據(jù)庫緩存的利用率。正如以上數(shù)據(jù)所示,AppleS可以極大地提升數(shù)據(jù)庫利用現(xiàn)有存儲資源的能力,實現(xiàn)高效吞吐,公平用戶I/O訪問和穩(wěn)定低延時的高并發(fā)用戶I/O服務(wù)。
當前有潛力解決相關(guān)問題的技術(shù)方案大致可以分為三類,即面向特定數(shù)據(jù)庫的侵入式的解決方案、資源管理工具如Cgroup以及內(nèi)核I/O調(diào)度技術(shù)。
但是這些方案都存在以下三個問題:
1.被動的用戶高并發(fā)I/O導(dǎo)致的性能瓶頸,從而喪失最佳的解決時機,進而無力阻止低效、不公平、不穩(wěn)定的用戶并發(fā)I/O。
2.侵入方案很難跟蹤并有效規(guī)范自發(fā)性的用戶并發(fā)I/O。
3.面向特定數(shù)據(jù)庫的侵入式解決方案,即使對特定類型、特定版本的數(shù)據(jù)庫有較好的效果,但是很難遷移到其他版本的同類數(shù)據(jù)庫,更不用說不同類型的數(shù)據(jù)庫。無法實現(xiàn)跨數(shù)據(jù)庫、跨版本的支持。
針對以上挑戰(zhàn),AppleS的設(shè)計遵循以下四個原則:
AppleS會在第一時間阻止?jié)撛贗/O性能瓶頸的產(chǎn)生。為產(chǎn)生這個目標,I/O需要在數(shù)據(jù)庫和存儲子系統(tǒng)看見造成性能瓶頸的用戶并行I/O之前,及時發(fā)現(xiàn)并有效規(guī)范他們的I/O行為。
也就是通過P控制總是允許適量的用戶并發(fā)I/O訪問數(shù)據(jù)庫,并且暫停而不是拒絕多余的I/O行為,同時基于ζ控制,AppleS會盡量保障用戶I/O順序訪問模式,從而有效提升緩存的命中率。
AppleS會通過P優(yōu)化和ζ優(yōu)化保證整個I/O隱藏過程的公平、高效和穩(wěn)定。
AppleS的設(shè)計需要考慮其快速跨數(shù)據(jù)庫部署的能力,鑒于MySQL、MongoDB是廣泛接受的經(jīng)典關(guān)系數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫,現(xiàn)有的AppleS原型系統(tǒng)實現(xiàn)可以快速部署于MySQL和MongoDB的多個主流版本。
讓我們看一下早期介入的實現(xiàn)細節(jié),AppleS是通過干預(yù)I/O請求從網(wǎng)絡(luò)鏈接傳入數(shù)據(jù)庫的過程來實現(xiàn)早期介入的。
該過程可分為六步:
1.通過網(wǎng)絡(luò)驅(qū)動傳入Socket緩存。
2.數(shù)據(jù)庫發(fā)起系統(tǒng)調(diào)用。
3.I/O請求進入數(shù)據(jù)庫。
4.工作現(xiàn)存發(fā)起存儲I/O請求。
5.查詢結(jié)果返回。
6.I/O請求轉(zhuǎn)回。
其中AppleS通過策略性暫緩過量I/O請求的系統(tǒng)調(diào)用及步驟二和三,來防止過量I/O請求進入系統(tǒng)數(shù)據(jù)庫。
AppleS是通過P控制和ζ控制來實現(xiàn)過量用戶并發(fā)I/O隱藏的,前者控制并發(fā)用戶數(shù)量,而后者調(diào)節(jié)單個用戶的連續(xù)訪問數(shù)。上圖給了一個AppleS的調(diào)度案例,其中P和ζ設(shè)定為2和10,該案例中有4個并發(fā)用戶,其中用戶1和3權(quán)重為0.4,而用戶2和4權(quán)重為0.1。因此在一輪AppleS調(diào)度中,允許的發(fā)送的請求總數(shù)為10。而四個用戶的用戶I/O 定額也就是連續(xù)訪問數(shù),基于權(quán)重分別為4,1,4,1,換言之,在任何時刻,同時被數(shù)據(jù)庫可看見的并發(fā)用戶人數(shù)限定為2,也就是P=2。同時每個用戶可連續(xù)發(fā)送的請求數(shù)也被其用戶I/O 定額所限定。
通過這種方式,只要P和ζ設(shè)定匹配數(shù)據(jù)和存儲子系統(tǒng)的處理能力,AppleS就可以準確地隱藏過量的并行I/O。
以上實驗給出了P控制的效果,優(yōu)化P設(shè)定匹配點,可以避免過量的用戶并發(fā)I/O導(dǎo)致的鎖競爭低效的爭搶行為,以及高隊列效應(yīng)。從而最小化I/O請求延時,進而獲得高吞吐率、很低的用戶并發(fā)I/O不公平性、以及低水平的請求延時波動。
由于AppleS通過從數(shù)據(jù)庫外部截獲數(shù)據(jù)庫發(fā)出的系統(tǒng)調(diào)用,來幫助其進行用戶并發(fā)I/O的調(diào)度,它本質(zhì)上將數(shù)據(jù)庫和底層存儲子系統(tǒng)視為一個黑盒子,這使得AppleS操作可以從物理層面與數(shù)據(jù)庫的操作和底層的OS 合態(tài)I/O操作隔離開來。從而獲得較高的易用性和兼容性,事實上AppleS可以通過迅捷的配置,快速適配一款特定的數(shù)據(jù)庫。
此外AppleS還可以兼容多個版本的主流Linux內(nèi)核,不同的存儲I/O調(diào)度機制,以及資源管理工具,比如Cgroup。
現(xiàn)在我們談?wù)凙ppleS優(yōu)化的流程,剛才談到AppleS的過量用戶并發(fā)I/O的隱藏,是通過P和ζ二維控制實現(xiàn)的,其配置需要優(yōu)化,及P和ζ優(yōu)化。
P優(yōu)化的目的,是為了發(fā)現(xiàn)最佳的用戶并發(fā)I/O的匹配點,在該點數(shù)據(jù)庫的吞吐率可達到峰值。同時由于該點可以避免過量并發(fā)I/O引起的高度鎖競爭低效,以及隊列效應(yīng),不僅是吞吐率,用戶及公平性請求延時波動,也會得到很大的優(yōu)化。
對于P優(yōu)化我們采用基于三點測量的建模方案,從而構(gòu)建吞吐率和用戶并行度的函數(shù)模型。進而獲得最佳的配置點,作為P控制的優(yōu)化配置方案。相關(guān)細節(jié)可以參考論文。
以上例子直觀地展現(xiàn)吞吐率和用戶并行度的函數(shù)模型,以及最佳匹配點的物理含義,及達到吞吐率峰值所需要的最小用戶并行度。
而ζ優(yōu)化則采用基于測量的反饋控制,在限定用戶并發(fā)I/O不公平度和I/O請求延時波動上限的前提下,最大化地用戶的順序請求訪問水平,在P控制限定用戶過量并行I/O的前提下,緩存訪問命中率將得到極大優(yōu)化。
性能測試主要針對AppleS的有效性、易用性和多類多版本數(shù)據(jù)庫的兼容性,以及針對主流的Linux內(nèi)核資源管理工具和存儲調(diào)度機制的適用性展開。為此目的,我們用經(jīng)典而被廣泛接受的關(guān)系數(shù)據(jù)庫MySQL和NoSQL數(shù)據(jù)庫MongoDB共4個版本的數(shù)據(jù)庫作為測量對象。同時我們在4個不同的版本的Linux內(nèi)核,9個存儲調(diào)度機制,以及Cgroup資源管理工具的環(huán)境下,對AppleS進行測試。
對于MySQL8.0.23,AppleS可以顯著提高用戶并發(fā)I/O公平性降低I/O請求延時的波動水平,同時還能保證高水平的吞吐率,最高提升39.2%。對于MySQL 8.0.15我們測試在一定用戶并行I/O不公平的限制,例如10%,對于不同存儲調(diào)度配置吞吐率的優(yōu)化程度,可達到17%的提高。對于MongoDB4.4.3,AppleS可以與資源調(diào)度工具Cgroup合作進一步提高吞吐率的水平,同時獲得很高的用戶并行I/O的公平性,最高可以提升101.5倍。對于MongoDB 3.6.0我們發(fā)現(xiàn)AppleS在9個存儲調(diào)度配置下,都可以極大地提高用戶并發(fā)I/O的公平性,同時可以保持高吞吐水平。
不難發(fā)現(xiàn),AppleS通過細粒度的P和ζ控制,可以準確地隱藏過量的用戶并發(fā)I/O,對數(shù)據(jù)庫及其存儲子系統(tǒng)的負面影響,極大地降低鎖競爭,低效緩存行為以及I/O隊列效應(yīng)所產(chǎn)生的性能評價。從而極大地提升了用戶并發(fā)I/O公平性,保障高水平的I/O吞吐率,同時降低了I/O請求延時的波動水平,需要注意的是,AppleS采用的是非侵入式的用戶態(tài)實現(xiàn),易于部署和升級。可以快速地適配不同類型、版本的數(shù)據(jù)庫系統(tǒng),如MySQL和MongoDB。
(以上內(nèi)容根據(jù)速記整理而成,未經(jīng)過本人審閱)