企業(yè)應(yīng)用云存儲(chǔ)技術(shù)探索

責(zé)任編輯:hli

作者:李希明

2012-02-27 11:15:40

摘自:機(jī)房

云存儲(chǔ)技術(shù)最早來(lái)源于那些互聯(lián)網(wǎng)企業(yè),這也是可以理解的,畢竟這些企業(yè)所面臨的訪問(wèn)量也是之前任何應(yīng)用所不曾遇到的。

前言
  
“云計(jì)算將帶來(lái)一場(chǎng)革命”。在如今這個(gè)概念滿天飛的時(shí)代,這是否又是一次商業(yè)炒作?本文不想對(duì)此進(jìn)行評(píng)論,而更愿意關(guān)注這背后帶來(lái)的變化。技術(shù)革命一定是源于某項(xiàng)技術(shù)突破,那么云計(jì)算又是源于何?從技術(shù)的視角看,云計(jì)算所突破的就是海量存儲(chǔ)技術(shù)以及在此基礎(chǔ)上的并行計(jì)算技術(shù)的突破。正是這些突破,造就了諸如Google、Facebook、Twitter這些新興互聯(lián)網(wǎng)企業(yè)。另一方面企業(yè)信息系統(tǒng)正日益變得復(fù)雜與龐大,上述技術(shù)突破展現(xiàn)出來(lái)的幾乎無(wú)限的擴(kuò)展、海量計(jì)算以及高可用的特性正是企業(yè)所迫切需要的。

本文將就企業(yè)信息系統(tǒng)中如何更好應(yīng)用上述技術(shù)進(jìn)行探索。在討論云存儲(chǔ)技術(shù)的之前,我們來(lái)回顧一下現(xiàn)在企業(yè)所使用的關(guān)系型數(shù)據(jù)庫(kù)所存在的問(wèn)題。

一、關(guān)系型數(shù)據(jù)庫(kù)的問(wèn)題
  
1970年IBM的EdgarF.Codd博士發(fā)表一篇著名的論文《一種用于大規(guī)模共享數(shù)據(jù)存儲(chǔ)系統(tǒng)的關(guān)系數(shù)據(jù)模型》,由此奠定了現(xiàn)在諸如Oracle、MSSQL、MySQL、Postgres等關(guān)系型數(shù)據(jù)庫(kù)的理論基礎(chǔ)。40年過(guò)去了,關(guān)系型數(shù)據(jù)庫(kù)不可辯駁地坐上了數(shù)據(jù)世界中的頭把交椅。如此成功的技術(shù)會(huì)有什么問(wèn)題?

問(wèn)題來(lái)自于訪問(wèn)量急劇增長(zhǎng)所帶來(lái)的可擴(kuò)展性。所有具有最基本功能的關(guān)系型數(shù)據(jù)庫(kù)都會(huì)支持join操作,不過(guò)join操作可能會(huì)很慢。由于數(shù)據(jù)庫(kù)通常依靠事務(wù)來(lái)保證一致性,而事務(wù)需要鎖住數(shù)據(jù)庫(kù)的一部分,使之不能被其他用戶訪問(wèn)。因?yàn)殒i本身意味著競(jìng)爭(zhēng)同一數(shù)據(jù)的用戶會(huì)被放入隊(duì)列,等待獲得讀寫(xiě)權(quán)限,這在高負(fù)荷的情況下可能會(huì)成為系統(tǒng)的死穴。

通常我們會(huì)用下面幾種方法解決上述問(wèn)題:

提升硬件能力,如增加內(nèi)存、用更快的處理器或硬盤(pán),這被稱(chēng)之為垂直擴(kuò)展,可解一時(shí)之憂。

增加新的計(jì)算機(jī),構(gòu)成數(shù)據(jù)庫(kù)集群。不過(guò),這樣就會(huì)在正常使用及故障時(shí)遇到數(shù)據(jù)復(fù)制與一致性問(wèn)題。

更新數(shù)據(jù)庫(kù)管理系統(tǒng)的配置。例如要優(yōu)化數(shù)據(jù)用來(lái)寫(xiě)底層文件系統(tǒng)的通道。

審視自己的應(yīng)用,優(yōu)化索引、優(yōu)化查詢(xún)。不過(guò),當(dāng)我們的應(yīng)用達(dá)到這個(gè)規(guī)模的時(shí)候,恐怕不太會(huì)完全沒(méi)有做過(guò)索引和查詢(xún)優(yōu)化。那么,只好重新審視所有數(shù)據(jù)庫(kù)的訪問(wèn)代碼,想發(fā)現(xiàn)零星的可以調(diào)優(yōu)的機(jī)會(huì),這是一件相當(dāng)頭疼的事情。

