英特爾® 傲騰? 持久內(nèi)存是Intel在2019年發(fā)布的一款革命性的產(chǎn)品,英特爾® 傲騰? 持久內(nèi)存是一種全新的內(nèi)存類型,其架構設計旨在從數(shù)據(jù)中心中汲取更多價值,重構數(shù)據(jù)中心內(nèi)存/存儲層次結構。不同于傳統(tǒng)的DRAM,英特爾® 傲騰? 持久內(nèi)存集大容量、經(jīng)濟性和持久性于一身,能夠支持數(shù)據(jù)中心多個應用場景。浪潮基于英特爾® 傲騰? 持久內(nèi)存做了大量的應用場景解決方案,覆蓋大數(shù)據(jù)分析、數(shù)據(jù)庫、云與虛擬化、分布式存儲等應用場景。為了幫助用戶通過更加靈活的架構來實現(xiàn)創(chuàng)新型的應用,助力企業(yè)實現(xiàn)性能突破,浪潮發(fā)布了基于英特爾® 傲騰? 持久內(nèi)存技術的Docker容器應用方案。
Docker是一個開源的應用容器引擎,基于Go語言并遵從Apache2.0協(xié)議開源。Docker可以讓開發(fā)者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的Linux機器上,也可以實現(xiàn)虛擬化。Redis是一個開源的基于內(nèi)存也可持久化的日志型、鍵值數(shù)據(jù)庫,鑒于其優(yōu)秀的性能而應用廣泛。云計算時代的到來,使開發(fā)者不必為了追求效果而配置高額的硬件,Docker改變了高性能必然高價格的思維定勢。Docker 與Redis的結合使用,其好處不言而喻。在基于Docker部署的Redis應用中,為了幫助企業(yè)化解因為數(shù)據(jù)快速增長所出現(xiàn)的應用瓶頸,浪潮進行了基于英特爾® 傲騰技術的Docker +Redis性能優(yōu)化實踐,通過將英特爾® 傲騰? 持久內(nèi)存作為Docker實例中Redis的內(nèi)存,相比于傳統(tǒng)的DRAM內(nèi)存方案,不僅可以大幅提升內(nèi)存容量或容器密度,而且實現(xiàn)了更高的成本效益。
挑戰(zhàn):化解Docker+Redis存在的性能和容量瓶頸
Docker與云的結合,讓云空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。將Redis部署在Docker中更是方便了Redis在云上的使用。雖然基于Docker部署應用被廣泛應用,但由于應用應對的是超大規(guī)模數(shù)據(jù)集的存儲需求,因此數(shù)據(jù)吞吐性能和延時性能的重要性不言而喻。要提升Docker + Redis的性能,可以從優(yōu)化內(nèi)存規(guī)劃、參數(shù)調優(yōu)等多個方面進行。但是,要想在控制總體擁有成本(TCO)的前提下,對Docker + Redis內(nèi)存進行最優(yōu)規(guī)劃并不是一件容易的事情。首先,Redis的可用內(nèi)存由Docker分配的內(nèi)存容量定義,而Docker的內(nèi)存容量受到存儲節(jié)點的內(nèi)存插槽數(shù)量、支持內(nèi)存容量等的極大限制,在內(nèi)存容量增長到一定程度后就會出現(xiàn)瓶頸。如果要進一步對于內(nèi)存容量進行擴展,企業(yè)在傳統(tǒng)上一般會采取兩種方法,第一種是使用大容量的內(nèi)存,第二種方法是擴展集群規(guī)模。
但是,這兩種方法都不具備良好的成本效益。對于前者來說,雖然很多Docker + Redis存儲節(jié)點支持的單條內(nèi)存容量理論上限是128GB,但是這種大容量的內(nèi)存普遍處于驗證階段,可獲得性不足,而且價格的提升遠高于其容量的提升,會帶來很高的成本壓力;對于后者來說,擴展Docker + Redis存儲節(jié)點固然能夠提升內(nèi)存池的容量,但是這些存儲節(jié)點的采購、空間占用、運維、供電無疑也會顯著抬升成本。
因此,如何打破現(xiàn)有存儲架構的限制,尋找一種創(chuàng)新的線上Docker + Redis內(nèi)存規(guī)劃方法,在顯著提升Docker + Redis性能的同時有效控制成本,也就顯得至關重要。
為了解決此問題,浪潮工程師團隊對于基于Docker部署的Redis應用行了分析,為了減輕內(nèi)存資源的壓力,持久性內(nèi)存(PM)被稱為存儲類內(nèi)存(SCM),在業(yè)界出現(xiàn),它不僅可以為Docker + Redis提供大容量內(nèi)存,擺脫單節(jié)點內(nèi)存大小的限制,同時還能有效降低成本。
要將存儲介質從內(nèi)存更換為高性能固態(tài)盤,一個重要的條件就是固態(tài)盤在IOPS、時延方面與內(nèi)存不能有太大的差距。在方案驗證的過程中浪潮發(fā)現(xiàn),英特爾® 傲騰? 持久內(nèi)存位于內(nèi)存和存儲介質之間(如圖1),能夠填補兩者間的性能和時延差距,對存儲層次模型進行重新劃分和定義。因此,浪潮決定使用英特爾® 傲騰? 持久內(nèi)存作為Docker + Redis內(nèi)存,并進行性能、成本等方面的驗證。
圖1
英特爾® 傲騰? 持久內(nèi)存是一種全新的內(nèi)存類型,不同于傳統(tǒng)的DRAM,其集大容量、經(jīng)濟性和持久性于一身,讀寫帶寬比NVME設備高數(shù)倍,并大幅降低延時問題。由于寫入方式不同,英特爾® 傲騰? 持久內(nèi)存也比Flash NAND更耐用,并通過高達512GB的單模塊容量,實現(xiàn)了遠超傳統(tǒng)DRAM的系統(tǒng)內(nèi)存容量。其從根本上改變了數(shù)據(jù)中心的彈性,將內(nèi)存數(shù)據(jù)庫重啟時間從以前的幾天、幾小時縮短到現(xiàn)在的幾分鐘甚至幾秒鐘,并提供經(jīng)濟實惠的內(nèi)存空間,將系統(tǒng)內(nèi)存容量擴展到前所未有的水平。
英特爾® 傲騰? 持久內(nèi)存擁有兩種特殊的運行模式——App Direct 模式和內(nèi)存模式。具體來看,采用App Direct 模式,經(jīng)過專門調試的應用程序可以從產(chǎn)品固有的持久性中充分獲取價值,同時獲得更大的容量;在內(nèi)存模式下,在受支持的操作系統(tǒng)或虛擬環(huán)境中運行的應用程序可將該產(chǎn)品用于易失性存儲,在無需重寫軟件的情況下,有效利用高達512GB的內(nèi)存模塊帶來的附加系統(tǒng)容量,在大型內(nèi)存池中獲得新的洞察。
在實際的方案部署中,浪潮使用了英特爾® 至強® 第二代可擴展處理器與英特爾® 傲騰? 持久內(nèi)存組成強強組合,代替Docker + Redis中DRAM緩存,改善Docker + Redis內(nèi)存容量,以支撐云、數(shù)據(jù)庫、高性能計算、內(nèi)存分析和內(nèi)容分發(fā)網(wǎng)絡等關鍵數(shù)據(jù)工作負載。
方案驗證:英特爾® 傲騰? 內(nèi)存性能和成本優(yōu)勢顯著
為了測試英特爾® 傲騰? 持久內(nèi)存作為Docker + Redis緩存的性能,浪潮決定分別測試基于英特爾® 傲騰? 持久內(nèi)存/ DRAM內(nèi)存兩種配置下的性能對比。
在實際測試中,浪潮將英特爾® 傲騰? 持久內(nèi)存設置為內(nèi)存模式運行,并依據(jù)以下硬件配置來搭建了測試方案(如表1)。測試使用1臺服務器部署搭載Redis應用的Docker實例。
表1
在至關重要的內(nèi)存方面,英特爾® 傲騰? 持久內(nèi)存方案中每個數(shù)據(jù)節(jié)點使用192GB(12*16GB)的DRAM,并使用1.5TB(12*128GB)的英特爾® 傲騰? 持久內(nèi)存作為Docker + Redis的內(nèi)存設備;DRAM方案中使用768GB(24*32GB)內(nèi)存作為Docker + Redis內(nèi)存設備。
本次進行了兩種場景測試,場景一:在兩個方案中分別使用內(nèi)存容量的80%,進行多種讀寫比例性能測試。場景二:測試在兩個方案內(nèi)存用盡情況下,可容納的容器個數(shù)。
從場景一結果可以看出(吞吐量結果如圖2,平均延時結果如圖3)。英特爾® 傲騰? 持久內(nèi)存方案可以容納遠超于DRAM方案的數(shù)據(jù)容量,同時性能表現(xiàn)出色。在吞吐量方面兩種方案性能相當,英特爾® 傲騰? 持久內(nèi)存方案吞吐量可達DRAM方案90%以上。在平均延時方面,兩種方案相差不大,都能保持在1ms之內(nèi)。
圖2
圖3
從場景二結果可以看出(容器實例個數(shù)如圖4,吞吐量結果如圖5)。英特爾® 傲騰? 持久內(nèi)存方案可容納98個docker實例,DRAM方案可容納50個docker實例,英特爾® 傲騰? 持久內(nèi)存方案約為DRAM方案的2倍,同時性能表現(xiàn)出色。在內(nèi)存容量接近用盡時,英特爾® 傲騰? 持久內(nèi)存方案可以達到DRAM方案性能90%左右,特別是讀操作比較多時,性能表現(xiàn)為DRAM方案的95%以上。
圖4
圖5
效果:大幅改善基于Docker部署應用的性能與成本表現(xiàn)
從測試結果可以看出,通過將基于Docker部署的Redis應用緩存由傳統(tǒng)的DRAM內(nèi)存替換為英特爾® 傲騰? 持久內(nèi)存,可以在保證性能的情況下,成倍提升數(shù)據(jù)容量或者容器數(shù)量。之所以會有如此顯著的提升效果,很大程度上是因為英特爾® 傲騰? 持久內(nèi)存支持的總容量遠高于 DRAM 內(nèi)存。
尤為重要的是,英特爾® 傲騰? 持久內(nèi)存方案比DRAM方案內(nèi)存池容量可以增加1.25倍,容器個數(shù)可以增加1倍,換言之,如果企業(yè)在需要保證性能的情況下想增大數(shù)據(jù)容量或容器個數(shù),那么使用英特爾® 傲騰? 持久內(nèi)存將帶來極大的成本節(jié)約,這在當前企業(yè)數(shù)據(jù)爆發(fā)式增長、在大數(shù)據(jù)方面的投入逐漸增大的背景下,顯然具有重要意義。