隨著互聯網的不斷擴張和云計算技術的進一步推廣,海量的數據在個人、企業、研究機構等源源不斷地產生。這些數據為日常生活提供了便利,信息網站可以推送用戶定制的新聞,購物網站可以預先提供用戶想買的物品,人們可以隨時隨地分享。但是如何有效、快速、可靠地存取這些日益增長的海量數據成了關鍵的問題。傳統的存儲解決方案能提供數據的可靠性和絕對的安全性,但是面對海量的數據及其各種不同的需求,傳統的解決方案日益面臨越來越多的問難,比如數據量的指數級增長對不斷擴容的存儲空間提出要求,實時分析海量的數據對存儲計算能力提出要求。一方面傳統的存儲解決方案正在改變,比如多級存儲來不斷適應大數據存儲管理系統的特點和要求,另一方面全新的存儲解決方案正日漸成熟,來有效滿足大數據的發展需求。
1、大數據定義及其廣泛應用與典型架構
越來越多的人可以通過網絡獲得包括架構(IAAS)、平臺(PAAS)以及軟件(SAAS)等服務,云計算為終端用戶提供了便捷而人性化的服務,大大地降低他們的使用成本,優化了用戶體驗,更拓展了互聯網企業自身的營收業務。例如購物網站通過記錄每位訪問用戶在其網站上每一次的鼠標點擊操作來預測用戶的喜好,并由后臺計算產生相關產品的購物推薦,提高了廣告產品推廣的針對性同時也完善了個人用戶的購物體驗。隨著成千上萬的終端用戶的并行訪問,僅用戶行為的跟蹤就會產生巨量的數據,這些數據的處理與存儲對于互聯網企業的傳統數據倉庫來說帶來了新的問題和挑戰,從而“大數據”的概念應運而生。所謂大數據或稱巨量資料、海量資料,指的是所涉及的資料量規模巨大到無法透過目前主流軟件工具,在合理時間內達到擷取、管理、處理、并整理成為幫助企業經營決策更積極目的的資訊。
大數據自誕生以來其規模也在不斷地發生改變,從開始PB(PETA-BYTE)級別正快速地發展到EB(EXA-BYTE)級別,大數據規模的不斷快速擴張是因為其廣泛的數據源,這些數據有的正如前面例子所提到的,是每天線上跟蹤用戶日常行為所產生,或者是網絡中手機和傳感器數據采集而來;有的則是企業自身多年以來信息積累而成,例如金融行業歷史數據來引導未來的投資方向,又如最大的電子商務網站淘寶根據其歷史記錄推出的數據魔方服務產品來幫助商家指定營銷手段;有的是服務系統日志收集而來,例如從網絡服務器的工作日志或者數據庫El志中提取到。這些各種各樣的數據來自不同的設備或者應用,其格式也不盡相同,被實時或事后采集并保存到大數據存儲管理系統中,根據不同的應用需求被大數據處理系統進行離線或實時或交互式的處理,之后可能的用途包括:(1)成為最終的數據報表反饋給應用開發人員或數據分析師;(2)成為快速查詢或者計算的結果反饋給前端應用服務;(3)成為更新后的數據表格傳送到數據庫中以供查詢;(4)被壓縮成備份數據存放到大數據存儲集群中。大數據的存儲與處理典型架構(如圖1)已經逐漸取代傳統的數據倉庫成為數據中心核心部件,發揮著云計算時代重要的作用,并且使得數據中心發生著巨大的變化,迎接新的挑戰。
2、大數據存儲與應用的特點分析
“大數據”是由數量巨大、結構復雜、類型眾多數據構成的數據集合,是基于云計算的數據處理與應用模式,通過數據的整合共享,交叉復用形成的智力資源和知識服務能力。其常見特點可以概括為3V:Volume、Velocity、Variety(規模大、速度快、多樣性)。
大數據具有數據規模大(Volume)且增長速度快的特性,其數據規模已經從PB級別增長到EB級別,并且仍在不斷地根據實際應用的需求和企業的再發展繼續擴容,飛速向著ZB(ZETA-BYTE)的規模進軍。以國內最大的電子商務企業淘寶為例,根據淘寶網的數據顯示,至2011年底,淘寶網最高單日獨立用戶訪問量超過1.2億人,比2010年同期增長120%,注冊用戶數量超過4億,在線商品數量達到8億,頁面瀏覽量達到20億規模,淘寶網每天產生4億條產品信息,每天活躍數據量已經超過50TB.所以大數據的存儲或者處理系統不僅能夠滿足當前數據規模需求,更需要有很強的可擴展性以滿足快速增長的需求。
(1)大數據的存儲及處理不僅在于規模之大,更加要求其傳輸及處理的響應速度快(Velocity)。
相對于以往較小規模的數據處理,在數據中心處理大規模數據時,需要服務集群有很高的吞吐量才能夠讓巨量的數據在應用開發人員“可接受”的時間內完成任務。這不僅是對于各種應用層面的計算性能要求,更加是對大數據存儲管理系統的讀寫吞吐量的要求。例如個人用戶在網站選購自己感興趣的貨物,網站則根據用戶的購買或者瀏覽網頁行為實時進行相關廣告的推薦,這需要應用的實時反饋;又例如電子商務網站的數據分析師根據購物者在當季搜索較為熱門的關鍵詞,為商家提供推薦的貨物關鍵字,面對每日上億的訪問記錄要求機器學習算法在幾天內給出較為準確的推薦,否則就丟失了其失效性;更或者是出租車行駛在城市的道路上,通過GPS反饋的信息及監控設備實時路況信息,大數據處理系統需要不斷地給出較為便捷路徑的選擇。這些都要求大數據的應用層可以最快的速度,最高的帶寬從存儲介質中獲得相關海量的數據。另外一方面,海量數據存儲管理系統與傳統的數據庫管理系統,或者基于磁帶的備份系統之間也在發生數據交換,雖然這種交換實時性不高可以離線完成,但是由于數據規模的龐大,較低的數據傳輸帶寬也會降低數據傳輸的效率,而造成數據遷移瓶頸。因此大數據的存儲與處理的速度或是帶寬是其性能上的重要指標。
(2)大數據由于其來源的不同,具有數據多樣性的特點。
所謂多樣性,一是指數據結構化程度,二是指存儲格式,三是存儲介質多樣性。對于傳統的數據庫,其存儲的數據都是結構化數據,格式規整,相反大數據來源于日志、歷史數據、用戶行為記錄等等,有的是結構化數據,而更多的是半結構化或者非結構化數據,這也正是傳統數據庫存儲技術無法適應大數據存儲的重要原因之一。所謂存儲格式,也正是由于其數據來源不同,應用算法繁多,數據結構化程度不同,其格式也多種多樣。例如有的是以文本文件格式存儲,有的則是網頁文件,有的是一些被序列化后的比特流文件等等。所謂存儲介質多樣性是指硬件的兼容,大數據應用需要滿足不同的響應速度需求,因此其數據管理提倡分層管理機制,例如較為實時或者流數據的響應可以直接從內存或者Flash(SSD)中存取,而離線的批處理可以建立在帶有多塊磁盤的存儲服務器上,有的可以存放在傳統的SAN或者NAS網絡存儲設備上,而備份數據甚至可以存放在磁帶機上。因而大數據的存儲或者處理系統必須對多種數據及軟硬件平臺有較好的兼容性來適應各種應用算法或者數據提取轉換與加載(ETL)。
3、傳統存儲在大數據應用中面臨的挑戰
作為數據存取的載體,大數據存儲管理系統與傳統的存儲系統仍然具有許多相似的特性,例如安全性、可用性、可靠性、可擴性及高效性。
1)安全性(Security)
雖然大數據的存儲訪問是位于企業的數據中心內部,對于外部用戶已經具有防火墻隔離功能,但是對于企業內部來說不同部門的數據也并非完全可以共享的,例如人事部門對于企業內部工資的管理,或者金融企業歷史交易數據等。為每一個部門建立一個大數據的存儲管理平臺并不現實,較為實用的方法是類似于傳統的數據庫訪問,所有部門共享一個大數據存儲池,通過添加必要的訪問控制來實現數據訪問的安全性。
2)可用性(Availability)和可靠性(Reliability)
數據的準確性是作為存儲管理系統最為基礎的要求,對于大數據的存儲來說,其準確性的要求可能沒有傳統數據庫這么高,因為其數據規模龐大可以容忍較少量的數據錯誤,但是數據準確性依然是不能忽視的重要特性。傳統的存儲是通過冗余備份(例如磁盤陣列)、定期,強制寫人磁盤、雙控制器來確保數據的準確性,而在大數據存儲系統中則是通過其中較為簡單的多副本(即冗余備份)方式做到容錯的,一般來說同一個機架上擁有兩份備份在不同的節點上,不同的機架上也有相應的備份,從而達到數據丟失的自動還原功能實現數據的可用性。而為了達到數據備份的一致性,在數據備份創建的過程中也有相應的備份點及重傳機制作為保障。從技術方法上來說,兩者是十分相似的,甚至在大數據領域所采用的方法較之傳統的存儲系統技術更為簡樸。
3)可擴性(Scalability)
無論是大數據存儲系統還是傳統的存儲系統,容量規劃都是一個重要的問題,容量規劃一是要滿足現有的存儲空間和帶寬的需求,更重要的是考慮到系統擴張后的容量升級。
4)高效性(Efficiency)
在存儲系統中,通過對用戶層透明的壓縮處理來實現空間及帶寬利用的有效性提升是一個普遍的做法,這個在傳統的存儲系統和大數據系統中都十分重要。尤其是對一些歸檔備份的數據,自動的壓縮開啟以及不同壓縮算法的提供與選擇就顯得十分實用。
除了以上的一些共性外,由于大數據的3V特性即Volume、Velocity、Variety(規模大、速度快、多樣性),傳統的數據存儲管理系統面臨著更多的挑戰,有些甚至已經完全不能滿足大數據的存儲計算的要求,而需要開發新的針對大數據的數據存儲管理平臺,如表1所示。
5)擴容方式
雖然傳統存儲系統和大數據存儲系統都具有可擴性,但是其擴展方式是截然不同的。傳統存儲是縱向擴容(Scale-up)即當存儲容量不夠或者存儲磁盤帶寬不夠時,在SAN或者NAS存儲池中繼續添加磁盤(Hard-drive)來達到增加容量和帶寬的作用,但是大數據時代縱向擴容方式是無法滿足其需求的。首先,大數據的數據規模目前已經是EB(EXA-BYTE)級別,將來甚至會達到ZB(ZETA-BYTE),這個數量級別的存儲容量是無法通過單純的往網絡存儲池添加硬盤來實現的。其次,即使可以通過縱向擴容達到更大數據規模的需求,其高額的硬件及管理軟件成本也是數據存儲管理中心無法承擔的。因此,對于大數據存儲系統來說橫向擴張才能夠很好的達到巨量數據規模的需求,才能夠實現存儲系統的按需(ON-DEMAND)動態規模增減。所謂的橫向擴容是指當存儲容量或者帶寬不足以滿足現有要求足時,添加存儲節點來達到擴容的目的。在大數據的應用領域,每一個節點不需要高價的磁盤陣列(RAID),相反只需要一定數量的各種類型的硬盤以獨立工作單元方式進行管理(即JBOD存儲設備)。根據Google的設想,這些節點甚至可以是一些成本較為低廉的日常用機器(甚至是臺式機)。橫向擴容意味著數據管理軟件將要統籌更多的節點,面對更大的壓力。例如如果采用集中式的主節點管理,主節點的能力可能成為整個大數據存儲系統的性能瓶頸,尤其是當規模的擴大到成千上萬個節點時,單管理節點的模式是不可靠的;如果采用分布式主節點群管理,軟件的開發成本和系統本身的復雜度相應就會提高。
6)存儲模式
傳統的存儲系統是依賴于SAN或者NAS這樣的網絡存儲模式,這樣的存儲模式存在著如上所述縱向擴容瓶頸,更重要的是它們將計算節點與存儲節點分隔開,通過網絡來共享一個或多個存儲池,最終使得數據的存取速度被限制在網絡的瓶頸上,即使通過縱向擴容其存儲池容量和帶寬都得到了提高,最終卻受限于它們與數據處理節點之間的網絡帶寬上。而對于大數據的處理和存取來說,最終的速度都受制于SAN或者NAS的物理網絡帶寬,這是遠遠無法滿足EB級別數據規模的需求的。因為網絡存儲對于大數據意味著當計算發生時,PB或者EB級別的數據需要通過SAN或者NAS的網絡搬遷到計算節點上進行各種應用的處理,然后再將結果返回,而這樣巨量數據的搬遷本身也許比起計算應用更加耗時。所以目前大數據存儲系統普遍采用的是DAS的方式,并且將計算資源搬遷到數據的存儲節點上發生,但是簡單的DAS方式仍然給存儲管理系統的軟件層增加了許多的新問題,例如通過網絡的跨節點數據訪問管理,存儲數據塊的管理等。
7)兼容集成
對于大數據存儲系統的兼容集成特性涉及到若干方面,首先正由大數據的多樣性特點所決定,其存儲系統需要兼容各種種類的數據,有結構化、半結構化及非結構化數據,而傳統的數據庫存儲則是管理結構化的關系型數據,其數據的種類比較單一;其次,大數據的存儲需要和各種數據源和數據存儲系統整合集成系統工作,正如之前典型的架構所列舉,其數據交換接口需要兼容各種數據傳輸機制才能夠很好的服務數據中心的各種需求;再者,大數據計算要對大量的數據提供各種有效服務,例如有些批處理(Batch.style)數據分析或者機器學習算法需要處理大量的數據,有些交互式(Interactive-access)的數據訪問或者查詢需要快速返回;有些流式(streaming)計算的及時運算與響應,這些計算服務的數據都被存放在統一的大數據存儲系統之上,因為反復的搬遷大規模的數據對于任何大數據應用來說都是降低效率的致命短板,所以基于大數據的存儲系統可以支持各種上層應用的需求,提供統一或者兼容性強的讀寫接口;第四,大數據存儲管理系統需要支持各種介質的存儲設備來滿足上層各種應用的需求。例如對于經常訪問的熱點數據,存儲系統可以從磁盤讀取數據的同時將數據緩存存放在內存或者Flash(SSD)中,這要求大數據的存儲系統支持多級緩存操作,并且很好的兼容各種硬件存儲設備。
8)故障維護
相較于傳統存儲系統,大數據的存儲系統成本不僅僅意味著花費的多少,更多的涉及到其可用性。當數據管理系統的硬件規模達到成千上萬時,每一個節點和節點的磁盤成本就會被成千上萬地擴大,根據Google最初的設想,大數據的處理集群只需要采用低廉的日常用機即可(甚至可以是臺式機),而低廉的存儲設備加上眾多節點使得故障率會高于一般的傳統存儲系統。因而對于大數據的存儲系統來說,一是需要強大的容錯軟件管理能力,二是需要更加有效的運維系統來監控各種故障的發生,尤其是對于大數據存儲系統可能擁有十萬級別的硬盤,磁盤故障可能每天都會發生。
4、大數據存儲方案簡介
大數據存儲方案隨著大數據計算的發展也已經歷時將近10年,有的已經被廣泛應用,有的則是被不斷的完善中,以下列舉若干較為著名的大數據存儲方案及其優缺點。
1)HDFS
大數據計算最為代表性的就是Google在2004年提出的MapReduce框架和相應的GFS存儲系統。2008年Yahoo的工程師根據MapReduce的框架推出了開源的Hadoop[41項目,作為一個大數據處理典型開源實現,如今Hadoop項目已經被廣泛應用于各大互聯網企業的數據中心,并且正努力從一個開源項目走向商業化應用產品,不斷得到完善。而HDFS(Hadoop Distributed File System)就是支持Hadoop計算框架的分布式大數據存儲系統,它具有大數據存儲系統幾項重要特性,具有很高的容錯性、可擴展性、高并發性,并且基于廉價存儲服務器設備,是目前最為流行的大數據存儲系統。但是它還有許多方面需要進一步完善,例如目前HDFS自身不能與POSIX文件系統兼容,用戶需要通過其自定義的接口對數據進行讀寫管理,增加了各種數據存儲之間交換的開發成本;又如目前HDFS為了到達高容錯性,在數據中心中推薦及實際操作的副本數目設置為三,也就意味著用戶的任意一份數據都會被復制三份保存在存儲系統中,這樣造成存儲系統保存的數據量遠大于實際用戶需要的存儲量,相比傳統的RAID存儲空間效率要低很多。
2)Tachyon
來自于美國加州大學伯克利分校的AMPLab的Tachyon是一個高容錯的分布式文件系統,允許文件以內存的速度在集群框架中進行可靠的共享,其吞吐量要比HDFS高300多倍。Tachyon都是在內存中處理緩存文件,并且讓不同的作業任務或查詢語句以及分布式計算框架都能以內存的速度來訪問緩存文件。由于Tachyon是建立在內存基礎上的分布式大數據文件系統,所以其高吞吐量也是HDFS不能夠媲美的,當然截止目前Tachyon也只是0.2 alpha發行版其穩定性和魯棒性還有待檢驗。
3)其他
Quantcast File Syste(QFS)是一個商陛能、容錯、分布式的開源大數據文件系統,其開發是為HDFS提供另一種選擇,但是其讀寫性能可以高于HDFS,并能比HDFS節省50%存儲空間。Ceph是基于POSIX的沒有單點故障的PB級分布式文件系統,從而使得數據能容錯和無縫的復制,Ceph的客戶端已經合并到Linux內核2.6.34中;GlusterFS是一個可以橫向擴展的支持PB級的數據量開源存儲方案。GlusterFS通過TCP/IP或者InfiniBand RDMA方式將分布到不同服務器上的存儲資源匯集成一個大的網絡并行文件系統,使用單一全局命名空間管理數據。GIuster存儲服務支持NFS、CIFS、HTTP、FTP以及Gluster自身協議,完全與POSIX標準兼容。現有應用程序不需要作任何修改或使用專用API,就可以對Gluster中的數據進行訪問。
5、小結
存儲管理已然成為大數據研究和應用的核心組件,各種改善人們El常生活、提高企業運營能力的實際應用都離不開數據的存取、分析和管理。本文從定義大數據開始,描述了其廣泛應用和典型的架構,著重分析了大數據存儲的三個主要特點(Volume規模大、Velocity速度快、Variety多樣性)以及傳統存儲針對大數據面臨的各種挑戰。最后本文簡單介紹了幾種較為著名的大數據存儲解決方案。無論是傳統存儲還是大數據存儲,都要不斷適應大數據應用的主要特點和基礎架構,通過不斷的改進和完善來切實有效地存取和處理El漸豐富的信息量。