增加一個(gè)緩存層?,F(xiàn)在我們又需要面臨更新緩存和更新數(shù)據(jù)庫(kù)的一致性問(wèn)題了,對(duì)于集群來(lái)說(shuō),問(wèn)題更加嚴(yán)重了。

審視我們想要的查詢(xún),復(fù)制那些訪問(wèn)頻率較高的數(shù)據(jù),讓它們更接近于查詢(xún)想要得到的形式,這個(gè)過(guò)程被稱(chēng)為反范式化,也就是說(shuō)違反了Codd提出的關(guān)系模型12條準(zhǔn)則。這時(shí)我們只能安慰自己說(shuō)我們是生活在現(xiàn)實(shí)世界之中。

這一幕是何等熟悉,現(xiàn)如今的企業(yè)應(yīng)用的規(guī)模已經(jīng)遠(yuǎn)不是Codd提出關(guān)系模型的年代所能夠想象的。TB級(jí)別的數(shù)據(jù)庫(kù)已經(jīng)并不罕見(jiàn),一些數(shù)據(jù)表動(dòng)輒上億條記錄,甚至幾十億條記錄。筆者遇到的一位客戶僅每年增長(zhǎng)的數(shù)據(jù)量就達(dá)到了3TB,要知道這一數(shù)據(jù)在5年前僅有大約500GB。這樣的數(shù)據(jù)量已經(jīng)開(kāi)始給構(gòu)建在此之上的企業(yè)應(yīng)用造成巨大的壓力。我們接下來(lái)看看云存儲(chǔ)技術(shù)又是如何解決這一問(wèn)題的。

二、云存儲(chǔ)技術(shù)帶來(lái)什么
  
云存儲(chǔ)技術(shù)最早來(lái)源于那些互聯(lián)網(wǎng)企業(yè),這也是可以理解的,畢竟這些企業(yè)所面臨的訪問(wèn)量也是之前任何應(yīng)用所不曾遇到的。從一個(gè)數(shù)據(jù)就可以得知:現(xiàn)在支付寶每天新增的記錄數(shù)為3億條。顯然這樣的數(shù)據(jù)量以及在此之上的運(yùn)算,不是傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)可以支撐的了。

這里所說(shuō)的云存儲(chǔ)技術(shù)并非特指某項(xiàng)技術(shù),而是一大類(lèi)技術(shù)的統(tǒng)稱(chēng),一般來(lái)自只要是具有以下特征的數(shù)據(jù)庫(kù)都可以被看作是云存儲(chǔ)技術(shù)。首先是幾乎無(wú)限的擴(kuò)展能力,可以支撐幾百TB直至PB級(jí)的數(shù)據(jù);然后是采用了并行計(jì)算模式,從而獲得海量運(yùn)算能力。簡(jiǎn)而言之,就是當(dāng)計(jì)算能力不足,無(wú)論是存儲(chǔ)還是運(yùn)算,對(duì)于需求提出方而言,就是簡(jiǎn)單的增加機(jī)器即可實(shí)現(xiàn)。更進(jìn)一步的特征便是高可用性,也就是說(shuō),在任何時(shí)候都能夠保證系統(tǒng)正常使用,即便有機(jī)器發(fā)生故障。目前常見(jiàn)的符合這樣特征的系統(tǒng),有Google的GFS以及BigTable,Apache基金會(huì)的Hadoop(HDFS和HBase),最初來(lái)自于Amazon現(xiàn)在也屬于Apache基金會(huì)的Cassandra,此外還有Mongo DB、Couch DB、Hypertable、Redis等等。

作為可擴(kuò)展性是指系統(tǒng)架構(gòu)可以讓系統(tǒng)提供更多的服務(wù)而不降低使用性能的特性。通過(guò)現(xiàn)有的機(jī)器增加硬件的容量、內(nèi)存進(jìn)行垂直擴(kuò)展,是最簡(jiǎn)單的達(dá)到可擴(kuò)展性的手段,但這有個(gè)限度。而水平擴(kuò)展則需要增加更多機(jī)器,每臺(tái)機(jī)器提供全部或部分?jǐn)?shù)據(jù),這樣所有主機(jī)都不必負(fù)擔(dān)全部業(yè)務(wù)請(qǐng)求。但軟件自己需要有內(nèi)部機(jī)制來(lái)保證集群中節(jié)點(diǎn)間的數(shù)據(jù)同步。而云存儲(chǔ)技術(shù)所帶來(lái)的可擴(kuò)展性幾乎是無(wú)限的,并且對(duì)于投資者而言投入(硬件投資)與產(chǎn)出(提供更多的服務(wù))幾乎是線性的。[page]  水平擴(kuò)展說(shuō)到底就是使用更多的主機(jī)來(lái)承擔(dān)運(yùn)算。假設(shè)一臺(tái)主機(jī)在運(yùn)行一年的時(shí)間里發(fā)生故障的概率是n,那么20臺(tái)主機(jī)在運(yùn)行一年的時(shí)間里發(fā)生故障的概率則為20×n,由此看出當(dāng)某個(gè)集群中主機(jī)的數(shù)量達(dá)到一定程度,在一年中發(fā)生故障的概率將會(huì)非常大,甚至每天有機(jī)器發(fā)生故障也不是危言聳聽(tīng)。許多云存儲(chǔ)技術(shù)都將此作為基本的設(shè)計(jì)前提,因此云存儲(chǔ)技術(shù)天生具有良好的高可用性與容錯(cuò)。

