柏睿實時云數(shù)倉性能優(yōu)化篇來也!分為三章。本文為第一章,歡迎閱讀。本文作者:柏睿數(shù)據(jù)產(chǎn)品研發(fā)總監(jiān)陳海富
柏睿實時云數(shù)倉為BI分析業(yè)務(wù)提供強(qiáng)勁的計算發(fā)動機(jī)——數(shù)據(jù)庫服務(wù)。如何優(yōu)化云數(shù)倉性能?由于其運行在云計算平臺中,與傳統(tǒng)物理機(jī)優(yōu)化方法有很大不同。傳統(tǒng)物理機(jī)運行環(huán)境中的數(shù)據(jù)庫優(yōu)化方法,主要有:
1)CPUNUMA優(yōu)化大法:物理服務(wù)器有多顆物理CPU,由于每顆CPU負(fù)責(zé)獨立的內(nèi)存控制器,當(dāng)跨CPU訪問內(nèi)存空間時,會出現(xiàn)很大的延遲。但在云環(huán)境中的云主機(jī),沒有NUMA造成的跨內(nèi)存控制器問題。
2)網(wǎng)絡(luò)巨型幀:巨型幀是指將以太網(wǎng)協(xié)議中的幀長大于1522字節(jié)的以太網(wǎng)幀,通過將每幀能夠多傳輸內(nèi)容,來增加網(wǎng)絡(luò)傳輸效率。但在云環(huán)境中,網(wǎng)絡(luò)設(shè)備主要由虛擬化實現(xiàn),不建議調(diào)整太網(wǎng)幀大小。
換網(wǎng)絡(luò)協(xié)議:物理環(huán)境中網(wǎng)絡(luò)傳輸慢,可以換成IB網(wǎng)(InfiniBand network)。但在云環(huán)境中,這幾乎是不可能的。
3)換性能更高的硬件:物理環(huán)境中的硬盤、CPU都可以換成性能更高的硬件。例如機(jī)械硬盤速度太慢,固態(tài)硬盤速度提速還不夠強(qiáng),將傲騰內(nèi)存當(dāng)做硬盤速度才能飛快。但在云環(huán)境中,可能不會有你想換的硬件型號。而且云計算的計費方式是“按需付費”,即按使用量來付費,當(dāng)需要更高的磁盤IO性能,就需要購買更大的空間,由此性能調(diào)優(yōu)還要考慮成本。
當(dāng)然在云計算環(huán)境中,是可以直接租用裸金屬服務(wù)器來部署應(yīng)用程序,但需要考慮云中物理服務(wù)器配置固定,而且成本會比較高。下圖是截至2022年4月17日,華為云裸金屬服務(wù)器的價格。
所以我們在此分享一些柏睿實時云數(shù)倉在純云環(huán)境中的優(yōu)化經(jīng)驗,希望能給大家提供一些性能優(yōu)化啟發(fā)。
一、先謀后行
數(shù)據(jù)庫性能優(yōu)化需要考慮自身軟件所依賴的計算、存儲、網(wǎng)絡(luò)等多個資源,是綜合性問題,需要全盤思考,再多方處理。
雖然云計算號稱“按需付費”,但如果不精打細(xì)算,使用成本反而會增加很多。因此我們在優(yōu)化柏睿實時云數(shù)倉的主要思路是:在成本可控的情況下,通過優(yōu)化相關(guān)的云資源,提升柏睿分布式內(nèi)存數(shù)據(jù)庫的性能。
二、知己知彼
優(yōu)化數(shù)據(jù)庫整體性能,需要先了解優(yōu)化的數(shù)據(jù)庫業(yè)務(wù)架構(gòu),才能做出更好的調(diào)優(yōu)方法。
柏睿實時云數(shù)倉使用自研的分布式全內(nèi)存數(shù)據(jù)庫RapidsDB,屬于OLAP分析型數(shù)據(jù)庫。與傳統(tǒng)的OLTP交易型數(shù)據(jù)庫從業(yè)務(wù)到架構(gòu)是有很大區(qū)別的。
下表是OLAP與OLTP的一些簡單比較,從比較中能看出OLAP主要以讀為主,而OLTP主要是寫入為主。
三、一夫當(dāng)關(guān)or團(tuán)隊作戰(zhàn)
OLAP與OLTP數(shù)據(jù)庫由于關(guān)注的業(yè)務(wù)不同,所以軟件在工作方式和優(yōu)化方法會有一些不同。
OLTP業(yè)務(wù)主要業(yè)務(wù)場景是交易記錄的準(zhǔn)確性,因此需要寫入具有唯一性,所以傳統(tǒng)針對OLTP數(shù)據(jù)庫的優(yōu)化方法將負(fù)責(zé)寫入的“一夫”節(jié)點性能大幅提升,如使用更快的CPU,增加更多的內(nèi)存,使用將內(nèi)存當(dāng)做磁盤用的傲騰存儲,使用IB網(wǎng)絡(luò)(InfiniBand network)等。
但個體設(shè)備的配置提升,會遇到天花板。于是近年來有人提出將數(shù)據(jù)庫進(jìn)行分庫分表,增加寫入節(jié)點的數(shù)量而提升寫入能力。通過將數(shù)據(jù)復(fù)制到多個只讀節(jié)點,提升數(shù)據(jù)讀的能力。
比如對于一個記錄用戶名數(shù)據(jù)庫,按姓名拼音的第一個字母拆成26個數(shù)據(jù)庫,這樣就可以將原來只能由一個庫來寫,變成分別由26個庫來寫入,從而提升寫入能力。但每個分開的庫還是只能有一個寫入,還是有種“一夫當(dāng)關(guān),萬夫莫開”的意思。
柏睿自研的分布式全內(nèi)存數(shù)據(jù)庫RapidsDB基于MPP并行計算架構(gòu),集群的性能隨著節(jié)點規(guī)模的增加而增加。
MPP架構(gòu)示例圖
下圖是RapidsDB在同一個業(yè)務(wù)場景下,不同規(guī)模的集群性能比較。能夠看到隨著數(shù)據(jù)庫節(jié)點的增加,整體性能有明顯提升。
由此可見,RapidsDB的技術(shù)架構(gòu)類似于“團(tuán)體作戰(zhàn)”風(fēng)格,所有的數(shù)據(jù)庫節(jié)點都能同時協(xié)同戰(zhàn)斗,因此提升的性能不是由個體決定的。
例如在一個具有5個數(shù)據(jù)庫節(jié)點的RapidsDB集群里,用戶要導(dǎo)入1000T的數(shù)據(jù)文件任務(wù),是由5個數(shù)據(jù)庫節(jié)點將1000T任務(wù)分散同時完成。如果性能不夠,再加數(shù)據(jù)庫節(jié)點就可以實現(xiàn)性能提升了。
以上分析,僅從技術(shù)架構(gòu)而言,并不能完全說明哪種技術(shù)是最好。只有適合業(yè)務(wù),才是最好的技術(shù)。