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