張 偉
隨著物聯網、云計算、人工智能等技術的高速發展,這些技術的發展都離不開大數據技術,大數據技術幾乎成為新時代各個領域的研究基礎。大數據具有數據體量巨大、數據類型繁多、價值密度低、數據增長速度快、以及高時效性等顯著特征,針對大數據的諸多特點,需要建立大數據處理生態體系,包含數據采集、數據存儲、數據管理、數據抽取與轉換、數據查詢與分析、數據聚合、數據表示等多個層面,并對大數據的處理提出了高可擴展、高可靠、高性價比、高適應能力的需求。此外,如今的AlphaGO、無人駕駛、智能機器人等新型實時型大數據應用對于實時、交互式分析等需求提出更高的要求。
然而,以計算為中心的系統架構難以有效應對新型實時型應用對于實時、交互式分析的復雜業務訴求。同時,大數據所表現出的高速增長、體量驟增、數據類型差異大等特點,進一步加劇了以計算為中心的傳統計算模式所面臨的內存容量有限、I/O壓力大、緩存命中率低、并發控制困難、數據處理總體性能較低等諸多問題,難以取得性能、能耗與成本的最佳平衡,使得目前的計算機系統無法處理PB級以上的大數據。總的來看,大數據是一種以數據為中心的數據密集型技術,現有的以計算為中心的技術體系難以滿足大數據的應用需求,急需一種以數據為中心的計算架構以滿足大數據處理的需求。
隨著新型非易失性存儲器件的快速發展和成本的不斷降低,客觀上為以數據為中心的大數據處理模式提供了新的思路。內存計算技術應運而生,內存計算能夠解決新型實時應用所要求的數據處理速度以及時效性的問題。在內存計算模式下,所有的數據操作均在內存中進行,包括數據存儲、查詢、處理等。CPU直接從內存讀取數據,進行實時的計算和分析,減少了磁盤數據訪問,降低了網絡與磁盤I/O的影響,大幅提升了計算處理的數據吞吐量與處理速度。因此,內存計算技術成為大數據處理分析的利器,并成為工業界和學術界共同關注的研究熱點。
本文主要對內存計算的概念、原理、技術特點、研究現狀、典型應用、問題與挑戰等角度進行介紹分析。首先,介紹和分析了內存計算的概念、原理和技術特點;其次,從技術層面介紹了內存計算技術的研究現狀;然后,介紹了內存計算的幾種典型應用;接下來,分析內存計算發展面臨的問題與挑戰;最后,對內存計算的發展進行總結和展望。
內存計算[1](In-Memory Computing),實質上就是CPU直接從內存而非硬盤上讀取數據,并對數據進行計算、分析,是對傳統數據處理方式的一種加速。內存計算是以大數據為中心,依托計算機內存器件的發展,依靠新型的軟件體系架構,將數據放入內存中處理,而盡量避免I/O操作的一種新型的以數據為中心的并行計算模式。內存計算主要用于數據密集型計算的處理,尤其是數據量極大且需要實時分析處理的計算。
內存計算技術主要是在計算機軟硬件相結合的條件下,將數據庫的相關計算轉移到內存中進行。在內存中進行數據處理計算,可以有效突破I/O框架的限制,進而采取并行處理技術,大大提高數據處理計算的效率。
內存計算技術具有以下幾個方面的特點[2]:
1)操作都在內存層面上進行。基于內存的高效數據讀取和處理硬件方面擁有大容量內存,待處理數據均在存放于內存當中,內存既可以是單機內存也可以是分布式內存;數據庫放在內存中,可以使相關數據處理通過更加開放更加高效的方式進行。
2)行存儲和列存儲的混合模式。由于數據庫放在內存中,列儲存和行儲存就打破了原有的束縛,可以進行混合使用。
3)高效并行處理機制。支持更多的服務器或者處理器,能夠分拆數據模型進行分步并行處理,還可以將分拆后的數據模塊配置到不同的服務器進行分別處理。
4)數據高效壓縮。數據庫一般都是十分龐大的,只有將這些數據進行高效壓縮,優化內存結構,才能提升內存的運轉效率,進而提升數據處理效率。
5)面向數據密集型應用。內存計算的針對的應用主要數據規模大、時效性要求高的新型大數據應用。
6)具有良好的編程模型和編程接口。內存計算技術需要軟硬件相結合,因此,對編程的要求較高。
隨著信息技術的高速發展,計算機硬件價格持續下降,尤其是內存容量的不斷升高、內存價格的持續走低,使服務器配置高容量內存成為可能,用內存計算技術完成實時大數據處理已成為大數據處理的一個重要發展趨勢。
當前主流的半導體存儲器件技術,如動態隨機存儲器和閃存等,無法滿足大數據處理的大容量和高速讀取的要求,日立、英特爾、IBM等公司都在競相研發新一代半導體存儲器技術,即新型非易失存儲器技術。
近年來,隨著電阻存儲器(resistive randomac?cess memory,RRAM)[3]、鐵電存儲器(ferroelectric random accessmemory,FeRAM)[4]、相 變 存 儲 器(phase change memory,PCM)[5~6]等為代表的新興非易失性隨機存儲介質(non-volatile memory,NVM)技術的發展,使得傳統的內存與存儲分離的界限逐漸變得模糊,推進了存儲技術的發展,為新型的內存與存儲體系結構的發展打下了良好的基礎。
新型非易失存儲器技術目前主要有相變存儲器(PCM)、磁存儲器(MRAM)、阻變存儲器(RRAM),隨著近些年器件技術的進步,新型非易失存儲從早期的理論研究開始向產品化轉移,各主要廠商均有相應的研發計劃,并預期逐步有相應的樣片和產品推出。但目前仍受制于容量,主要用作小規模應用,如應用在數碼產品上。業界針對其容量限制正在積極研究,以期在未來可以應用于大規模存儲系統中。
目前,國內外科研人員在基于PCM存儲設備構造新的內存體系這一領域的研究工作主要集中在如何構造混合內存體系結構上。
在紛繁的NVM中,PCM作為一種新興的存儲設備,憑借其非易失性、非破壞性讀、讀完無須回寫、寫操作無須先擦除、存儲密度高等特性,逐漸成為大規模內存系統中頗具潛力的DRAM替代品。在硬件體系結構方面,人們圍繞PCM和DRAM的混合方案開展了很多研究,對何種混合內存體系結構能夠更加充分地利用這兩者的特性進行了深入的探討。
近幾年國內外學術界出現的混合內存結構包括[1]:
1)PDRAM[7]
PDRAM結構由PCM和DRAM構成,充分發揮了PCM在讀數據和存儲數據方面低功耗、非易失性和DRAM在寫數據時低功耗及超長的寫壽命的特性,PCM和DRAM處于同等地位,無主次之分,對兩者線性編址,屬于線性結構。
2)DRAMBuffer[8]
DRAMBuffer混合架構由DRAM和PCM的混合型內存系統構成,PCM作為主存,DRAM作為PCM的緩存,它結合了PCM高容量以及DRAM快速訪問的特點。
3)層次混合內存[9]
這是一種由PCM和DRAM構成的具有層次結構的混合內存,這種層次內存分為片上和片下兩部分。片上內存由單獨的DRAM構成,片下部分則由PCM+DRAM混合構成。其中,片上DRAM因內置于處理器內部而具有較小的延遲;片下的DRAM和PCM共用同一個內存控制器且兩者分配線性的物理地址。
雖然各種新型NVM都有著各自的優點,在某些方面比當前的DRAM更具有優勢,但要真正把它們無縫整合進混合內存中,還需要采取一定的策略對其做性能方面的優化。
工業界和學術界在基于內存計算的數據管理技術,特別是主存數據庫領域已經累積的大量的研究成果和經驗。在大數據發展初期,面向磁盤的分布式數據管理系統由于其高可擴展性而廣泛應用。但是其性能上的乏力,促使基于分布式內存的數據管理系統的發展成為新的焦點。近些年工業界和學術界都針對于分布式內存數據庫系統進行了研究[10]。
工業界出現了很多相關產品,Memcached[11]是最著名的全內存式數據存取系統,該系統使用DHT實現網絡拓撲的構建以及數據的布局及查詢,為上層應用提供了高可用的狀態存儲和可伸縮的應用加速服務,被Facebook,Twitter,YouTube,Reddit等多家世界知名企業所使用。與Memcached類似,VMware的Redis也提供了性能卓越的內存存儲功能,支持包括字符串、哈希表、鏈表、集合、有序集合等多種數據類型以及更加易于使用的API,相比于Memcached,Redis提供了更靈活的緩存失效策略和持久化機制。此外,還有微軟的Hekaton,SAP的HANA等內存數據庫產品,隨著需求的發展仍在不斷涌現。
在學術界,MIT的H-Store是內存數據處理環境下的原型系統,其根據CPU Core進行數據分區,通過數據庫多副本來獲得數據的持久性。為解決處理數據超過內存容量的問題,布朗大學的DeBra?bant等還針對H-Store系統提出了Anti-Caching策略。慕尼黑工業大學開發的Hyper原型系統試圖利用內存計算的特點基于統一的存儲模型將傳統上分離的OLTP和OLAP融合在一起進行處理。
此外,在數據管理方面,由于新型介質模糊了內存與外存的界限,現有的數據管理軟件將無法完全發揮其潛在性能,因此需要研究相應的內存數據管理軟件,并考慮數據在存儲介質上的組織、分配、回收以及路徑訪問優化等特性。
內存計算技術離不開軟件的支撐,因此軟件的編程模型尤為重要。編程模型是架構在硬件和應用之間,涵蓋存儲模型、執行模型、調度模型的綜合抽象。其可以在大規模廉價集群中以并行、可擴展、容錯、易用、透明的方式支持各種應用的有效執行。
UCBerkeley的基于內存的分布式并行處理框架Spark[12],有效保證了處理的實時性并提供了交互式的迭代分析能力。Spark提供的最主要的即彈性分布式數據集(RDD),RDD是一個分布在一組節點之間的只讀的對象集合。這些集合是彈性的,能夠在部分數據集丟失的情況下利用血統(lin?eage)容錯機制進行重建。為了提供操作的便捷性,Spark框架還提供了和Hive類似的類SQL命令接口Shark。同時,基于Spark的內存計算分析生態系統,如處理流數據的Spark streaming,用于大圖計算的GraphX等,正在不斷的完善與開發之中。
此外,流式應用也是一類對實時性要求很高的應用類型,具有代表性的實時數據流計算模型有雅虎的S4、Facebook的Pumn、谷歌的MillWheel等,這些模型與企業自身的具體需求緊密結合,致力于解決實際的應用問題。
近年來,隨著計算機硬件技術的迅猛發展,內存容量不斷提高,價格不斷下跌,同時對數據庫系統實時響應能力要求日益提高,充分利用內存技術提升數據庫性能成為一個熱點。
其實內存數據庫并不是一項新興技術,其出現于20世紀60年代末,隨著市場需求的不斷增大在90年代后期開始得到快速發展。其原理就是將數據放在內存中直接操作的數據庫。相對于磁盤,內存的數據讀寫速度要高出幾個數量級,將數據保存在內存中相比從磁盤上訪問能夠極大地提高應用的性能。同時,內存數據庫系統帶來的優越性能不僅僅在于對內存讀寫比對磁盤讀寫快上,更重要的是,從根本上拋棄了磁盤數據管理的許多傳統方式,基于全部數據都在內存中管理進行了新的體系結構的設計,并且在數據緩存、快速算法、并行操作方面也進行了相應的改進,從而使數據處理速度一般比傳統數據庫的數據處理速度快很多,一般都在10倍以上,理想情況甚至可以達到1000倍[13]。
內存數據庫的另外一個重要特點是可以對內存中的數據實現全事務處理,相比僅僅把數據以數組等形式放在內存中是完全不同的。內存數據庫是與應用無關的,對于內存數據庫而言,實現了數據在內存中的管理,而不僅僅是作為數據庫的緩存。不同于其它將磁盤數據塊緩存到主存中的數據庫,內存數據庫的內存引擎使用了為隨機訪問內存而特別設計的數據結構和算法,這種設計使其避免了因使用排序命令而經常破壞緩存數據庫性能的問題。通過內存數據庫,大大減少了磁盤I/O處理,因此能夠達到以磁盤I/O為主的傳統數據庫無法與其相比擬的處理速度。
圖計算分析是一種I/O密集型計算,大部分的應用計算需要多次迭代,計算的狀態信息需要在計算節點間消息傳遞和頻繁更新,尤其是大規模的圖數據,需要在集群的節點間進行頻繁的消息傳遞和中間結果的存儲。如果把數據全部在內存中計算,將極大地提高效率。
傳統的在單機運行的圖數據計算算法庫,例如LEDA,擴展性不好,而對大規模的圖數據計算能力不足;Map Reduce計算框架容錯性、擴展性等方而較好,但是對于圖計算效率不高;現有的圖并行處理系統,存在容錯性不佳等問題。
內存計算能夠提升大規模圖數據計算的效率,圖的內存計算系統大致可以分為三種:第一種是基于內存分布式集群系統,例如Trinity系統;第二種是基于內存共享的分布式系統;第三種是在多核單機上多線程共享大內存系統,例如GRACE。
內存計算技術依托計算存儲一體化體系結構,在內存中建立內存數據庫,定期地將需要持久化的數據如歸檔文件同步到磁盤;計算時將全部數據加載到內存中,計算過程的文件讀寫操作僅與內存文件系統交互,不需要讀寫磁盤,有效解決數據網絡傳輸效率低、內存/外存、I/O不匹配等問題。
在內存數據庫的基礎上,通過設計不同的內存接口模塊、內存存取模塊實現了內存數據的存取和訪問,并通過內存資源管理模塊對內存進行分配和管理。基于內存計算的數據處理技術可使用內存接口模塊將虛擬內存管理系統和內存數據庫連接起來,使用內存存取接口模塊連接分布式數據管理系統和物理內存管理系統,從而實現了透明地訪問各節點上的內存空間。
內存計算技術對現有應用數據采用列存儲的方式并進行壓縮,然后進行多核處理,既可以最大限度的使用內存,又可以加快應用程序的處理速度。首先,通過列存儲的方式對數據進行存儲,所以可以很方便地對數據進行壓縮,從而便于服務器與前端移動設備之間的數據傳輸量降到最小。其次,把數據存放在服務器的內存中,可以直接在云端對數據進行分析查詢操作,不需要把云端服務器的數據下載下來,減少了數據傳輸的時間。
內存計算模式主要包含如下幾個關鍵問題[1]:異構協同、能耗可控和高效并行。異構協同是指在體系結構和操作系統層面如何實現異構層次內存體系的協同管理、透明服務的數據處理支撐環境;能耗可控是指在體系結構和編程模型層面如何基于內存計算,實現大數據低能耗的管理與處理環境;高效并行是指在編程模型與并行處理層面,如何基于內存計算,實現大數據高效率的并行處理環境。
這三個關鍵問題遇到的挑戰和需要解決的技術難題分散在:體系結構、系統軟件、編程模型和并行處理四個層面。四個層面需要面對的問題為:1)在體系結構層面,需要為異構混合層次內存設計專門的CPU訪存通道;2)在系統軟件層面,需要設計異構層次內存體系的一致性數據組織和高效、透明、可靠的新內存訪問與管理策略;3)在編程模型層面,需要依據新內存的層次性特征設計數據與計算緊密藕合的編程模型、面向異構層次內存體系的數據局部性編程表達和多任務粒度劃分策略等;4)在并行處理層面,主要解決并行環境中的節點互聯問題和任務調度問題以及分布式環境下的一致性問題。
因此,盡管內存計算為當前工業界和學術界高度關注的熱點問題,內存計算涉及硬件體系結構、軟件體系結構、操作系統、編程模型、大數據處理等諸多方面內容,使得內存計算從底層的硬件架構到高層的編程模型都存在許多問題面臨一系列挑戰。
由于內存計算從硬件架構看,不管是單節點、分布式,還是基于新型混合內存系統,最終表現為軟件層次的應用,比如,內存存儲系統表現內存數據庫,內存數據處理系統表現為圖計算框架、深度學習算法處理框架、流處理框架等。
內存數據庫將整個數據庫裝載進內存,避免了傳統數據庫I/O操作所帶來的開銷。這樣,內存數據庫性能提升的瓶頸從傳統的I/O訪問便轉為如何提高計算時間及減少訪存延遲,具體表現在索引建立、內存數據組織以及并發控制策略等方面,以達到優化內存數據庫時間空間效率,優化內存及緩存的使用,保證系統性能的目的。另外,硬件的快速發展正在迅速改變商用處理器的場景,如NUMA架構,SIMD指令,RDMA網絡,硬件事務內存(HTM),非易失性存儲器(NVM),以及片上GPU,FPGA和其他硬件加速器,能夠以較低的開銷提供更高的性能。綜上,內存數據庫性能的提升不僅面臨軟件方面的挑戰與機遇,同樣硬件加速為內存數據庫提出了新的挑戰以及提供了新的發展前景。
圖計算在不同的硬件架構平臺上存在內存計算所面臨的不同挑戰。基于分布式的內存圖計算面臨數據通信時的I/O瓶頸問題;單節點內存圖計算則面臨內存不足時系統性能下降的問題,以及線程數增加所引起的內存墻問題。此外,圖數據本身有其自身特點及復雜性,因而存在特有的問題需要解決。
深度學習是當前機器學習和模式識別領域的熱點問題。深度學習需要訓練的數據量龐大,導致訓練過程非常耗時。因此,為了加速訓練過程,如何充分利用大規模集群的硬件資源,使數據自始至終保存在內存中,成為內存計算的研究熱點。針對深度學習算法方面的研究仍處于發展階段,基于內存計算的深度學習框架更是面臨更多的問題與挑戰。
內存計算消除了傳統計算模式中的I/O性能瓶頸,可以預見,大數據的處理性能將獲得顯著提升,并為海量數據實時處理打造了一條寬廣的“高速公路”。內存計算作為一種新型信息處理模式,不僅將推動計算機科學的發展,而且還為大數據信息處理提供核心技術支撐,從而廣泛服務于經濟建設、科學研究和國家安全等領域。
隨著非易失性存儲器件的發展,傳統的以計算為中心的計算機體系架構將面臨體系結構、操作系統、編程模型方面的諸多挑戰,內存計算技術將迎來高速發展的機遇:
1)實時應用對時效性的需求為內存計算提供了發展的動力;
2)新型硬件技術的發展為內存計算提供了發展的基石;
3)新的數據處理特征為內存計算提供了發展的契機;
4)數據處理模式的變遷為內存計算提供了發展的方向。
可以預見,內存計算將會進入新一輪的研究和發展高峰,并成為大數據實時處理領域的熱點。
[1]金海,廖小飛,葉晨成.內存計算:大數據處理的機遇與挑戰[J].中國計算機學會通訊,2013,9(4):40-46.
[2]羅樂,劉軼,錢德沛.內存計算技術研究綜述[J].軟件學報,2016,27(8):2147-2167.
[3]Govoreanu B,Kar G S,Chen Y,et al.10×10nm2 Hf/HfOx crossbar resistive RAM with excellent performance,reliability and low-energy operation[J].Electron Devices Meeting. iedm.technical Digest.international,2012:31.6.1-31.6.4.
[4]Park BH,Kang BS,Bu SD,et al.Lanthanum-substitut?ed bismuth titanate for use in non-volatile memories[J].Nature,1999,401(6754):682-684.
[5]Lee B C,Zhou P,Yang J,et al.Phase-Change Technolo?gy and the Future of Main Memory[J].IEEE Micro,2010,30(1):143-143.
[6]Raoux S,Burr GW,Breitwisch M J,et al.Phase-change random access memory:A scalable technology[J].Ibm Journal of Research&Development,2010,52(4.5):465-479.
[7] Dhiman G,Ayoub R,Rosing T.PDRAM:a hybrid PRAM and DRAM main memory system[C]//Design Au?tomation Conference,DAC'09.IEEE,2009:664-669.
[8]Qureshi M K,Srinivasan V,Rivers JA.Scalable high per?formance main memory system using phase-change memo?ry technology[C]//International Symposium on Computer Architecture.ACM,2009:24-33.
[9]Park K H,Park S K,Seok H,et al.Efficient memory management of a hierarchical and a hybrid main memory for MN-MATE platform[C]//International Workshop on Programming MODELS and Applications for Multicores and Manycores.ACM,2012:83-92.
[10]嵇智源,潘巍.面向大數據的內存數據管理研究現狀與 展 望[J]. 計 算 機 工 程 與 設 計 ,2014(10):3499-3506.
[11]Memcached Team.Memcached:A Distributed Memory Object Caching System.http://memcached.org/. Re?trieved 2015.
[12]Zaharia M,Chowdhury M,Franklin M J,et al.Spark:cluster computing with working sets[C]//Usenix Confer?ence on Hot Topics in Cloud Computing.USENIX Asso?ciation,2010:10-10.
[13]周烜,薛忠斌.批處理在內存數據處理系統中的應用[J].華東師范大學學報(自然科學版),2014(5):252-262.