OSGi架構學習與設計
首先,我想表揚自己終於開始實踐自己一直想貫徹的想法———用博客來記錄和總結自己的學習曆程。
現在我正在設計一套基於Equinox的管理門戶平台上各種不同服務的分布式框架。Equinox是Eclipse內的一個簡單的開源OSGi框架,在它的基礎上,我需要自己創建我所需要的bundles。框架底層銜接的是一個其他項目組正在開發中的非結構化數據庫,而框架之上是一個門戶服務平台,其中有許許多多不同的應用服務——具體的說,這些服務的實現各自有相同之處,但存在較大的不同,比如他們的數據存儲的模型各不相同,所以我需要建立基礎bundle供應用級的bundle使用。
簡單介紹一下OSGi吧,雖然Wiki,百度百科會比我解釋得更好。一個月以前,我開始接觸OSGi這個概念,它是一種SOA(麵向服務)的新的架構,可以很輕鬆的管理軟件組件的生命周期(組件可以位於網絡中的任何設備上), 而且組件可以動態的安裝, 加載, 升級和卸載, 而不用終止和重啟設備。 這裏的組件是指程序庫或者是應用程序, 它們又可以動態的使用別的庫和程序。OSGi下最重要的成員就是它的Bundles。通過部署Bundle,start/stop Bundle來實現動態部署服務(服務在Bundle內注冊)。
我決定用一個身邊的例子來說明OSGi要實現的效果。它就是Eclipse。Eclispe公司非常看重OSGi的發展前景,如果上網搜的話,應該可以搜到Eclipse公司上層對OSGi的一段采訪報道,記得好像在InfoQ的網站上看過。Eclispe在3.0版本之後,就放棄了原先自己的那套管理組件的體製,而選用了OSGi來管理Eclipse的Plug-ins。無論是Eclipse還是MyEclispe,他們的plugins目錄下都是非常多非常多的.jar包,這些是Eclispe——作為一個可以集合各種各樣開發環境的容器——的核心資產。想要動態地部署,管理這麼多的jar包以及未來不斷加入新的組件進行更新,是件不容易的事情。而OSGi就是為了更好地完成這件事而誕生的。不知道大家有沒有仔細注意過,在Eclipse的plugins目錄裏丟入一些jar包(需要開發新環境的時候),重新啟動Eclipse,我們會發現,在Eclipse主界麵的上部會出現新的任務按鈕。這時候,你如果新建一個工程,或者查看window -> preferences,就會看到一些新的麵孔出現在你麵前。這就是一種動態部署,即插即用,即刪既無。OSGi真正實現了這個效果。
不知道以上的這個例子有沒有讓您對OSGi所幹的事情有點初步的形象的了解。下麵我會列舉我在這一個月的學習過程中,所能找到和參考到的比較好的資源。首先是淘寶的林昊工程師寫的兩篇open doc:《OSGi實戰》和《OSGi進階》。這兩篇open doc出現的時候,國內的OSGi並沒有普及,雖然現在也沒有算已經普及起來。這兩篇doc可以帶領我們走進OSGi,裏麵的例子簡單又有代表性,讓我們可以好好體會OSGi工程的編寫形式和思想,這點非常重要(隻有在設計的時候才感受到)。基於這兩篇open doc,林昊又和淘寶的另一位朋友一起編寫了《OSGi原理與最佳實踐》這本書。這本書是應了一些論壇上喜愛OSGi的網友的要求,在前兩篇doc的基礎上,更具體地介紹OSGi以及其目前已經開源的框架的入門書。對Equinox, Spring-DM, Apache Felix, 這幾個比較主流的已經開源的OSGi框架都做了分析和簡單教學實現。OSGi R4規範也涵蓋在了書裏。這本書我是已經購入了的,在國內OSGi資源稀缺的前提下,它是我必備的一本起步書籍。此外,國外的書籍裏主要有《OSGi in Action》和《OSGi and Equinox: Creating Highly Modular Java? Systems》。兩本書的電子版我都找到了,第一本書我看了下目錄,沒有具體看;相比之下,第二本書是我現在正在細讀的,它的電子版我是前天才找到的,附上地址 https://code.google.com/p/osgicse/downloads/list .我可能會對第二本書的閱讀做一個摘要和自己的解讀,希望能和大家分享一些自己的經驗。除了以上幾本書,我還想推薦的是一些碩士/博士的學位論文,都是國內的,也許你在google裏輸入OSGi框架,OSGi實現之類的關鍵字都可以找到它們。
前麵提到,我現在正在設計一個比較簡單的OSGi框架,其實有種代碼重構的意思,把傳統的從數據庫中提取信息,返回給頁麵顯示的簡單java project重構成Equinox工程。怎樣設計出粒度適中,又能發揮出OSGi管理服務特色的bundle是我目前正在考慮的事情。這也是我在細讀《OSGi and Equinox: Creating Highly Modular Java? Systems》這本書的原因,想從中學習到OSGi的正確的設計思路。除此以外,大家可以關注下目前正在開發的OSGi框架,比如我現在在解讀的amdatu,在Github裏可以找到源碼。通過讀源碼,幫助我們更好地設計框架和規劃bundle粒度。
最後想實現的是分布式的OSGi框架,底層希望是基於Hadoop的那套東西——存儲在HBase,HDFS,集群之間是zookeeper來協調,與門戶的響應采用REST接口,把基礎服務和新的應用服務部署在雲端。
我希望能在這個平台上和更多業界的人士交流,學到更多的東西,設計出一個能夠管理海量數據的靠譜的框架。
最後更新:2017-04-02 06:52:11