一樣的錢,6倍的效能,就問你心不心動

“百度BigSQL可為使用者提供高效能的即席查詢服務,它需要大記憶體在計算節點本地快取熱資料,以減少DFS I/O對查詢效能的影響。我們使用來自英特爾的傲騰持久記憶體,在快取質量得到保證的同時,極大地提升了叢集的處理能力,獲得了明顯的TCO收益。”

——百度資深系統工程師黎世勇

在近年來全球資料規模指數級增長的大背景下,如何滿足使用者對服務響應時間的要求成為了擺在眾多企業,特別是科技企業面前的嚴峻挑戰。別看只是響應晚一秒鐘,但企業很有可能流失數以萬計的客戶,因此沒有哪家企業敢對客戶體驗掉以輕心。

這也是頂級網際網路企業百度面臨的苦惱。用黎世勇的話說,客戶體驗是我們的第一KPI,響應時間是客戶體驗好不好最直接的體現之一。為此,百度這些年一直在尋找、嘗試、開發更好的技術來改善使用者體驗。

本文要講的百度聯合英特爾進行的一系列技術創新,便是其為使用者獲得更好體驗不斷努力的一個縮影。

1

軟硬一起抓

Apache Spark是大規模資料處理的快速通用計算引擎,當前應用極其廣泛。Spark SQL模組是Apache Spark專門為大型資料中心結構化資料處理開發的功能模組。百度BigSQL資料處理平臺基於Spark SQL開發,在效能上做了很多最佳化,開發了不少新功能。

互動式查詢能力就是BigSQL在效能最佳化方面體現非常明顯的一個例證。關於互動式查詢的重要性,相信不用多解釋了,服務響應快不快,跟它緊密相關。為實現次秒級的互動式查詢響應,百度和英特爾在軟硬兩個層面都下了不少功夫。

軟體層面,百度聯合英特爾開展了Spark平臺最佳化分析包(OAP)專案合作。其中,OAP 能很好地利用列式資料以及選定列上的使用者定義索引,提高資料檢索效率。與此同時,OAP還採用了細粒度的記憶體資料快取策略,以此來消除磁碟和網路中的 I/O 瓶頸,將效能最大化。

硬體層面,百度與英特爾合作,利用英特爾傲騰持久記憶體替代部分DRAM,部署更具成本效益的解決方案。

百度內部測試顯示,與使用傳統純記憶體的解決方案相比,使用傲騰持久記憶體可有效提高OAP的快取效能及成本效益,大幅提升業務成效,例如幫助百度即席查詢服務圖靈減少工作負載、降低平均查詢延時等。

具體如何實現的呢?兩步走。

2

把常用的資料放在更快的儲存裡

OAP的核心是使用索引和快取技術來加快互動式查詢響應的速度。

一樣的錢,6倍的效能,就問你心不心動

當查詢具有非常特定的篩選條件時,OAP可以在符合條件的列上建立索引。透過與列資料檔案並排建立與儲存完整的B+Tree索引,OAP可快速搜尋B+Tree 索引來識別目標行,同時跳過後端儲存(例如HDFS)上不必要的資料掃描。由於索引檔案與原始資料檔案保持分離,在建立或刪除索引時均無需重寫原始資料檔案。

在此基礎之上,OAP還藉助快取來最佳化索引和資料訪問程序。透過將索引和資料快取在記憶體中,來提升索引載入和資料掃描速度,縮短從分散式檔案系統讀取時磁碟和網路的I/O時間。此外,透過將索引和資料單獨快取,其快取清除和記憶體空間管理實現了彼此獨立。

一樣的錢,6倍的效能,就問你心不心動

由於採用列式快取,OAP 只需快取查詢所需的列。基於最近最少使用(LRU)策略,當快取達到最大容量時,那些最近最少使用的資料項將被淘汰,為快取最新資料釋放空間。依照該策略,BigSQL啟用了一個高階快取管理器,可以主動填充熱點列,並清除快取中不再需要的列。

3

讓更快的儲存空間再大一點

顯而易見,OAP的本質是將熱資料放在更快的記憶體中,從而起到加速的目的。但由此也帶來了新的問題:一、記憶體是不可能無限擴充套件的,二、超過一定記憶體容量後,成本是呈指數級上漲的。

這也是硬體層面採用傲騰持久記憶體的根本出發點。眾所周知,傲騰持久記憶體是一種將高容量、經濟實用性和資料永續性相結合的突破性技術,其擁有兩大特點:一、大容量和更低的成本,二、適合順序讀。

