翟金亭 吳欽卿
【摘要】 當(dāng)今,互聯(lián)網(wǎng)超高速發(fā)展,互聯(lián)網(wǎng)站點(diǎn)暴增,網(wǎng)站的訪(fǎng)問(wèn)量成指數(shù)性激增。適應(yīng)高并發(fā)的網(wǎng)絡(luò)站點(diǎn)急需建立,目前大型網(wǎng)站的解決高并發(fā)訪(fǎng)問(wèn)方式是采用SOA架構(gòu)體系[1]。本系統(tǒng)選擇Dubbo服務(wù)框架,實(shí)現(xiàn)資源搜索服務(wù),資源分析服務(wù),數(shù)據(jù)庫(kù)實(shí)現(xiàn)讀寫(xiě)分離,redis讀寫(xiě)分離。本系統(tǒng)主要介紹基于Dubbo技術(shù)開(kāi)發(fā)的分布式視頻分享系統(tǒng)。
【關(guān)鍵字】 Dubbo 分布式架構(gòu) 負(fù)載均衡
互聯(lián)網(wǎng)時(shí)代的到來(lái)催生大量的互聯(lián)網(wǎng)站點(diǎn),隨著訪(fǎng)問(wèn)量的增加,如何應(yīng)對(duì)高并發(fā)帶來(lái)的壓力已成為任何一個(gè)大中型網(wǎng)站都必須考慮的問(wèn)題。視頻分享系統(tǒng)就是一個(gè)分布式系統(tǒng)[3],它是基于Dubbo服務(wù)框架開(kāi)發(fā)的,同時(shí)使用了數(shù)據(jù)庫(kù)讀寫(xiě)分離、redis讀寫(xiě)分等離負(fù)載均衡技術(shù)。
一、Dubbo架構(gòu)介紹
Dubbo是阿里巴巴公司開(kāi)源的一個(gè)高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過(guò)高性能的 RPC 實(shí)現(xiàn)服務(wù)的輸出和輸入功能,可以和 Spring框架無(wú)縫集成[2]。Dubbo架構(gòu)共包含五種節(jié)點(diǎn),代表了五種角色,它們是Provider(生產(chǎn)者)、Consumer(消費(fèi)者)、Registry(注冊(cè)中心)、Monitor(注冊(cè)中心)和Container(服務(wù)容器)。Provider是暴露服務(wù)的服務(wù)提供方;Consumer:是調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方;Registry是服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心;Monitor是統(tǒng)計(jì)服務(wù)的調(diào)用次調(diào)和調(diào)用時(shí)間的監(jiān)控中心;Container: 是服務(wù)運(yùn)行容器。
二、系統(tǒng)總體設(shè)計(jì)
視頻分享系統(tǒng)是基于Dubbo服務(wù)框架開(kāi)發(fā)的,架構(gòu)設(shè)計(jì)的關(guān)鍵是合理地設(shè)計(jì)消費(fèi)者和生產(chǎn)者。系統(tǒng)中只有一個(gè)消費(fèi)者:主站。即用戶(hù)可直接訪(fǎng)問(wèn)的項(xiàng)目,用戶(hù)所有的服務(wù)都直接由主站提供。本系統(tǒng)提供了兩個(gè)服務(wù):資源搜索服務(wù)、資源分析服務(wù)。資源搜索服務(wù)提供對(duì)站內(nèi)數(shù)據(jù)的檢索功能,資源分析服務(wù)是對(duì)站內(nèi)資源進(jìn)行統(tǒng)計(jì)分析的項(xiàng)目。兩種服務(wù)都為主站提供服務(wù),并且都不直接對(duì)用戶(hù)提供任何功能。系統(tǒng)的數(shù)據(jù)庫(kù)使用Mysql集群,緩存使用Redis集群,這樣使得系統(tǒng)具有了良好的性能。
1、資源搜索服務(wù)。資源搜索服務(wù)向外暴露的接口滿(mǎn)足三點(diǎn):1)可以根據(jù)關(guān)鍵字對(duì)索引內(nèi)的資源進(jìn)行檢索;2)支持搜索結(jié)果的分頁(yè)獲??;3)給出關(guān)鍵詞使用分詞器分詞后的結(jié)果。在具體實(shí)現(xiàn)上,接口的內(nèi)部定義兩個(gè)枚舉型,SORT_FIELD和SOURCE_TYPE,分別表示排序字段和資源類(lèi)型。資源搜索接口聲明一個(gè)方法, String類(lèi)型參數(shù)的關(guān)鍵字;type枚舉型搜索資源的類(lèi)型,有MKV(超清)、AVI(普通)、MP4(高清)等取值;sortField也是枚舉型參數(shù),表示排序字段,有UPDATE_TIME(更新時(shí)間)、CREATE_TIME(上傳時(shí)間)、NAME(名稱(chēng));返回值Page
2、資源分析服務(wù)。資源分析在本系統(tǒng)中所占的比重比較小,主要提供的一個(gè)功能為分析視頻資源受歡迎度。資源分析接口聲明一個(gè)方法,此方法的參數(shù)只有兩個(gè),pageNo和pageSize,用于分頁(yè)獲取數(shù)據(jù)。返回值是Page
3、主站設(shè)計(jì)。主站controller層依賴(lài)的接口中與核心業(yè)務(wù)相關(guān)的接口共有7個(gè)。其中VideoSearchService是資源搜索服務(wù)對(duì)外暴露的接口,SourceAnalyzer是資源分析服務(wù)對(duì)外暴露的接口,SourceService接口聲明了與資源管理相關(guān)的方法,SourceFileService聲明了與視頻文件管理相關(guān)的方法,SourceReportService聲明了與資源舉報(bào)相關(guān)的方法,F(xiàn)ileUploadService聲明了與資源上傳相關(guān)的方法,SourceCollectionService聲明了與資源收藏相關(guān)的方法。
三、系統(tǒng)功能
視頻資源搜索功能:視頻資源搜索過(guò)程中,發(fā)起一個(gè)資源搜索請(qǐng)求,請(qǐng)求將自動(dòng)分發(fā)到sourceController控制器實(shí)體,sourceController直接調(diào)用本地VideoSearchService的search方法,這里VideoSearchService實(shí)體是一個(gè)遠(yuǎn)程服務(wù)代理,代理與服務(wù)提供端進(jìn)行通信,服務(wù)端運(yùn)行本地方法得到返回值,再返回到服務(wù)消費(fèi)端,這就是服務(wù)調(diào)用的整個(gè)過(guò)程。視頻人氣排行功能:人氣排行榜用例的實(shí)現(xiàn)邏輯是,首先Http請(qǐng)求被分發(fā)到sourceController控制器實(shí)體,sourceController直接調(diào)用sourceAnalyzer的getPopularSources方法獲取最受歡迎的資源。系統(tǒng)會(huì)自動(dòng)在頁(yè)面上顯示人氣排行榜前10名,人氣排行榜的推薦就是利用定時(shí)任務(wù)不斷調(diào)用sourceAnalyzer的getPopularSources方法,更新servletContext中最受歡迎資源的列表,這樣就可以在velocity模板引擎渲染velocity模板的時(shí)候直接從內(nèi)存中快速獲取數(shù)據(jù)了。最新資源功能:最新資源查詢(xún)的實(shí)現(xiàn)是調(diào)用最新資源查詢(xún)調(diào)用的接口SourceService在本地實(shí)現(xiàn),不需要遠(yuǎn)程調(diào)用,邏輯與人氣排行榜的邏輯是一樣的。最新資源也會(huì)在系統(tǒng)頁(yè)面上自動(dòng)顯示前10名,利用定時(shí)任務(wù)不斷從數(shù)據(jù)庫(kù)里讀取最新數(shù)據(jù),刷新內(nèi)存中的最新資源列表,當(dāng)客戶(hù)端請(qǐng)求頁(yè)面的時(shí)候直接將數(shù)據(jù)渲染到頁(yè)面上去。資源上傳功能:資源上傳的實(shí)現(xiàn)過(guò)程,資源上傳分為兩步,首先是上傳資源,第二步是添加資源信息,每上傳一次資源,就需要發(fā)起兩次http請(qǐng)求,第一次是上傳文件,第二次是添加文件信息。
四、結(jié)論
Dubbo作為一種分布式網(wǎng)站開(kāi)發(fā)的架構(gòu),可以與Spring框架無(wú)縫集成。具有連通性、健壯性、伸縮性的優(yōu)點(diǎn)。本網(wǎng)站采用Dubbo框架使得系統(tǒng)能承受更大的并發(fā)訪(fǎng)問(wèn)量,具有非常強(qiáng)的應(yīng)用價(jià)值。視頻分享系統(tǒng)的開(kāi)發(fā)解決了四個(gè)關(guān)鍵問(wèn)題:1)搭建穩(wěn)定的Dubbo服務(wù)框架運(yùn)行的環(huán)境;2)合理地設(shè)計(jì)項(xiàng)目間依賴(lài)關(guān)系,實(shí)現(xiàn)模塊化開(kāi)發(fā);3)使用Lucene創(chuàng)建索引,做到索引即時(shí)更新;4)使用數(shù)據(jù)庫(kù)負(fù)載均衡、緩存等技術(shù)提升系統(tǒng)的性能。該系統(tǒng)可以動(dòng)態(tài)增加或減少服務(wù)來(lái)應(yīng)對(duì)不同的訪(fǎng)問(wèn)量,使用了緩存、數(shù)據(jù)庫(kù)讀寫(xiě)分離等技術(shù)加快頁(yè)面的響應(yīng)速度,提升用戶(hù)體驗(yàn)。
參 考 文 獻(xiàn)
[1](美) Mark D. Hansen :使用Java Web服務(wù)構(gòu)建SOA,電子工業(yè)出版社, 2009.03
[2]何炎祥:分布式操作系統(tǒng),高等教育出版社,2005
[3]Nicolai M. Josuttis :SOA in Practice: The Art of Distributed System Design,OReilly, 2007.08