怎么樣?是否很誘人。這么好還不如把現(xiàn)在的這些企業(yè)應(yīng)用都替換了。先別著急,享受這些好處也是有代價(jià)的。說(shuō)到這里就不得不提EricBrewer的CAP理論(2002年被理論證明)。依據(jù)這個(gè)理論,對(duì)于一個(gè)大規(guī)模分布式數(shù)據(jù)庫(kù)系統(tǒng),有以下三個(gè)需求:
一致性(Consistency):對(duì)于所有的數(shù)據(jù)庫(kù)客戶端使用同樣的查詢(xún)都可以得到同樣的結(jié)果,即使是有并發(fā)更新的時(shí)候也是如此。

可用性(Availability):所有的數(shù)據(jù)庫(kù)客戶端總是可以讀寫(xiě)數(shù)據(jù)。

分區(qū)耐受性(Partition Tolerance):數(shù)據(jù)庫(kù)可以分散到多臺(tái)機(jī)器上,即使發(fā)生網(wǎng)路故障,被分成多個(gè)分區(qū),依然可以提供服務(wù)。

CAP理論指出,同時(shí)只能具有這三個(gè)特性中的兩個(gè)。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)所強(qiáng)調(diào)的是一致性(C)與可用性(A),而在分區(qū)耐受性(P)的方面的支持十分有限,這一點(diǎn)從本質(zhì)上揭示了上述關(guān)系型數(shù)據(jù)庫(kù)的問(wèn)題。再來(lái)看云存儲(chǔ)技術(shù),都特別強(qiáng)調(diào)了分區(qū)耐受性(P)從而彌補(bǔ)關(guān)系型數(shù)據(jù)庫(kù)在此方面的不足,接下來(lái)的區(qū)別就是選擇可用性(A)還是一致性(C)了,反正是不能都選。對(duì)于CP系統(tǒng),放棄的是可用性(A),你的數(shù)據(jù)將保持一致性,但如果有節(jié)點(diǎn)發(fā)生故障,仍然會(huì)有部分?jǐn)?shù)據(jù)無(wú)法訪問(wèn);而對(duì)于AP系統(tǒng),放棄的則是一致性(C),那么你的系統(tǒng)就有可能返回不太精確的數(shù)據(jù)。

以上技術(shù)特點(diǎn)決定了云存儲(chǔ)技術(shù)有一些特別擅長(zhǎng)的領(lǐng)域。例如訪問(wèn)流量可能會(huì)非常大,即隨時(shí)訪問(wèn)數(shù)據(jù)量非常大,從而需要大規(guī)模分布式部署??疾熳x寫(xiě)操作的比例,特別適合統(tǒng)計(jì)分析型工作,但是寫(xiě)可能是密集型的。有時(shí)對(duì)于數(shù)據(jù)一致性要求并不高,即可以容忍當(dāng)某個(gè)數(shù)據(jù)被寫(xiě)入后,在一段合理的時(shí)間內(nèi)可能會(huì)有部分用戶讀到的是寫(xiě)入之前的數(shù)據(jù),搜索業(yè)務(wù)就是一個(gè)典型例子。

但同時(shí)也有些計(jì)算領(lǐng)域并非云存儲(chǔ)技術(shù)擅長(zhǎng)。例如事務(wù)密集型計(jì)算,這類(lèi)計(jì)算對(duì)一致性要求非常高。相比讀操作,寫(xiě)操作會(huì)頻繁持續(xù)發(fā)生。在企業(yè)中存在大量這種類(lèi)型的計(jì)算。

