王俊,于愛榮,牛彥杰,楊飛,李峰
1.南京電訊技術(shù)研究所,江蘇 南京 210007
2.解放軍理工大學(xué)指揮信息系統(tǒng)學(xué)院,江蘇 南京 210007
3.裝備發(fā)展部駐七一四廠軍事代表室,江蘇 南京 210007
自從 WWW(world wild web)技術(shù)產(chǎn)生以來,其在 Internet 上得到了廣泛應(yīng)用,逐漸成為人們進(jìn)行信息交流的最重要的渠道之一。它支持快速的信息發(fā)布、動態(tài)的用戶交互,并且能與后臺數(shù)據(jù)庫、業(yè)務(wù)系統(tǒng)實現(xiàn)靈活、安全和便捷的連接。同時,軟件技術(shù)也逐步由單機、客戶機/服務(wù)器模式向分布式方向發(fā)展,以往基于數(shù)據(jù)庫的開發(fā)模式逐漸被基于 Web 的多層開發(fā)所取代。WEB 應(yīng)用程序一般是 B/S 模式。Web 應(yīng)用程序首先是“應(yīng)用程序”,和用標(biāo)準(zhǔn)的程序語言,如 C、C++等編寫出來的程序沒有什么本質(zhì)上的不同。然而 Web 應(yīng)用程序又有自己獨特的地方,就是它是基于 Web 的,而不是采用傳統(tǒng)方法運行的。換句話說,它是典型的瀏覽器/服務(wù)器架構(gòu)的產(chǎn)物。隨著應(yīng)用的深入發(fā)展,Web 應(yīng)用也在快速生成形態(tài)各異、規(guī)模龐大的數(shù)據(jù),而這些海量數(shù)據(jù)積累到一定規(guī)模后引發(fā)的質(zhì)變,形成了大數(shù)據(jù)。大數(shù)據(jù)[1]這一術(shù)語正是產(chǎn)生在全球數(shù)據(jù)爆炸增長的背景下,用來形容龐大的數(shù)據(jù)集合。與傳統(tǒng)的數(shù)據(jù)集合相比,大數(shù)據(jù)通常包含大量的非結(jié)構(gòu)化數(shù)據(jù),且大數(shù)據(jù)需要更多的實時分析。此外,大數(shù)據(jù)還為挖掘隱藏的價值帶來了新的機遇,同時給我們帶來了新的挑戰(zhàn),即如何有效地組織管理這些數(shù)據(jù)。如今,工業(yè)界、學(xué)術(shù)界甚至政府部門都對大數(shù)據(jù)這一研究領(lǐng)域產(chǎn)生了巨大的興趣。大數(shù)據(jù)是互聯(lián)網(wǎng)發(fā)展過程中的重要資源,也是互聯(lián)網(wǎng)商業(yè)核心價值所在,因此,大數(shù)據(jù)的處理在 Web 應(yīng)用中起到至關(guān)重要的作用。
“大數(shù)據(jù)”的內(nèi)涵遠(yuǎn)遠(yuǎn)超越物聯(lián)網(wǎng)、云計算等信息技術(shù)的概念。大數(shù)據(jù)是一個抽象的概念,除去數(shù)據(jù)量上的龐大,大數(shù)據(jù)還有一些其特有的特征,這些特征決定了大數(shù)據(jù)與“海量數(shù)據(jù)”和“非常大的數(shù)據(jù)”這些概念之間的不同。一般意義上,大數(shù)據(jù)是指無法在有限時間內(nèi)用傳統(tǒng) IT 技術(shù)和軟硬件工具對其進(jìn)行感知、獲取、管理、處理和服務(wù)的數(shù)據(jù)集合。Wiki百科定義,大數(shù)據(jù)是一個超大的、難以用常規(guī)的數(shù)據(jù)庫管理技術(shù)和工具處理的數(shù)據(jù)集。2011年,大數(shù)據(jù)及其研究領(lǐng)域極具影響力的領(lǐng)導(dǎo)者的國際數(shù)據(jù)公司(IDC)在該公司發(fā)布的報告中將大數(shù)據(jù)被定義為:“大數(shù)據(jù)技術(shù)描述了新一代的技術(shù)和架構(gòu)體系,通過高速采集、發(fā)現(xiàn)或分析,提取各種各樣的大量數(shù)據(jù)的經(jīng)濟(jì)價值.”從這一定義來看,大數(shù)據(jù)的特點可以總結(jié)為 4個 V,即 volume(體量浩大)、variety(模態(tài)繁多)、velocity(生成快速)和 value(價值巨大但密度很低)。這種 4Vs 定義指出大數(shù)據(jù)的意義和必要性,即挖掘蘊藏其中的巨大價值。這種定義指出大數(shù)據(jù)最為核心的問題,就是如何從規(guī)模巨大、種類繁多、生成快速的數(shù)據(jù)集中挖掘價值。由于大數(shù)據(jù)的上述特征,它正在成為世界新的戰(zhàn)略資源爭奪的一個新焦點。
互聯(lián)網(wǎng)的數(shù)據(jù)“大”是不爭的事實,目前除了互聯(lián)網(wǎng)企業(yè)外,數(shù)據(jù)處理領(lǐng)域還是傳統(tǒng)關(guān)系型數(shù)據(jù)庫(RDBMS)的天下。傳統(tǒng) RDBMS 的核心設(shè)計思想基本上是 30年前形成的。過去 30年脫穎而出的無疑是 Oracle 公司。全世界數(shù)據(jù)庫市場基本上被 Oracle,IBM/DB2,Microsoft/SQL Server 壟斷。開源數(shù)據(jù)庫主要是 MySQL,PostgreSQL,除了互聯(lián)網(wǎng)領(lǐng)域外,其他行業(yè)用的很少。這些數(shù)據(jù)庫當(dāng)年主要是面向 OLTP交易型需求設(shè)計、開發(fā)的,是用來開發(fā)人機會話應(yīng)用為主的。這些傳統(tǒng)數(shù)據(jù)庫底層的物理存儲格式都是行存儲,比較適合數(shù)據(jù)頻繁的增刪改操作,但對于統(tǒng)計分析類的查詢,行存儲其實效率很低。在這些成熟的數(shù)據(jù)庫產(chǎn)品中,有2個典型特例:一個是 Teradata,一個是 Sybase IQ。[2]
Teradata 一開始就使用 MPP(Massive Parallel Processing)架構(gòu),以軟硬一體機的產(chǎn)品方式提供給客戶,其定位是高端客戶的數(shù)據(jù)倉庫和決策分析系統(tǒng),Teradata 在全世界的客戶只有幾千個,在數(shù)據(jù)分析技術(shù)上Oracle和IBM 遜于 Teradata。Sybase IQ是一款最早基于列存儲的關(guān)系型數(shù)據(jù)庫產(chǎn)品,其定位跟Teradata 類似,不過是以軟件方式銷售的。Teradata和 Sybase IQ 在數(shù)據(jù)分析應(yīng)用上的性能其實都比Oracle,DB2等要普遍好。
大數(shù)據(jù)給系統(tǒng)處理帶來了3方面的挑戰(zhàn)[3]:
1)存儲規(guī)模龐大,通常達(dá)到 PB(1,000 TB)甚至EB(1,000 PB)量級;
2)存儲管理復(fù)雜,需要兼顧結(jié)構(gòu)化、非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù),難于找到統(tǒng)一的技術(shù)體制進(jìn)行高效的管控;
3)數(shù)據(jù)服務(wù)的種類和水平要求高,不同的上層應(yīng)用對存儲系統(tǒng)的性能、可靠性、安全性等指標(biāo)有不同的要求,而隨著數(shù)據(jù)的大規(guī)模擴展和結(jié)構(gòu)復(fù)雜度的提升進(jìn)一步放大了這些指標(biāo)實現(xiàn)的技術(shù)難度。
這些挑戰(zhàn)雖然在存儲領(lǐng)域都不是新的問題,但是在大數(shù)據(jù)背景下,解決這些問題的技術(shù)難度隨著量級的提升成倍提高,最終引起了存儲技術(shù)的質(zhì)變。大數(shù)據(jù)環(huán)境下的存儲和管理,不僅需要對上層提供便捷高效的數(shù)據(jù)訪問接口,快速存取 PB 甚至 EB 量級的數(shù)據(jù),而且還需要能夠在指定的響應(yīng)時間內(nèi)完成數(shù)據(jù)的加載、讀取,并保證數(shù)據(jù)的正確性和可用性。要完成以上要求,需要更進(jìn)一步的研究存儲與管理技術(shù)。
由于在線 Web 應(yīng)用對交互性、穩(wěn)定性有較高的要求,在進(jìn)行大數(shù)據(jù)存儲設(shè)計時主要優(yōu)先考慮數(shù)據(jù)的高可用性、高性能和可擴展性[4]。
(1)高可用性
通過多機器、多份數(shù)據(jù)副本的冗余機制避免單點故障,同時支持在線故障節(jié)點數(shù)據(jù)重建與恢復(fù),支持Web 應(yīng)用的不同粒度在線數(shù)據(jù)遷移、備份與恢復(fù),保證面對各種異常時可以提供正常服務(wù)的能力。
(2)高性能
采用內(nèi)存數(shù)據(jù)庫和分布式數(shù)據(jù)庫相結(jié)合的方式,提高整個大數(shù)據(jù)存儲系統(tǒng)的吞吐能力以及系統(tǒng)的響應(yīng)時間,其查詢、寫入性能隨分布式存儲集群規(guī)模的擴展同步提升,不造成存儲與應(yīng)用的性能瓶頸。
(3)可擴展性
采用分片的方式將數(shù)據(jù)拆分,分散到不同的數(shù)據(jù)庫實例上進(jìn)行“負(fù)載分流”。同時在高速磁盤或內(nèi)存數(shù)據(jù)庫中存儲整個存儲系統(tǒng)的全局視圖保證存儲的高效運轉(zhuǎn)。
在互聯(lián)網(wǎng)出現(xiàn)之前,數(shù)據(jù)主要是人機會話方式產(chǎn)生的,以結(jié)構(gòu)化數(shù)據(jù)為主。應(yīng)用系統(tǒng)主要采用傳統(tǒng)的RDBMS 來管理這些數(shù)據(jù)。系統(tǒng)的數(shù)據(jù)增長緩慢、系統(tǒng)都比較孤立,用傳統(tǒng)數(shù)據(jù)庫基本可以滿足各類應(yīng)用開發(fā)。而隨著互聯(lián)網(wǎng)和 Web 應(yīng)用的出現(xiàn)和快速發(fā)展,尤其是移動互聯(lián)網(wǎng)的發(fā)展,加上數(shù)碼設(shè)備的大規(guī)模使用,如今數(shù)據(jù)的主要來源已經(jīng)不是人機會話了,而是通過設(shè)備、服務(wù)器、應(yīng)用自動產(chǎn)生的。傳統(tǒng)行業(yè)的數(shù)據(jù)同時也多起來了,比如各種用戶行為數(shù)據(jù)、定位數(shù)據(jù)、圖片、視頻、氣象、地震、醫(yī)療等等,這些數(shù)據(jù)以非結(jié)構(gòu)、半結(jié)構(gòu)化為主。目前的“大數(shù)據(jù)應(yīng)用”主要是對各類數(shù)據(jù)進(jìn)行整理、交叉分析、比對,對數(shù)據(jù)進(jìn)行深度挖掘,對用戶提供自助的即席、迭代分析能力。還有一類就是對非結(jié)構(gòu)化數(shù)據(jù)的特征提取,以及半結(jié)構(gòu)化數(shù)據(jù)的內(nèi)容檢索、理解等。傳統(tǒng)數(shù)據(jù)庫對這類需求和應(yīng)用無論在技術(shù)上還是功能上都幾乎束手無策。
為了滿足 Web 應(yīng)用對于大數(shù)據(jù)存儲的需求,本文設(shè)計了一種新型的分布式數(shù)據(jù)庫處理架構(gòu)(見圖1所示),其架構(gòu)主要包括分布式數(shù)據(jù)庫引擎和分布式數(shù)據(jù)存儲節(jié)點兩個部分。分布式數(shù)據(jù)庫引擎在現(xiàn)有結(jié)構(gòu)化數(shù)據(jù)處理引擎的基礎(chǔ)上擴展文件處理的能力,統(tǒng)一提供連接池管理、驅(qū)動加載、事務(wù)處理和緩存管理等功能,優(yōu)化 SQL 解析、執(zhí)行和數(shù)據(jù)合并,同時在邏輯上將底層的眾多關(guān)系型數(shù)據(jù)庫和文件系統(tǒng)管理起來;分布式存儲節(jié)點將關(guān)重數(shù)據(jù)(如 Web 應(yīng)用中的全局視圖,用戶信息等)獨立存儲和加載,以提高數(shù)據(jù)查詢和讀取的效率,其他數(shù)據(jù)則采用列式存儲方式將各類數(shù)據(jù)進(jìn)行存儲、處理及同步[5–6]。通過將數(shù)據(jù)進(jìn)行劃分到不同的數(shù)據(jù)庫存儲節(jié)點中的方式,可以降低了普通數(shù)據(jù)庫面對海量數(shù)據(jù)時的壓力,充分利用各節(jié)點的計算資源,從而使整個架構(gòu)達(dá)到較高的性能。
圖1 新型的分布式數(shù)據(jù)庫處理架構(gòu)Fig.1 New distributed database processing architecture
在后臺存儲端,采用 MPP 架構(gòu)的新型數(shù)據(jù)庫集群,重點面向 Web 應(yīng)用中的大數(shù)據(jù),完成對搜索分析類應(yīng)用的支撐,運行環(huán)境多為低成本 PC Server,具有高性能和高擴展性的特點,在挖掘分析類應(yīng)用領(lǐng)域可以獲得較好的支撐。為了提高整個存儲系統(tǒng)的架構(gòu)性能,在兼顧性能、成本和容量的基礎(chǔ)上,采用了內(nèi)存數(shù)據(jù)庫和 MPP 數(shù)據(jù)庫進(jìn)行混合組網(wǎng),混合組網(wǎng)部署如圖2所示。通過數(shù)據(jù)同步總線將設(shè)定的同步數(shù)據(jù)定時同步至內(nèi)存數(shù)據(jù)庫中,提高分布式運算對數(shù)據(jù)高效存取的需求[7–8]。
在進(jìn)行數(shù)據(jù)同步過程中,主要有以下 3種方式:
(1)內(nèi)存數(shù)據(jù)庫數(shù)據(jù)的定時加載與更新:系統(tǒng)運轉(zhuǎn)初期,內(nèi)存數(shù)據(jù)庫按照設(shè)定的同步數(shù)據(jù)范圍從后臺數(shù)據(jù)庫加載業(yè)務(wù)數(shù)據(jù),完成數(shù)據(jù)的加載和同步更新;
(2)內(nèi)存數(shù)據(jù)庫后向的數(shù)據(jù)同步:當(dāng)內(nèi)存數(shù)據(jù)庫中存儲的數(shù)據(jù)中發(fā)生一些新數(shù)據(jù)或數(shù)據(jù)變更時,這些新數(shù)據(jù)或數(shù)據(jù)變更需要同步到后臺數(shù)據(jù)庫中進(jìn)行固化存儲;
(3)內(nèi)存數(shù)據(jù)庫之間的同步:在多臺內(nèi)存數(shù)據(jù)庫組合進(jìn)行負(fù)載均衡時,當(dāng)一臺內(nèi)存數(shù)據(jù)庫數(shù)據(jù)發(fā)生變化時,將其數(shù)據(jù)同步到后臺數(shù)據(jù)庫后,還需要將數(shù)據(jù)向其他內(nèi)存數(shù)據(jù)庫進(jìn)行同步。
在進(jìn)行數(shù)據(jù)存儲時,不僅需要考慮系統(tǒng)的整體構(gòu)架,同時還要重視數(shù)據(jù)庫的物理設(shè)計,數(shù)據(jù)庫的物理設(shè)計對數(shù)據(jù)庫的性能影響有時遠(yuǎn)比其他因素重要。本文提出的分布式數(shù)據(jù)庫處理架構(gòu)采用了數(shù)據(jù)分區(qū)技術(shù)來提升整個存儲系統(tǒng)的性能,在特定的SQL 操作中減少數(shù)據(jù)讀寫的總量以縮減響應(yīng)時間[9]。數(shù)據(jù)分區(qū)技術(shù)中采用了垂直(縱向)拆分和水平(橫向)拆分兩種方式。
垂直(縱向)拆分:這種分區(qū)方式一般來說是通過對表的垂直劃分來減少目標(biāo)表的寬度,使某些特定的列被劃分到特定的分區(qū),每個分區(qū)都包含了其中的列所對應(yīng)的行。由于在一個大型的數(shù)據(jù)庫中表和表之間的數(shù)據(jù)很多是沒有關(guān)系的,或者更加不需要(join)操作,理論上就應(yīng)該把他們分別放到不同的服務(wù)器。例如用戶的收藏夾的數(shù)據(jù)和博客的數(shù)據(jù)庫就可以放到兩個獨立的服務(wù)器。
水平(橫向)拆分:這種形式分區(qū)是對表的行進(jìn)行分區(qū),通過這樣的方式不同分組里面的物理列分割的數(shù)據(jù)集得以組合,從而進(jìn)行個體分割(單分區(qū))或集體分割(1個或多個分區(qū))。所有在表中定義的列在每個數(shù)據(jù)集中都能找到,所以表的特性依然得以保持。通過將一個表的數(shù)據(jù)劃分到不同的數(shù)據(jù)庫,大大緩解單表的存儲壓力,但是兩個數(shù)據(jù)庫的表結(jié)構(gòu)一樣。怎么劃分,應(yīng)該根據(jù)一定的規(guī)則,可以根據(jù)數(shù)據(jù)的產(chǎn)生者來做引導(dǎo),上面的數(shù)據(jù)是由人產(chǎn)生的,可以根據(jù)人的id來劃分?jǐn)?shù)據(jù)庫。然后再根據(jù)一定的規(guī)則,先獲知數(shù)據(jù)在哪個數(shù)據(jù)庫,這樣就可以解決大數(shù)據(jù)存儲的性能問題。
大數(shù)據(jù)的出現(xiàn),開啟了一次重大的時代轉(zhuǎn)型.在前期IT發(fā)展的時代,技術(shù)是大家關(guān)注的重點,技術(shù)推動了數(shù)據(jù)的發(fā)展;如今,隨著數(shù)據(jù)的價值凸顯,信息的重要性日益提高,今后將是數(shù)據(jù)推動技術(shù)的進(jìn)步[8–9]。在不遠(yuǎn)的將來,大數(shù)據(jù)的重心將從存儲和傳輸,過渡到數(shù)據(jù)的挖掘和應(yīng)用,這將更加深刻影響企業(yè)的商業(yè)模式。