基于OSGi實現服務框架的分析

          根據上一篇服務框架的要素的blog,來分析下基于OSGi實現一個這樣的服務框架時需要對目前的OSGi框架做出哪些方面的修改,以及預估一下實現的難度。
          1、如何注冊服務
                OSGi服務采用的是xml+pojo的方式,應該說還是符合要求的,但如果要把這個服務注冊到一個服務中心的話,目前是不支持的,但這個對于分布式部署服務的需求而言,是必須實現的了。 
                要實現注冊服務至遠程的服務中心,這個可以通過編寫一個監聽服務生命周期變化的對象來實現,當監聽到服務的生命周期發生變化時,發送消息至遠端的服務中心,這里也就需要做出一個服務中心和各OSGi應用與服務中心遠程通訊的機制(消息機制、RPC機制、Webservice機制等等)。
          2、如何調用服務
                調用服務涉及的點比較的多,來看看基于OSGi如何來實現所有的需求:
                injection方式和顯示調用方式
                OSGi支持injection方式的調用服務,在顯示調用方式方面,OSGi不支持在OSGi框架范圍外的顯示調用,這個是有一定的不足的,因為這樣會導致和第三方框架集成的復雜,不過由于目前有了Spring-OSGi,所以呢,可以選用Spring-OSGi,這樣就兩種方式都支持了,如果不想使用Spring-OSGi的話,那么可以選擇查看OSGi框架的代碼,找出顯示調用的實現方法。
                另外一個就是可以通過服務中心來實現顯示的服務調用和injection方式。
                本地調用和遠程調用的區別
                OSGi并不支持遠程服務的調用,在《OSGi進階》Opendoc中我曾經寫過基于webservice調用的方式,但這個對于高性能的分布式調用時其實是不可用的,要屏蔽本地調用和遠程調用的區別,就得在現有的DS模型的基礎上做改進了,需要支持引用服務時從當前的OSGi環境中或從服務中心中注冊了,這個需要對現有的OSGi框架的DS實現做出改進,才能做到屏蔽本地調用和遠程調用的區別,就可以僅僅通過在xml中做動作就可以了。
                 同步調用和異步調用
                 這個不用說,目前OSGi自然也是不支持的,只能是對DS的實現進行改進了,增加服務的同步調用和異步調用的支持,同步調用的話就沒什么改動的了,異步調用的話就得對ds做比較大的改動了,注入引用的服務時注入的不能像目前的ds實現一樣直接注入服務實例對象了,而是只能注冊一個proxy對象了。
                 lazy式的調用和固定的引用調用
                 lazy式的調用目前OSGi并不支持,只能是自己對DS進行改動了,在引用遠程服務和異步調用時,lazy調用是非常重要的。
                至于查找服務方面,這個OSGi目前的模型就可以了,只是要增加查找服務中心服務的功能,這個在修改DS實現調用遠程OSGi服務時會去實現。   
                在服務的安全性等方面這個也只能基于DS擴展實現了。
          3、如何測試服務
                由于OSGi的服務是POJO的方式,在服務的測試方面是完全不會有問題的。
          4、服務的生命周期
                在服務的生命周期方面,我想OSGi服務目前的機制就是不錯的,即如果當前這個服務組件是對外暴露服務的,那么只有當其被引用且其本身所引用的服務可用時才被激活,如組件沒有對外暴露服務,那么只需其引用的服務可用就可激活了,至于服務的卸載就是在上面條件不符合的情況下就應該卸載了。
                如果有必要的話,可以把服務的狀態區分出installed、active、deactive。
                另外一個值得注意的問題就是,OSGi的DS是當服務的生命周期發生變化時,會通過bind-method和unbind-method去通知引用服務的組件的,這個特性我想即使是對于lazy式的調用也應該保持,這里也就需要DS關于服務通知的部分實現的代碼了。
                來看看在這種服務框架的需求下的服務的生命周期的處理情況:
                安裝服務:
                
                服務被激活:
                
                服務被鈍化:
                
                服務被卸載:      
               
          5、服務的管理和維護
                在服務的管理和維護上,應該說目前OSGi的DS模型提供的已經是很完整了,不過在服務中心點的服務的管理上則需自己實現了,基本可以參照OSGi的實現,需要考慮和增加的仍然是服務中心和各遠程的OSGi應用的通訊。
          6、服務的組裝
                服務的組裝方面,這個OSGi也是完全沒有支持的,這個可以考慮基于服務中心去實現,抑或完全可以單獨實現,只需可組裝遠程的服務中心中的服務即可了。
          7、服務的出錯處理
                服務的出錯處理,這個對于OSGi來說還是有點的麻煩的,就像erlang強調的一點一樣,不是進程隔離方式,自然很難保證當在同一VM中的一個OSGi服務出錯時不影響到整個VM。
                只能盡量的去考慮另外一種方式了,當服務處理出錯時的廣播了,這樣可以做到fail-fast。
          8、服務事件的廣播和訂閱
                服務事件的廣播和訂閱,這方面OSGi目前支持的還是挺好的,不過在增加服務中心后,就需要增加事件廣播至多個服務中心了。
           
          在增加考量的兩個因素方面,OSGi的DS是不支持aop方式的,不過要搭建一個服務庫不是一件什么難事,其實服務中心本身就已經是服務庫了。
          上面的實現分析還是有點的虎頭蛇尾吧,最后就按照上面的分析總結成一張圖吧,來管窺下基于OSGi實現的分布式服務框架會是個什么樣的結構:

          從上圖并結合服務的生命周期管理的部分可以看出要基于OSGi實現一個這種適合分布式場景的服務框架還是比較麻煩的,需要重寫的部分是非常的多,以此來看的話,目前OSGi最適合的場景應該還是如下幾種:
          1、不需要分布式部署的應用場景;
          2、需要分布式部署,但僅僅是分層的分布式部署,例如業務層在一臺機器上,數據層在另外的機器上。
          不過基于OSGi實現一個這樣的服務框架也是一件很不錯的事,估計這也是EEG目前正在做的事,希望以后能在自己有空的時候動手做做這個基于OSGi的服務框架。

          posted on 2008-01-09 23:23 BlueDavy 閱讀(4485) 評論(3)  編輯  收藏 所屬分類: OSGi、SOA、SCA

          評論

          # re: 基于OSGi實現服務框架的分析[未登錄] 2008-01-13 18:20 guitarpoet

          新的SCA(目前已經是OASIS的規范了)標準的實現應該就是基于OSGi的吧?

          好久沒有看這個方面,都有點兒生疏了。呵呵。  回復  更多評論   

          # re: 基于OSGi實現服務框架的分析 2008-01-13 23:24 BlueDavy

          @guitarpoet
          還沒有明確的把OSGi列入實現的規范,因為目前SCA規范基本還就是一個介紹如何用的規范,至于怎么實現沒有規范,所以...,不過OSGi應該會列為RI級別的東西。  回復  更多評論   

          # re: 基于OSGi實現服務框架的分析 2015-06-08 20:08 xMan

          http://osgi.jxtech.net 是一個基于OSGi的企業級快速開發平臺,對于信息管理系統來說,開發相當容易、快速,還能自適應移動端呢。  回復  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導航

          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 永泰县| 荥阳市| 河北省| 西昌市| 全南县| 将乐县| 石台县| 涟水县| 怀安县| 玉龙| 桃江县| 开封市| 昌图县| 周至县| 宜章县| 柳林县| 宜良县| 巴彦县| 合水县| 莆田市| 河源市| 新河县| 永修县| 温宿县| 方正县| 林州市| 会理县| 垫江县| 彰化县| 汾西县| 珲春市| 江山市| 柘城县| 隆安县| 阆中市| 宜阳县| 罗定市| 江山市| 伊春市| 双辽市| 大英县|