眾所周知,內存與存儲之間存在巨大的性能鴻溝,兩者的性能幾乎有數百萬倍的差距。
但在強調用戶體驗的互聯網行業,每一秒的延遲可能都會導致用戶流失,為了提升數據訪問性能,是否可以將數據庫放置到內存當中?這就是內存數據庫Redis誕生的背景,Redis在一定程度上緩解了性能需求,提升了用戶體驗。
但是另外一個問題隨之誕生。
目前主流的服務器內存基本都是DRAM,縱觀數十年來的DRAM發展情況,再結合未來發展趨勢,比如DRAM的頻率從十年前DDR3的1033MHz,到現在的DDR4的3200MHz以及未來的DDR5,性能確實越來越高。但是容量呢?
DRAM內存的單位容量幾乎沒有太大的起伏,盡管服務器內部使用時的DDR內存從主流的16GB過渡到32GB,但單條DDR內存的容量始終保持在最大128GB,多少年來,幾乎沒有變化。
當然,服務器隨著處理器的更新換代而不停地更新,單顆處理器可支持的內存通道數量從原來的4通道發展到現在的6通道、8通道,在一定程度上增加了可部署的內存容量。但這依然“治標不治本”,一則服務器的物理尺寸是業內標準的,很難變動,這意味著物理空間受限,很難設計更多的內存插槽;二則內存的單位成本雖然根據市場波動略有起伏,但總體變化不大,容量越大的內存也意味著成倍的成本增加。
這個看似無解的問題,隨著IntelOptane中文名:傲騰)系列產品的發布而出現了曙光。IntelOptane用全新的3DXPoint材質,有類似相變存儲的特性。其主要意義可以用兩點來概括:高性能與非易失性。
Intel率先推出了傲騰SSD,與傳統的NANDSSD相比,其擁有均衡的讀寫性能,而延遲則低一個數量級,讓市場領略到了傲騰的高性能。但SSD通常使用PCIe通道,PCIe技術的性能并不足以完全發揮出Optane的性能優勢。因此,Intel又推出了OptanePresistentMemory(傲騰持久內存,簡稱PMem)。
傲騰持久內存是一個全新的產品,其填補了內存與主存儲之間的性能鴻溝。
傲騰持久內存所帶來的現實意義,其延遲在納秒級別,遠遠小于NANDSSD的微秒級別延遲,可以為應用增加一個新的存儲層,極大地提升應用響應速度
相比于CPU訪問內存的延遲,訪問傲騰持久內存的延遲肯定要高出很多。但傲騰持久內存的意義在于,其容量非常大,比如第一代傲騰持久內存PMem100的最小容量為128GB,后又陸續發布750GB與1.5TB的產品,單條傲騰持久內存的容量遠超傳統DRAM內存。
而且傲騰持久內存的意義還在于,具備非易失性存儲特性,這是DRAM內存所沒有的,這意味著即使在掉電的情況下,傲騰持久內存依舊擁有保存數據的能力。
正因為傲騰持久內存同時具有DRAM的高性能和NANDSSD的非易失性存儲特性,使得其使用也非常靈活,既可以作為DRAM內存的補充,增大系統內存容量(內存模式);又可以作為直接數據存儲(應用直連模式);還可以一部分用作內存,一部分用作數據持久存儲(混合模式)。
傲騰持久內存擁有DRAM的特性,使得其可以作為傳統DRAM內存的補充,極大地增大應用或系統可用的內存空間,且無需應用任何改動。這天然就是內存數據庫的最佳載體。比如在SAPHANA解決方案中,就已經認證使用了傲騰持久內存產品。
而現在,新浪也考慮使用傲騰持久內存來承載其Redis數據庫,為用戶帶來更快、更好的訪問體驗。為了驗證傲騰持久內存替代傳統內存能否真的能夠滿足線上業務的需求,新浪在使用傲騰持久內存之前,部署了一套貼近真實應用環境的Redis內存數據庫環境,使用傲騰持久內存作為內存(內存模式),利用memtier_benchmark工具對Redis實例進行壓力測試,評估傲騰持久內存在Redis數據庫環境下的性能表現。
新浪用于部署Redis數據庫環境的硬件平臺。采用近乎相似的硬件,圖左使用傲騰持久內存來增大系統內存容量,圖右的硬件平臺則采用傳統的DRAM方案
測試中所使用的memtier_benchmark軟件是RedisLabs推出的一款命令行工具,它能夠產生各種各樣的流量模式,可以對Memcached和Redis內存數據庫實例進行基準性能測試,其測試結果已經成為業內內存數據庫性能評估的事實標準。
在測試場景一中,根據實際業務需求對memtier_benchmark的測試流進行調節,模擬數據塊大小為512KB尺寸的混合讀寫場景,讀寫比例為1:2,分別測試傲騰持久內存和DRAM內存的讀寫性能以及平均響應延遲。
需要注意的是,在測試中選用了512KB這一尺寸較大的數據塊,其原因在于,當傲騰持久內存添加到服務器系統中,并使用內存模式時,原來的DRAM內存將作為傲騰持久內存的緩存,當較小的數據塊訪問,CPU可能實際訪問的就是DRAM內存,其性能和延遲與使用DRAM內存時幾乎沒有區別。因此在測試時選用了更大尺寸的測試數據塊,以評估傲騰持久內存和傳統DRAM內存的性能差異。
上圖即為傲騰持久內存(AEP)和傳統DRAM內存(RAM)的Redis性能對比圖,從圖中可以看到,即使是在512KB較大尺寸的數據塊混合讀寫時,盡管DRAM的性能更高,但差距并不明顯。而且隨著壓力測試時間的不斷持續,傲騰持久內存與DRAM內存之間的性能差距有變小的趨勢,這說明傲騰持久內存完全有能力替代傳統DRAM內存。
傲騰持久內存與傳統DRAM內存在Redis數據庫測試中的平均延遲曲線圖?梢钥吹,盡管傲騰持久內存的延遲略高,但并不明顯,僅有大約5%的差距,這說明傲騰持久內存擁有良好的性能穩定性,可以作為傳統DRAM內存的補充。
在實際應用環境中,IO數據塊的尺寸是不同的,通常有多種不同大小的數據塊并發訪問。因此,根據這一實際情況,在接下來的測試中采用了兩種尺寸的數據塊,分別為4KB和512KB,兩種尺寸的數據塊同時對Redis數據塊進行并發讀寫測試,并按不同混合比例(20%、40%、50%、60%與75%)下的性能進行統計,并對比。
從上圖可以看出,在不同混合比例的大小數據塊壓力測試中,盡管傲騰持久內存的平均延遲稍高,但幾乎與傳統DRAM內存沒有明顯差異。
同時,測試還對由多個Redis內存數據庫組成的集群進行了壓力測試,結果如下:
傲騰持久內存的性能表現盡管會稍低傳統DRAM內存,但差異并不明顯。這意味著兩者的性能很接近,在應用層面并不會造成明顯的差異,進而導致不良的用戶體驗。這也意味著傲騰持久內存完全能夠替代傳統DRAM內存。
而相比于容量發展幾乎穩定的DRAM內存而言,傲騰持久內存即將推出第二代PMem200系列產品,相比第一代傲騰持久內存,其單條性能增加至少25%,同時在新一代Intel處理器中,將支持8通道內存,這意味著在單臺服務器中可使用的傲騰持久內存數量進一步增加,據估計,單機性能將有50%的性能增長。
除了性能之外,傲騰持久內存的容量也將進一步增長,其擁有類似NANDSSD的容量發展路線。這意味著傲騰持久內存不僅容量增長,性能也會隨之增長。替代傳統DRAM內存大有可為。