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