大數(shù)據(jù)時(shí)代如何構(gòu)建高性能數(shù)據(jù)庫平臺(tái)
在數(shù)據(jù)爆炸的時(shí)代,給眾多IT從業(yè)人員帶來了相當(dāng)大的困擾—伴隨著大數(shù)據(jù)分析,商業(yè)智能的發(fā)展,數(shù)據(jù)量呈現(xiàn)指數(shù)增長,傳統(tǒng)數(shù)據(jù)處理系統(tǒng)已不堪重負(fù)。在這樣的背景下,“數(shù)據(jù)庫平臺(tái)的構(gòu)建”逐漸成為一個(gè)備受關(guān)注的話題。
影響數(shù)據(jù)庫性能的三要素
對于數(shù)據(jù)庫系統(tǒng)而言,絕大多數(shù)情況下影響數(shù)據(jù)庫性能的三個(gè)要素是:數(shù)據(jù)運(yùn)算能力、數(shù)據(jù)讀寫時(shí)延和數(shù)據(jù)吞吐帶寬,簡稱計(jì)算、時(shí)延、吞吐。計(jì)算指的是CPU的運(yùn)算能力,時(shí)延是數(shù)據(jù)從存儲(chǔ)介質(zhì)跑到CPU所需的時(shí)間長短,吞吐則是數(shù)據(jù)從存儲(chǔ)介質(zhì)到CPU的道路寬度。一般情況下,關(guān)注計(jì)算和時(shí)延是比較多的,但是在數(shù)據(jù)量越來越多的情況下,吞吐也成為影響數(shù)據(jù)庫性能的重要因素。如果吞吐帶寬不夠,會(huì)造成計(jì)算等待隊(duì)列的增加,CPU占用率虛高不下。這種情況下,即使增加再多的計(jì)算資源也于事無補(bǔ),相當(dāng)于千軍萬馬擠獨(dú)木橋,馬再好也是枉然。一個(gè)高性能的數(shù)據(jù)庫平臺(tái),一定是計(jì)算、時(shí)延、吞吐三方面的能力齊頭并進(jìn),相互匹配。
計(jì)算能力由CPU主頻和核數(shù)決定,實(shí)踐中看CPU占用率就能夠大致確定CPU配置是否合適。時(shí)延的指標(biāo)很簡單,時(shí)間是衡量時(shí)延的唯一指標(biāo)。吞吐量則是通過每秒在I/O流中傳輸?shù)臄?shù)據(jù)總量來衡量的。
從三要素到三方法
明確了影響性能的要素后,就可以著手改變各要素來提升數(shù)據(jù)庫平臺(tái)的性能。
1.計(jì)算能力:x86化的今天,提升計(jì)算能力就是:增加CPU內(nèi)核數(shù)量或升級CPU主頻。
2.時(shí)延能力:加快數(shù)據(jù)從存儲(chǔ)介質(zhì)到CPU的速度,即提升數(shù)據(jù)讀寫時(shí)延,從以下三方面努力:
a)降低存儲(chǔ)介質(zhì)的讀寫時(shí)延:使用電子尋址的Flash顆粒來替換旋轉(zhuǎn)的機(jī)械磁頭,是降低存儲(chǔ)介質(zhì)讀寫時(shí)延最有效的方法。實(shí)踐中可結(jié)合數(shù)據(jù)吞吐量來確定是選擇SAS總線上的SSD盤還是選擇PCIE總線上的Flash卡。
b)降低網(wǎng)絡(luò)的傳送時(shí)延:網(wǎng)絡(luò)時(shí)延則可以通過InfiniBand網(wǎng)絡(luò)來解決,注意不要選擇IPoIB,而是要使用RDS,相比傳統(tǒng)UDP協(xié)議,網(wǎng)絡(luò)延遲至少減一半。通過SRP協(xié)議,利用RDMA技術(shù)在網(wǎng)絡(luò)層面?zhèn)魉蚐CSI指令和數(shù)據(jù),使得數(shù)據(jù)庫節(jié)點(diǎn)能夠像操作本地SCSI設(shè)備一樣讀寫遠(yuǎn)程的數(shù)據(jù),對于時(shí)延的降低,不是FC網(wǎng)絡(luò)能夠企及的。
c)擴(kuò)大存儲(chǔ)層的數(shù)據(jù)緩存大小:存儲(chǔ)層的數(shù)據(jù)緩存大小對時(shí)延也至關(guān)重要,如果有盡可能多的數(shù)據(jù)讀寫在緩存中進(jìn)行,就避免了數(shù)據(jù)下盤。緩存的大小以及緩存算法都對緩存命中率有直接的影響,這一點(diǎn)往往被忽略。除了單點(diǎn)緩存之外,分布式緩存技術(shù)也是非常重要的,通過分布式緩存技術(shù),可以避免單點(diǎn)緩存的局限性,擴(kuò)大緩存的全局能力,增加緩存規(guī)模,提高緩存命中率。
3.吞吐能力:拓寬數(shù)據(jù)通路的方法有兩種:使用高速InfiniBand網(wǎng)絡(luò)、使用分布式存儲(chǔ)。前者比較容易想到,實(shí)施也簡單,基于FDR 的56Gb/s InfiniBand解決方案可實(shí)現(xiàn)每秒1.37億條消息的信息通信速率,在16個(gè)計(jì)算節(jié)點(diǎn)上,性能表現(xiàn)比QDR 40Gb/s InfiniBand高出20%-30%,而與FC、萬兆和4萬兆以太網(wǎng)相比,性能更是領(lǐng)先了100%到300%,是最高效的計(jì)算和存儲(chǔ)互聯(lián)方案。對于后者,分布式存儲(chǔ),其好處在于不將數(shù)據(jù)集中存放在某幾塊存儲(chǔ)介質(zhì)上,而是將數(shù)據(jù)全部打散存放在多個(gè)存儲(chǔ)節(jié)點(diǎn)的許多個(gè)介質(zhì)上,這樣避免在大規(guī)模數(shù)據(jù)并發(fā)讀寫訪問時(shí),存儲(chǔ)介質(zhì)的單點(diǎn)能力成為數(shù)據(jù)讀寫的瓶頸,通過分布式的并發(fā)能力來提升數(shù)據(jù)讀寫吞吐能力。注意的是,一定要使用高性能低時(shí)延的分布式塊存儲(chǔ),分布式文件存儲(chǔ)是無法滿足性能要求的。
通過計(jì)算、時(shí)延、吞吐的三管齊下,通過使用SSD存儲(chǔ)介質(zhì)、InfiniBand網(wǎng)絡(luò)交換以及分布式存儲(chǔ),數(shù)據(jù)庫平臺(tái)的性能將得到極大提升。
未來為是何種模樣
高性能數(shù)據(jù)庫系統(tǒng)未來向著內(nèi)存化、云化的方向在不斷發(fā)展。SAP的HANA內(nèi)存數(shù)據(jù)庫,Oracle 12c的內(nèi)存特性,GemFire的分布式內(nèi)存數(shù)據(jù)緩存,以及Spark的內(nèi)存并行計(jì)算,都在昭示著內(nèi)存化的未來方向,其本質(zhì)還是通過內(nèi)存的高速讀寫與高速總線來解決時(shí)延和吞吐問題。
數(shù)據(jù)庫的云化,即DBaaS(數(shù)據(jù)庫即服務(wù)),其核心就是整合IT基礎(chǔ)設(shè)施中的硬軟件,實(shí)現(xiàn)簡單化、標(biāo)準(zhǔn)化和靈活性,提升可用性以及安全保障,同時(shí)降低成本。當(dāng)然,云化在性能和QoS方面也對IT基礎(chǔ)設(shè)施提出了更多增強(qiáng)性的挑戰(zhàn)。