通過(guò)以上分析,我們發(fā)現(xiàn),“年輕的”云存儲(chǔ)技術(shù)并非完美無(wú)暇,看似“古老的”關(guān)系型數(shù)據(jù)庫(kù)在其面前并非一無(wú)是處。云存儲(chǔ)技術(shù)現(xiàn)在不是,將來(lái)也不應(yīng)該是關(guān)系型數(shù)據(jù)庫(kù)的終結(jié)者。在我們?yōu)樗宫F(xiàn)出來(lái)的那些令人激動(dòng)的特性面前,必須冷靜分析,這是否就是企業(yè)運(yùn)算所需要的?至少現(xiàn)在看來(lái)不是全部。

三、企業(yè)應(yīng)用探索
  
顯然不是所有的企業(yè)計(jì)算都適合使用云存儲(chǔ),采用關(guān)系型數(shù)據(jù)庫(kù)也許仍然是目前的最佳選擇。問(wèn)題就變成了應(yīng)該將其用在哪里?接下來(lái)將會(huì)列舉兩個(gè)目前特別適合采取云存儲(chǔ)技術(shù)的應(yīng)用領(lǐng)域,這兩個(gè)案例都來(lái)自于筆者比較熟悉的商業(yè)應(yīng)用領(lǐng)域。

領(lǐng)域一、數(shù)據(jù)倉(cāng)庫(kù)
  
數(shù)據(jù)倉(cāng)庫(kù)將集中來(lái)自幾乎所有業(yè)務(wù)生產(chǎn)系統(tǒng)的數(shù)據(jù),對(duì)外提供企業(yè)的各種查詢(xún)報(bào)表以及數(shù)據(jù)分析。從功能看這是一個(gè)典型的統(tǒng)計(jì)分析型工作,日常大量發(fā)生的都是讀操作。另一方面需要周期性地從業(yè)務(wù)生產(chǎn)系統(tǒng)收集原始數(shù)據(jù),并可能需要對(duì)其進(jìn)行進(jìn)一步的數(shù)據(jù)加工,這一過(guò)程是寫(xiě)密集的。數(shù)據(jù)量無(wú)疑會(huì)是非常大的,實(shí)際生產(chǎn)中的數(shù)據(jù)倉(cāng)庫(kù)通常需要保留幾年至十幾年的數(shù)據(jù),可以達(dá)到TB級(jí),其中一些數(shù)據(jù)表可能會(huì)達(dá)到幾十億條甚至更多的記錄數(shù)。以上這些需求特點(diǎn)決定了其特別適合采用云存儲(chǔ)技術(shù)。

領(lǐng)域二、企業(yè)統(tǒng)一資料庫(kù)
  
所謂企業(yè)統(tǒng)一資料庫(kù),就是將企業(yè)運(yùn)行中所基于的各種資料集中到一個(gè)應(yīng)用系統(tǒng)中進(jìn)行統(tǒng)一管理,再由這個(gè)系統(tǒng)以服務(wù)的方式,提供給所有需要的其它業(yè)務(wù)系統(tǒng),所提供的服務(wù)除普通查詢(xún)外,還應(yīng)該包含基于搜索引擎的資料搜索服務(wù),包括商品(以及商品類(lèi)別、品牌)、合作伙伴(供應(yīng)商、客戶、加盟商等)、合同(采購(gòu)合同、銷(xiāo)售合同、加盟合同等)等。在這個(gè)應(yīng)用中讀操作發(fā)生的頻率將遠(yuǎn)大于寫(xiě)操作,尤其當(dāng)其以在線方式提供資料服務(wù)時(shí)更是如此,例如為網(wǎng)店提供資料服務(wù)。

需要說(shuō)明的是,筆者所在的海鼎公司對(duì)以上這兩個(gè)方向都已經(jīng)做了相當(dāng)?shù)墓ぷ?。企業(yè)統(tǒng)一資料庫(kù)的第一個(gè)版本已經(jīng)完成開(kāi)發(fā),并將在今年10月份在東莞美宜佳投入使用。而下一代的數(shù)據(jù)倉(cāng)庫(kù)解決方案已經(jīng)完成了前期預(yù)研工作,開(kāi)始進(jìn)入開(kāi)發(fā)設(shè)計(jì)階段。

應(yīng)該說(shuō)包括云存儲(chǔ)在內(nèi)的一系列云計(jì)算技術(shù)都還處于剛開(kāi)始的階段。就如IT歷史上的其它新技術(shù)一樣,在為我們展示出令人激動(dòng)的新特性同時(shí),還有很多不足。這些不足既包括技術(shù)本身還有很多有待完善的地方,也包括圍繞其的后續(xù)開(kāi)發(fā)工具不足導(dǎo)致的進(jìn)入門(mén)檻偏高,以及與傳統(tǒng)技術(shù)的融合程度不高等等。但這些并不妨礙它未來(lái)美好的明天。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)