DAL是X國一家大型遠(yuǎn)洋運(yùn)輸公司,業(yè)務(wù)包含航運(yùn)、倉儲、陸運(yùn)、貨物裝卸、船舶管理等。白天營業(yè)時間,大約處理10W筆左右的貨物交易訂單。夜間非營業(yè)時間,需要進(jìn)行數(shù)據(jù)整合、數(shù)據(jù)備份等操作,用于制定倉儲計劃、船舶調(diào)度計劃。為了不影響第二天的日間營業(yè),夜間操作必須在凌晨6點(diǎn)之前全部完成。2013年初,DAL計劃增加至北美的航線,預(yù)計每天交易訂單數(shù)量會增長到15W筆。當(dāng)前系統(tǒng)無法在規(guī)定時間內(nèi)消化15W筆交易數(shù)據(jù),而交易數(shù)據(jù)每延遲一天,DAL將損失近10萬歐元。通過分析,主要性能瓶頸出現(xiàn)在數(shù)據(jù)庫與磁盤的并發(fā)訪問量和響應(yīng)時延上。在業(yè)務(wù)壓力增大時,原存儲系統(tǒng)IO時延急劇上升,在峰值時期IOPS達(dá)到20W左右,此時存儲IO平均時延高達(dá)8ms。高時延IO導(dǎo)致數(shù)據(jù)庫運(yùn)行中80%的時間被用于IO等待,從而導(dǎo)致批處理時間過長。要徹底解決數(shù)據(jù)庫性能問題,必須讓存儲系統(tǒng)在高IOPS壓力的同時將時延控制在一個比較低的水平。最終,將15W筆交易訂數(shù)據(jù)處理時間縮短至規(guī)定時間內(nèi),支撐業(yè)務(wù)順利擴(kuò)張。
尋找IT效率提升的最佳途徑
隨著企業(yè)數(shù)據(jù)中心所承載的業(yè)務(wù)越來越多,數(shù)據(jù)越來越頻繁的流動和使用,對更低時延,更高服務(wù)級別保證等特性的訴求也將愈發(fā)明顯。各行各業(yè)的應(yīng)用千差萬別,無論是全面的企業(yè)資源計劃,還是用戶關(guān)系管理,抑或是企業(yè)生產(chǎn)過程中的采購、生產(chǎn)、分銷等流程,企業(yè)管理中的財務(wù)、人事、分析決策,都離不開成熟度的高性能IT系統(tǒng)支撐。在公共事務(wù)領(lǐng)域,同樣也經(jīng)歷著這樣的變化。隨著云計算和服務(wù)器虛擬化進(jìn)程的加速,IT設(shè)備需要從滿足從單一應(yīng)用走向面向多業(yè)務(wù)整合。用戶對等待的時間和結(jié)果的可獲得性都有越來越高的要求,這對企業(yè)IT系統(tǒng)的事務(wù)響應(yīng)時間、并發(fā)處理能力、查詢作業(yè)的時間長度提出了苛刻挑戰(zhàn),越來越多的用戶開始關(guān)心IT系統(tǒng)的效率優(yōu)化?偸窍氡M各種辦法提升性能,比如增加服務(wù)器的數(shù)量、提升服務(wù)器配置、讓服務(wù)器的負(fù)載低于10%等等。這些手段無一例外都是習(xí)慣性加強(qiáng)服務(wù)器以滿足應(yīng)用數(shù)據(jù)庫性能需求的思維定勢,使得大部分用戶環(huán)境中計算能力超出存儲能力,卻沒有真正消除性能瓶頸。華為通過對近百個有類似問題的用戶系統(tǒng)的調(diào)查顯示,約87%的系統(tǒng)性能問題出現(xiàn)在存儲子系統(tǒng)與應(yīng)用數(shù)據(jù)庫的交互上。換言之,存儲子系統(tǒng)的響應(yīng)時延、并發(fā)訪問量決定了應(yīng)用系統(tǒng)的響應(yīng)時延與并發(fā)量,成為整個系統(tǒng)的性能瓶頸。
存儲系統(tǒng)響應(yīng)時間,即時延,正變成一個用戶關(guān)注的指標(biāo),特別是對于很多企業(yè)關(guān)鍵應(yīng)用(mission-critical business)來講,決定最終用戶的體驗(yàn),不僅僅看IO吞吐量,時延也是非常關(guān)鍵的指標(biāo)。通過提供穩(wěn)定的低時延保證,一方面可以保證和改善用戶體驗(yàn),另一方面能夠減少服務(wù)器的數(shù)量,還會在空間、能耗等方面給用戶帶來更多價值。反過來,時延的改善能促進(jìn)應(yīng)用系統(tǒng)對IOPS的需求。對于一個數(shù)據(jù)密集型的應(yīng)用,如果數(shù)據(jù)訪問的時延降低了90%,那么客戶對IOPS的需求就可能會最多提升10倍。特別是針對OLTP、OLAP這些應(yīng)用,這樣的情況會表現(xiàn)得非常明顯,收益也會是巨大的。另外,高性能計算、虛擬桌面等領(lǐng)域?qū)Ω逫OPS也有很大的需求。
特別強(qiáng)調(diào)一點(diǎn),這里講的是時延保證,即應(yīng)用響應(yīng)的最大時延,換算成專業(yè)術(shù)語是99%以上I/O的時延。而非傳統(tǒng)意義上的平均時延。99%的時延比平均時延對應(yīng)用有更大的價值,原因在于當(dāng)前大多數(shù)應(yīng)用都是在線數(shù)據(jù)密集型應(yīng)用,一個用戶的請求會產(chǎn)生多個并發(fā)的訪問,影響最終對用戶應(yīng)用的是這些并發(fā)訪問中最慢的那個響應(yīng)。99%的時延正好可以體現(xiàn)這一要求,而平均時延則顯得沒有多少意義。這就是業(yè)界對99%的時延強(qiáng)烈關(guān)注的主要原因。如下圖所示,隨著業(yè)務(wù)壓力不斷增長,存儲系統(tǒng)處理的IO數(shù)目不斷增多,而在面對大IO壓力(如百萬級IOPS)的情況下仍能保持持續(xù)穩(wěn)定的低時延才是支撐應(yīng)用快速響應(yīng)的關(guān)鍵因素。
<1ms穩(wěn)定時延--一扇即將開啟的大門
那么對用戶來說,時延究竟要低到什么程度才能更好的滿足應(yīng)用的需求?1ms的時延已經(jīng)成為一個分水嶺,成為閃存存儲系統(tǒng)和磁盤存儲系統(tǒng)的重要差異,系統(tǒng)必須要設(shè)計提供一種良好的分布式并發(fā)機(jī)制,解決大規(guī)模并發(fā)訪問下低時延的保證問題。當(dāng)我們將時延降低1-2個數(shù)量級時,我們仿佛進(jìn)入了一個全新的世界。原來感覺很快的處理,現(xiàn)在可能已經(jīng)變得慢起來。就像汽車與飛機(jī),速度也就差1個數(shù)量級,但它們在設(shè)計中關(guān)注完全不同的問題。當(dāng)我們將存儲時延降低至300-500us時, iscsi協(xié)議帶來的接近100us的延遲已經(jīng)變得難以接受,而這在傳統(tǒng)的10ms總時延的設(shè)備上根本無需關(guān)注。微秒級時延讓我們進(jìn)入了新的世界,我們需要以探索的精神,重新審視一下請求處理的各個環(huán)節(jié),硬件和軟件、架構(gòu)和協(xié)議,使得每一個處理達(dá)到us級的精準(zhǔn)控制。
傳統(tǒng)以磁盤為中心的存儲,時延最大出現(xiàn)在磁盤數(shù)據(jù)的訪問,要想實(shí)現(xiàn)微秒級的時延目標(biāo),是完全不可能的事情。但隨著閃存的規(guī)模應(yīng)用,大量關(guān)鍵數(shù)據(jù)可以放置到SSD上,完全可以使得數(shù)據(jù)的訪問小于1ms。SSD是依靠低時延來支撐高IOPS的,這與堆砌HDD來增加并發(fā)能力進(jìn)而提高IOPS的做法,是完全不同的,而事實(shí)上低時延更能夠幫助業(yè)務(wù)系統(tǒng)提升性能,并減少在存儲基礎(chǔ)設(shè)施上的投資。SSD內(nèi)部的控制器支持多通道并發(fā)訪問后端的NAND Flash,所以SSD在支持低響應(yīng)時延的同時也支持真正的多并發(fā),從而將性能發(fā)揮出來。
時延問題的本質(zhì)是存儲介質(zhì)的問題,如果選擇HDD,時延就只能到達(dá)10ms水平;如果選擇閃存,則可以控制在1ms,乃至300us水平;如果選擇DRAM,則可以控制在100us,最佳可以控制的10us。盡管介質(zhì)是最為本質(zhì)的選擇,但最終結(jié)果往往并不是僅僅選擇合適的介質(zhì)就能完全決定的。時延的問題是一個相當(dāng)復(fù)雜的問題,介質(zhì)只是里面最關(guān)鍵的一個環(huán)節(jié),一個存儲請求,從IO接口進(jìn)入存儲系統(tǒng),到最后從IO接口返回給用戶,要經(jīng)過多個臨界資源的處理(CPU、鎖、Cache、存儲介質(zhì)、內(nèi)聯(lián)網(wǎng)絡(luò)、IO接口等等),要進(jìn)入多個隊(duì)列排隊(duì),每次排隊(duì)和處理都會帶來時延。再加上優(yōu)先級的爭奪,OS調(diào)度帶來的干擾,特別是在要求越來越高的時延要求下,軟件處理和協(xié)議棧開銷也將成為被重點(diǎn)關(guān)注的對象。
閃存與系統(tǒng)深度融合--微秒級時延的設(shè)計思想
首先,必須要針對閃存的特性設(shè)計,而不僅僅是在傳統(tǒng)陣列的設(shè)計上更新閃存盤。眾所周知,傳統(tǒng)陣列是圍繞著緩存(Cache)展開的,一般使用比較節(jié)省內(nèi)存、但是操作相對較為耗時的樹形數(shù)據(jù)結(jié)構(gòu)來作為cache的索引表,由于HDD的速度并不夠快,通過Cache技術(shù),傳統(tǒng)陣列能夠提供讀命中,以降低讀時延;能夠提供回寫,以降低寫時延。這種設(shè)計思路導(dǎo)致如果我們直接將SSD插入傳統(tǒng)陣列,只能發(fā)揮SSD的一小部分性能。而對于閃存陣列,情況則發(fā)生了變化。SSD的時延大約只有數(shù)十到數(shù)百us,比HDD低出1個數(shù)量級以上。在這種情況下,針對傳統(tǒng)存儲陣列所設(shè)計的索引表所引入的時延,變得突出起來,會極大地影響SSD性能的發(fā)揮。于是在閃存陣列系統(tǒng)中,必須要選擇一種不同于傳統(tǒng)存儲陣列的數(shù)據(jù)結(jié)構(gòu)來作為cache索引表。新的數(shù)據(jù)結(jié)構(gòu)可以適當(dāng)多占一些內(nèi)存,但是操作(查找、插入、刪除)時延一定要很低。雖然這會導(dǎo)致較高的CPU占用率和內(nèi)存占用率,但為了得到更好的性能,我們不能也無需在閃存陣列上設(shè)計復(fù)雜的Cache,應(yīng)盡量釋放CPU來處理更多的IO。由此看來,系統(tǒng)的瓶頸點(diǎn)在不同的系統(tǒng)上發(fā)生了遷移,于是在設(shè)計和開發(fā)時,需要向關(guān)鍵路徑要時間、向非關(guān)鍵路徑要資源。傳統(tǒng)存儲陣列是拿時間換空間,而閃存陣列是拿空間換時間。
另一方面,對于HDD,隨機(jī)訪問和順序訪問的數(shù)據(jù)吞吐量差異超過100倍,而對于SSD,其隨機(jī)訪問和順序訪問的吞吐量差異只有2-4倍。因?yàn)镠DD的順序訪問和隨機(jī)訪問之間存在巨大的數(shù)據(jù)交換速率差異,因此傳統(tǒng)存儲陣列中的各種各樣cache算法,都是圍繞如何盡量順序訪問HDD來設(shè)計的。而SSD的順序訪問和隨機(jī)訪問之間,數(shù)據(jù)交換速率差異沒有那么大,情況發(fā)生了巨大的變化。這反映了一個事實(shí):適用于HDD的cache淘汰算法,不一定適用于SSD。實(shí)際上,在閃存陣列中,我們更關(guān)心的問題是,cache中的數(shù)據(jù)是否做到了按閃存頁面對齊和補(bǔ)滿、是否有效防止了一次性訪問數(shù)據(jù)對cache造成了污染、選擇淘汰對象時的開銷是否合理。通過基于SSD的專利淘汰算法,能夠有效識別并區(qū)分順序訪問產(chǎn)生的數(shù)據(jù)、臨時訪問產(chǎn)生的數(shù)據(jù)、熱數(shù)據(jù),并迅速找出低價值數(shù)據(jù)進(jìn)行淘汰,同時深度配合華為自研SSD顆粒特性,選擇臟數(shù)據(jù)下刷到SSD時,盡量匹配SSD的閃存頁面粒度和ECC校驗(yàn),從而有效減小SSD的寫懲罰和寫放大。
隨著云計算和服務(wù)器虛擬化進(jìn)程的加速,前端服務(wù)器的整合帶來了后端存儲網(wǎng)絡(luò)和存儲設(shè)備的整合,整合的背后,導(dǎo)致存儲設(shè)備需要從滿足單一應(yīng)用走向面向多業(yè)務(wù)的整合。存儲行業(yè)正在發(fā)生深刻地革命性的變化,云計算推動了數(shù)據(jù)中心的整合,也將推動存儲走向融合和統(tǒng)一。閃存作為新介質(zhì),正在承擔(dān)主存的使命,驅(qū)動著存儲架構(gòu)的變化,向用戶和應(yīng)用提供新的存儲評價指標(biāo)——一致性的低時延。華為通過將閃存與系統(tǒng)深度融合,完全圍繞著閃存特點(diǎn)來設(shè)計,充分發(fā)揮閃存高IOPS、低時延的優(yōu)勢、規(guī)避閃存擦寫次數(shù)有限的劣勢,力求為企業(yè)用戶提供百萬級IOPS、微秒級穩(wěn)定時延的存儲服務(wù),滿足企業(yè)數(shù)據(jù)中心的長期需求。