進一步展開,傲騰持久記憶體擁有兩種工作模式:記憶體模式和應用直接訪問模式。在“記憶體模式”下,應用程式能利用傲騰持久記憶體作為擴充套件的易失性系統記憶體,無需重新編寫軟體,而DRAM將起到快取的作用。在“應用直接訪問模式”下,經過專門改進的應用程式可獲得更大的永續性容量。

鑑於OAP快取具有索引和輸入資料的特定目的,因此OAP採用了“應用直接訪問模式”。

為更好地利用傲騰持久記憶體代替 DRAM,英特爾還對OAP進行了擴充套件,加入記憶體管理器外掛,並採用支援傲騰持久記憶體的記憶體管理器。這樣一來,使用者可以在DRAM和傲騰持久記憶體間自由切換,甚至兩者兼用,例如使用 DRAM 快取索引,而使用傲騰持久記憶體快取資料。

除此之外,為確保傲騰持久記憶體與百度獨特的OS環境無縫整合,百度還與英特爾在硬體、作業系統和庫等領域進行了一系列合作最佳化。

4

6倍效能提升

為驗證OAP專案及傲騰持久記憶體的效能表現,百度分兩步進行了多次評估和內部測試:第一步是決策支援基準測試,第二步真實查詢測試。

一樣的錢,6倍的效能,就問你心不心動

在決策支援基準測試中,首先將資料集大小控制為1TB,並使用相同容量的DRAM和傲騰持久記憶體。測試結果表明,兩者都能容納所有的快取資料,傲騰持久記憶體的效能略微低於 DRAM(11。7%),但成本卻明顯更低。

當資料集達到 3TB,且使用相同成本的DRAM和傲騰持久記憶體時,前者的容量已不足以快取所有資料。相比之下,傲騰持久記憶體不僅能快取所有的資料,效能也超出DRAM 高達 6 倍。

此時的 DRAM 效能較差是因為:當資料規模大大超過快取容量時,DRAM 需要頻繁地從後端儲存讀取資料,由此延長了響應時間。決策支援基準測試清楚的表明,在成本相同的情況下,傲騰持久記憶體可提供比DRAM更高的容量和更出色的效能。

測試的第二階段使用百度線上業務的真實查詢資料,依然基於以上兩種情況,但方法略有不同。在第一種情況下,DRAM和傲騰持久記憶體被設定為快取50%的常用資料列, 此時PMem的快取速度僅比DRAM低約12%,但由於成本優勢更為顯著,因此整體價效比更高。

在第二種情況下(即DRAM和傲騰持久記憶體成本相同),只有傲騰持久記憶體擁有足夠容量來快取所有熱點資料,且效能較DRAM高出22%,同時避免了30%不要的底層系統I/O請求。

資料不會說謊,在百度BigSQL 中用傲騰持久記憶體取代DRAM顯然是更具成本效益的快取解決方案。目前,百度已在BigSQL中成功部署了傲騰持久記憶體,並以此為基礎優化了百度即席查詢服務圖靈。在傲騰持久記憶體的加持下,圖靈叢集的工作負載降低了30%,平均查詢延時降低了20%,每個傲騰持久記憶體伺服器例項Spark/OAP的效能提高了50%,而成本僅增加了20%。

5

傲騰,還有更多用武之地

除了為Spark SQL輸入資料提供快取加速外,傲騰持久記憶體高容量和高頻寬的優勢還能在基於Spark的機器學習和深度學習場景中發揮更大作用,因為這些場景要求在規模龐大的資料集上反覆進行多次計算。另外,Spark shuffle可以透過最佳化,使用RDMA技術訪問遠端節點上的傲騰持久記憶體並將其用作隨機儲存,進一步減少隨機延遲並提高效能。

未來,百度也將與英特爾攜手為Spark進行一系列更深度的最佳化。

事實上,不僅是Spark,包括Redis、Oracle、Aerospike等或開源、或商業軟體透過使用傲騰持久記憶體都有不同程度的效能提升、成本下降,無數的客戶已經從中受益。

總結全文,數字世界正在來臨,資料爆炸式增長給企業帶來了新的挑戰,當下企業不僅要有能力處理大量增長的資料,而且要更快速的處理這些資料。這是傲騰的價值所在,提供更快速度的同時,還讓你負擔得起。

TAG: 記憶體傲騰快取持久DRAM