有時(shí)候了解軟件產(chǎn)品的最好方法是看看它是怎么用的。它可以解決什么問題和這些解決方案如何適用于大型應(yīng)用架構(gòu),能夠告訴你很多。因?yàn)?span lang="EN-US" xml:lang="EN-US">HBase有許多公開的產(chǎn)品部署,我們正好可以這么做。本章節(jié)將詳細(xì)介紹一些人們成功使用HBase的使用場(chǎng)景。
注意:不要自我限制,認(rèn)為HBase只能解決這些使用場(chǎng)景。它是一個(gè)初生的技術(shù),根據(jù)使用場(chǎng)景進(jìn)行創(chuàng)新正驅(qū)動(dòng)著系統(tǒng)的發(fā)展。如果你有新想法,認(rèn)為可以受益于HBase提供的功能,試試吧。社區(qū)很樂于幫助你,也會(huì)從你的經(jīng)驗(yàn)中學(xué)習(xí)。這正是開源軟件精神。
HBase仿效了Google的BigTable,讓我們開始探索典型的BigTable問題:存儲(chǔ)互聯(lián)網(wǎng)。
搜索是一個(gè)定位你所關(guān)心的信息的行為:例如,搜索一本書的頁碼,其中含有你想讀的主題,或者網(wǎng)頁,其中含有你想找的信息。搜索含有特定詞語的文檔,需要查找索引,該索引提供了特定詞語和包含該詞語的所有文檔的映射。為了能夠搜索,首先必須建立索引。Google和其他搜索引擎正是這么做的。他們的文檔庫是整個(gè)互聯(lián)網(wǎng);搜索的特定詞語就是你在搜索框里敲入的任何東西。
BigTable,和模仿出來的HBase,為這種文檔庫提供存儲(chǔ),BigTable提供行級(jí)訪問,所以爬蟲可以插入和更新單個(gè)文檔。搜索索引可以基于BigTable 通過MapReduce計(jì)算高效生成。如果結(jié)果是單個(gè)文檔,可以直接從BigTable取出。支持各種訪問模式是影響 BigTable設(shè)計(jì)的關(guān)鍵因素。
建立互聯(lián)網(wǎng)索引
1 爬蟲持續(xù)不斷地抓取新頁面,這些頁面每頁一行地存儲(chǔ)到BigTable里。
2 MapReduce計(jì)算作業(yè)運(yùn)行在整張表上,生成索引,為網(wǎng)絡(luò)搜索應(yīng)用做準(zhǔn)備。
搜索互聯(lián)網(wǎng)
3 用戶發(fā)起網(wǎng)絡(luò)搜索請(qǐng)求。
4 網(wǎng)絡(luò)搜索應(yīng)用查詢建立好的索引,或者直接從BigTable直接得到單個(gè)文檔。
5 搜索結(jié)果提交給用戶。
講完典型HBase使用場(chǎng)景以后,我們來看看其他使用HBase的地方。愿意使用HBase的用戶數(shù)量在過去幾年里迅猛增長。部分原因在于HBase產(chǎn)品變得更加可靠和性能更好,更多原因在于越來越多的公司開始投入大量資源來支持和使用它。隨著越來越多的商業(yè)服務(wù)供應(yīng)商提供支持,用戶越發(fā)自信地把HBase應(yīng)用于關(guān)鍵應(yīng)用系統(tǒng)。一個(gè)設(shè)計(jì)初衷是用來存儲(chǔ)互聯(lián)網(wǎng)持續(xù)更新網(wǎng)頁副本的技術(shù),用在互聯(lián)網(wǎng)相關(guān)的其他方面也很是合適的。例如,HBase在社交網(wǎng)絡(luò)公司內(nèi)部和周圍各種各樣的需求中找到了用武之地。從存儲(chǔ)個(gè)人之間的通信信息,到通信信息分析,HBase成為Facebook,Twitter,和StumbleUpon等公司里的關(guān)鍵基礎(chǔ)架構(gòu)。
在這個(gè)領(lǐng)域,HBase有三種主要使用場(chǎng)景,但不限于這些。為了保持本節(jié)簡單明了,我們這里介紹主要的使用場(chǎng)景。
數(shù)據(jù)通常是細(xì)水長流,累加到已有數(shù)據(jù)庫以備將來使用,例如分析,處理和服務(wù)。許多HBase使用場(chǎng)景屬于這個(gè)類別——使用HBase作為數(shù)據(jù)存儲(chǔ),捕獲來自于各種數(shù)據(jù)源的增量數(shù)據(jù)。例如,這種數(shù)據(jù)源可能是網(wǎng)頁爬蟲(我們討論過的BigTable典型問題),可能是記錄用戶看了什么廣告和多長時(shí)間的廣告效果數(shù)據(jù),也可能是記錄各種參數(shù)的時(shí)間序列數(shù)據(jù)。我們討論幾個(gè)成功的使用場(chǎng)景和公司。
捕獲監(jiān)控參數(shù):OPENTSDB
服務(wù)于數(shù)百萬用戶的WEB產(chǎn)品的后臺(tái)基礎(chǔ)架構(gòu)一般都有數(shù)百或數(shù)千臺(tái)服務(wù)器。這些服務(wù)器承擔(dān)了各種功能——服務(wù)流量,捕獲日志,存儲(chǔ)數(shù)據(jù),處理數(shù)據(jù)等等。為了保持產(chǎn)品正常運(yùn)行,監(jiān)控服務(wù)器和上面運(yùn)行軟件的健康狀態(tài)是至關(guān)重要的(從OS到用戶交互應(yīng)用)。大規(guī)模監(jiān)控整個(gè)環(huán)境需要能夠采集和存儲(chǔ)來自于不同數(shù)據(jù)源的各種參數(shù)的監(jiān)控系統(tǒng)。每個(gè)公司有自己的辦法。一些公司使用商業(yè)工具來收集和展示參數(shù);而其他一些公司采用開源框架。
StumbleUpon 創(chuàng)建了一個(gè)開源框架,用來收集服務(wù)器的各種監(jiān)控參數(shù)。按照時(shí)間收集參數(shù)一般稱之為時(shí)間序列數(shù)據(jù):也就是說,按照時(shí)間順序收集和記錄數(shù)據(jù)。StumbleUpon 的開源框架叫做OpenTSDB,其含義是開放時(shí)間序列數(shù)據(jù)庫 Open Time Series Database 。這個(gè)框架使用HBase作為核心平臺(tái)來存儲(chǔ)和檢索所收集的參數(shù)。創(chuàng)建這個(gè)框架的目的是為了擁有一個(gè)可擴(kuò)展的監(jiān)控?cái)?shù)據(jù)收集系統(tǒng),一方面能夠存儲(chǔ)和檢索參數(shù)數(shù)據(jù)并保存很長時(shí)間,另一方面如果需要增加功能也可以添加各種新參數(shù)。StumbleUpon 使用OpenTSDB監(jiān)控所有基礎(chǔ)架構(gòu)和軟件,包括HBase機(jī)群自身。我們將在第7章作為建構(gòu)在HBase之上的示例應(yīng)用來詳細(xì)介紹OpenTSDB。
捕獲用戶交互數(shù)據(jù):Facebook和StumbleUpon
捕獲監(jiān)控?cái)?shù)據(jù)是一種使用方式。還有一種是捕獲用戶交互數(shù)據(jù)。如何跟蹤數(shù)百萬用戶在網(wǎng)站上的活動(dòng)?怎么知道哪一個(gè)網(wǎng)站功能是最受歡迎的?怎樣使得這一次的網(wǎng)頁瀏覽直接影響到下一次?例如,誰看了什么?某個(gè)按鈕被點(diǎn)擊了多少次?還記得Facebook和Stumble 里的Like按鈕和StumbleUpon 里的+1 按鈕嗎?是不是聽起來像是一個(gè)計(jì)數(shù)問題?每次用戶Like一個(gè)特定主題計(jì)數(shù)器增加一次。
StumbleUpon 在開始階段采用MySQL,但是隨著網(wǎng)站服務(wù)越來越流行,這個(gè)技術(shù)選擇遇到問題了。急劇增長的用戶在線負(fù)載需求遠(yuǎn)遠(yuǎn)超過了MySQL機(jī)群的能力,最終StumbleUpon 選擇HBase來替換這些機(jī)群。當(dāng)時(shí),HBase產(chǎn)品不能直接提供必須的功能。StumbleUpon 在HBase上做了一些小的開發(fā)改動(dòng),后來這些開發(fā)工作貢獻(xiàn)回了項(xiàng)目社區(qū)。
FaceBook使用HBase的計(jì)數(shù)器來計(jì)量人們Like特定網(wǎng)頁的次數(shù)。內(nèi)容原創(chuàng)人和網(wǎng)頁主人可以得到近乎實(shí)時(shí)的、多少用戶Like他們網(wǎng)頁的數(shù)據(jù)信息。他們可以因此更敏捷地判斷應(yīng)該提供什么內(nèi)容。Facebook 為此創(chuàng)建了一個(gè)叫Facebook Insight的系統(tǒng),該系統(tǒng)需要一個(gè)可擴(kuò)展的存儲(chǔ)系統(tǒng)。公司考慮了很多種可能,包括關(guān)系型數(shù)據(jù)庫、內(nèi)存數(shù)據(jù)庫、和Cassandra數(shù)據(jù)庫,最后決定使用HBase?;?span lang="EN-US" xml:lang="EN-US">HBase,Facebook 可以很方便地橫向擴(kuò)展服務(wù)規(guī)模,提供給數(shù)百萬用戶,也可以繼續(xù)使用他們已有的運(yùn)行大規(guī)模HBase機(jī)群的經(jīng)驗(yàn)。該系統(tǒng)每天處理數(shù)百億條事件,記錄數(shù)百個(gè)參數(shù)。
TELEMETRY:MOZILLA 和 TREND MICRO
軟件運(yùn)行數(shù)據(jù)和軟件質(zhì)量數(shù)據(jù),不像監(jiān)控參數(shù)數(shù)據(jù)那么簡單。例如,軟件崩潰報(bào)告是有用的軟件運(yùn)行數(shù)據(jù),經(jīng)常用來探究軟件質(zhì)量和規(guī)劃軟件開發(fā)路線圖。HBase可以成功地用來捕獲和存儲(chǔ)用戶計(jì)算機(jī)上生成的軟件崩潰報(bào)告。這種使用場(chǎng)景不像前兩種使用場(chǎng)景,和網(wǎng)絡(luò)服務(wù)應(yīng)用不一定有關(guān)系。
Mozilla基金會(huì)負(fù)責(zé)FireFox網(wǎng)絡(luò)瀏覽器和Thunderbird電郵客戶端兩個(gè)產(chǎn)品。這些工具安裝在全世界數(shù)百萬臺(tái)計(jì)算機(jī)上,支持各種操作系統(tǒng)。當(dāng)這些工具崩潰時(shí),會(huì)以Bug報(bào)告的形式返回一個(gè)軟件崩潰報(bào)告給Mozilla。Mozilla如何收集這些數(shù)據(jù)?收集后又是怎么使用呢?實(shí)際情況是這樣的,一個(gè)叫做Socorro的系統(tǒng)收集了這些報(bào)告,用來指導(dǎo)研發(fā)部門研制更穩(wěn)定的產(chǎn)品。Socorrade系統(tǒng)的數(shù)據(jù)存儲(chǔ)和分析建構(gòu)在HBase上。 [1]
采用HBase使得基本分析可以用到比以前多得多的數(shù)據(jù)。這種分析用來指導(dǎo)Mozilla的開發(fā)人員,使其更為專注,研制出Bug最少的版本。
Trend Micro為企業(yè)客戶提供互聯(lián)網(wǎng)安全和入侵管理服務(wù)。安全的重要環(huán)節(jié)是感知,日志收集和分析對(duì)于提供這種感知能力是至關(guān)重要的。Trend Micro使用HBase來管理網(wǎng)絡(luò)信譽(yù)數(shù)據(jù)庫,該數(shù)據(jù)庫需要行級(jí)更新和支持MapReduce批處理。有點(diǎn)像Mozilla的Socorro系統(tǒng),HBase也用來收集和分析日志活動(dòng),每天收集數(shù)十億條記錄。HBase中靈活的模式支持?jǐn)?shù)據(jù)結(jié)構(gòu)出現(xiàn)變化,當(dāng)分析流程重新調(diào)整時(shí)Trend Micro可以增加新屬性。
廣告效果和點(diǎn)擊流
過去的十年,在線廣告成為互聯(lián)網(wǎng)產(chǎn)品的一個(gè)主要收入來源。提供免費(fèi)服務(wù)給用戶,在用戶使用服務(wù)的時(shí)侯投放廣告給目標(biāo)用戶。這種精準(zhǔn)投放需要針對(duì)用戶交互數(shù)據(jù)做詳細(xì)的捕獲和分析,以便于理解用戶的特征。基于這種特征,選擇并投放廣告。精細(xì)的用戶交互數(shù)據(jù)帶來更好的模型,進(jìn)而導(dǎo)致更好的廣告投放效果和更多的收入。但這類數(shù)據(jù)有兩個(gè)特點(diǎn):它以連續(xù)流的形式出現(xiàn),它很容易按用戶劃分。理想情況下,這種數(shù)據(jù)一旦產(chǎn)生就能夠馬上使用,用戶特征模型可以沒有延遲地持續(xù)優(yōu)化——也就是說,以在線方式使用。
在線 VS 離線系統(tǒng)
在線和離線的術(shù)語多次出現(xiàn)。對(duì)于初學(xué)者來說,這些術(shù)語描述了軟件系統(tǒng)執(zhí)行的條件。在線系統(tǒng)需要低延遲。某些情況下,系統(tǒng)哪怕給出沒有答案的響應(yīng),也要比花了很長時(shí)間給出正確答案的響應(yīng)好。你可以把在線系統(tǒng)想象為一個(gè)跳著腳的沒有耐心的用戶。離線系統(tǒng)不需要低延遲,用戶可以等待答案,不期待馬上給出響應(yīng)。當(dāng)實(shí)現(xiàn)應(yīng)用系統(tǒng)時(shí)在線或者離線的目標(biāo)影響著許多技術(shù)決策。HBase是一個(gè)在線系統(tǒng)。和Hadoop MapReduce的緊密結(jié)合又賦予它離線訪問的能力。
HBase非常適合收集這種用戶交互數(shù)據(jù),HBase已經(jīng)成功地應(yīng)用在這種場(chǎng)合,它可以增量捕獲第一手點(diǎn)擊流和用戶交互數(shù)據(jù),然后用不同處理方式(MapReduce是其中一種)來處理數(shù)據(jù)(清理、裝飾、使用數(shù)據(jù))。在這種公司,你會(huì)發(fā)現(xiàn)很多HBase案例。
傳統(tǒng)數(shù)據(jù)庫的一個(gè)最大使用場(chǎng)合是為用戶提供內(nèi)容服務(wù)。各種各樣的數(shù)據(jù)庫支撐著提供各種內(nèi)容服務(wù)的應(yīng)用系統(tǒng)。多年來這些應(yīng)用在發(fā)展,因此他們所依賴的數(shù)據(jù)庫也在發(fā)展。用戶希望使用和交互的內(nèi)容種類越來越多。此外,由于互聯(lián)網(wǎng)迅猛的增長以及終端設(shè)備更加迅猛的增長,對(duì)這些應(yīng)用的連接方式提出了更高的要求。各種各樣的終端設(shè)備帶來了一個(gè)挑戰(zhàn):不同種類設(shè)備需要以不同格式使用同樣的內(nèi)容。
一方面是用戶使用內(nèi)容 User Consuming Content,對(duì)應(yīng)另一面是用戶生成內(nèi)容 User GenerateContent。Tweete、Facebook帖子、Instagram 圖片和微博等都是這樣的例子。
他們相同的地方是使用和生成了許多內(nèi)容。大量用戶通過應(yīng)用系統(tǒng)來使用和生成內(nèi)容,而這些應(yīng)用系統(tǒng)需要Hbase作為基礎(chǔ)。
集中的內(nèi)容系統(tǒng)系統(tǒng) CMS可以存儲(chǔ)內(nèi)容和提供服務(wù)。但是當(dāng)用戶越來越多,生成內(nèi)容越來越多的時(shí)候,就需要一個(gè)更具擴(kuò)展性的CMS解決方案。
這種可擴(kuò)展的CMS往往使用Hbase作為基礎(chǔ),再加上其他的開源框架,例如Solr,構(gòu)成一個(gè)完整的功能組合。
Salesforce提供托管CRM產(chǎn)品,這個(gè)產(chǎn)品通過網(wǎng)絡(luò)瀏覽器界面提交給用戶使用,顯示出了豐富的關(guān)系型數(shù)據(jù)庫功能。在Google發(fā)表NoSQL原型概念論文之前很長一段時(shí)間,生產(chǎn)環(huán)境中使用的大型關(guān)鍵數(shù)據(jù)庫最合理的選擇就是商用關(guān)系型數(shù)據(jù)庫。多年來,Salesforce通過數(shù)據(jù)庫分庫和尖端性能優(yōu)化這些手段擴(kuò)展系統(tǒng),達(dá)到每天處理數(shù)億事務(wù)的能力。
當(dāng)Salesforce看到分布式數(shù)據(jù)庫這樣的選擇后,他們?cè)u(píng)測(cè)了所有NoSQL技術(shù)的產(chǎn)品,最后決定部署HBase。這個(gè)選擇的主要原因是有來由的。BigTable類型的系統(tǒng)是唯一的可以無縫融合水平擴(kuò)展能力和行級(jí)強(qiáng)一致性的結(jié)構(gòu)方式。此外,Salesforce已經(jīng)把Hadoop用于大型離線批處理任務(wù),他們可以繼續(xù)利用Hadoop上面積累的寶貴經(jīng)驗(yàn)。
URL短鏈
最近一段時(shí)間URL短鏈非常流行,許多類似產(chǎn)品破土而出。StumbleUpon使用名字為su.pr.的短鏈產(chǎn)品,這個(gè)產(chǎn)品以HBase為基礎(chǔ)。這個(gè)產(chǎn)品用來縮短URL,存儲(chǔ)大量的短鏈以及和原始長鏈接的映射關(guān)系,HBase幫助產(chǎn)品實(shí)現(xiàn)擴(kuò)展能力。
用戶模型服務(wù)
經(jīng)過HBase處理過的內(nèi)容往往并不直接提交給用戶使用,而是用來決定應(yīng)該提交給用戶什么內(nèi)容。這種中間處理數(shù)據(jù)用來豐富用戶的交互。還記得前面提到的廣告服務(wù)場(chǎng)景里的用戶模式嗎?用戶模式(或者說模型)就是來自于HBase。這種模型多種多樣,可以用于多種不同場(chǎng)景,例如,針對(duì)特定用戶投放什么廣告的決定,用戶在電商門戶購物時(shí)實(shí)時(shí)報(bào)價(jià)的決定,用戶在搜索引擎檢索時(shí)增加背景信息和關(guān)聯(lián)內(nèi)容,等等。很多這種使用案例可能不便于公開討論,說多了我們就麻煩了。
當(dāng)用戶在電商網(wǎng)站上發(fā)生交易時(shí),用戶模型服務(wù)可以用來實(shí)時(shí)報(bào)價(jià)。這種模型需要基于不斷產(chǎn)生的新用戶數(shù)據(jù)持續(xù)優(yōu)化。
各種社交網(wǎng)絡(luò)破土而出,世界變得越來越小。社叫網(wǎng)站的一個(gè)重要作用就是幫助人們進(jìn)行交互。有時(shí)交互在群組內(nèi)發(fā)生(小規(guī)模和大規(guī)模);有時(shí)交互在兩個(gè)個(gè)人之見發(fā)生。想想看,數(shù)億人通過社交網(wǎng)絡(luò)進(jìn)行對(duì)話的場(chǎng)面。只是和遠(yuǎn)處的人通話是不夠的,人們還想看看和其他人通話的歷史記錄。社交網(wǎng)絡(luò)公司感到幸運(yùn)的是,存儲(chǔ)很廉價(jià),大數(shù)據(jù)領(lǐng)域的創(chuàng)新可以幫助他們充分利用廉價(jià)的存儲(chǔ)。
Facebook短信系統(tǒng)經(jīng)常被公開討論,他也可能極大地驅(qū)動(dòng)了HBase的發(fā)展。當(dāng)你使用Facebook時(shí),某個(gè)時(shí)候你可能會(huì)收到或者發(fā)送短信給你的朋友。Facebook的這個(gè)特性完全依賴于HBase。用戶讀寫的所有短信都存儲(chǔ)在HBase里。支持Facebook短信的系統(tǒng)需要具備:高的寫吞吐量,極大的表,數(shù)據(jù)中心內(nèi)的強(qiáng)一致性。除了短信系統(tǒng)之外,使用HBase的其他應(yīng)用系統(tǒng)另外要求:高的讀吞吐量,計(jì)數(shù)器吞吐量,自動(dòng)分庫。工程師們發(fā)現(xiàn)HBase是個(gè)理想的解決方案,因?yàn)樗С炙羞@些要求,他擁有一個(gè)活躍的用戶社區(qū),Facebook運(yùn)營團(tuán)隊(duì)在Hadoop部署上有豐富經(jīng)驗(yàn),等等。在“Hadoop goes realtime at Facebook”這篇文章里,Facebook工程師解釋了這個(gè)決定背后的邏輯和顯示了他們使用Hadoop和HBase建設(shè)在線系統(tǒng)的經(jīng)驗(yàn)。
Facebook工程師在HbaseCon 2012會(huì)議上分享了一些有趣的數(shù)據(jù)。在這個(gè)平臺(tái)上每天交換數(shù)十億條短信,每天帶來大約750億次操作。尖峰時(shí)刻,Facebook的HBase集群每秒發(fā)生150萬次操作。從數(shù)據(jù)規(guī)模角度看,Facebook的集群每月增加250TB的新數(shù)據(jù),這可能是已知的最大的HBase部署,無論是服務(wù)器的數(shù)量還是服務(wù)器所承載的用戶量。
上述一些示例,解釋了HBase如何解決一些有趣的老問題和新問題。你可能注意到一個(gè)相同點(diǎn):HBase可以用來對(duì)相同數(shù)據(jù)進(jìn)行在線服務(wù)和離線處理。這正是HBase的獨(dú)到之處。
聯(lián)系客服