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