基于OSGi實現(xiàn)分布式服務(wù)框架歷程(四)

          在這個篇幅中將來分析下這個分布式服務(wù)框架的服務(wù)的生命周期的管理的問題,在分布式服務(wù)框架中,支持服務(wù)的動態(tài)部署、卸載、升級是很關(guān)鍵的,至于服務(wù)的生命周期是否需要做到像OSGi那樣的動態(tài)通知,在這個篇幅中會進行分析,并最終形成這個分布式服務(wù)框架的生命周期模型以及到目前為止的服務(wù)架構(gòu)模型。
          先來分析下服務(wù)的生命周期是否需要做到像OSGi DS的動態(tài)通知,這里以服務(wù)組件安裝為例稍微的說下OSGi DS服務(wù)的生命周期模型,在OSGi DS中,當有新的Service Component安裝時,首先會檢查其是否lazy,如是lazy或此Service Component對外提供服務(wù)則完成安裝,生成ServiceRegistration對象放入其服務(wù)中心;如不是lazy或此Service Component不對外提供服務(wù),則首先檢查其引用的服務(wù)是否可用,如不可用則嘗試激活引用的服務(wù),如所有引用的服務(wù)均可用,那么激活此Component,對外提供此Service,并發(fā)布Service Active的事件;服務(wù)生命周期事件管理器在接收到Service Active的事件后,將會查找所有引用此Service的Component,如Component未激活,則嘗試激活,如已激活,則根據(jù)配置的bind-method注入此Active的Service Instance。
          根據(jù)上面的分析,到分布式的服務(wù)應(yīng)用的環(huán)境下,來看看,下圖為一個典型的分布式服務(wù)應(yīng)用的圖示:

          根據(jù)OSGi DS服務(wù)的生命周期模型,那么當我們在服務(wù)應(yīng)用端部署了一個分布式服務(wù)時,此服務(wù)首先需要到服務(wù)中心進行注冊,在注冊時,需檢查去所引用的服務(wù)是否可用,如可用,得激活此服務(wù),同時需要將此消息發(fā)送給所有引用了此服務(wù)的服務(wù)應(yīng)用端,這整個過程說起來是相當?shù)捻槙车模覀兛梢韵胂耄绻@個服務(wù)是個基礎(chǔ)服務(wù),被N多服務(wù)應(yīng)用端引用了,那這個時候會是個什么狀況,那要通知到多少的服務(wù)器呢(可以想象100+的服務(wù)群),盡管可以cluster+同步,:),更復(fù)雜的情況,當此服務(wù)引用了其他N個服務(wù),首先需要發(fā)消息嘗試激活這些服務(wù),然后那些服務(wù)激活后又帶來了N個服務(wù)的激活,這個就把整個過程變得極度繁瑣了,整個的實現(xiàn)難度和邏輯復(fù)雜度大大提升了,動態(tài)的處理生命周期的變化將會帶來很大的技術(shù)難度以及不可控因素,例如在高并發(fā)的場景時某服務(wù)突然不可用了,但它的通知的消息還在傳遞,那結(jié)果會怎么樣呢?既然這么難控制,那就干脆不去控制這種動態(tài)的變化了,簡化整個生命周期模型,保證實現(xiàn)的簡便性和系統(tǒng)的高穩(wěn)定性,這也是實現(xiàn)所有系統(tǒng)必須遵循的原則:“簡單(但不是簡陋)到可控、滿足需求為止”。
          鑒于以上的分析,在這個分布式服務(wù)框架中將采取一種適合大型分布式應(yīng)用使用的服務(wù)生命周期模型:
          1、服務(wù)安裝時
                當服務(wù)在應(yīng)用端被安裝時,首先注冊其Service元信息到本地服務(wù)中心,接著判斷如服務(wù)需要注冊到遠程服務(wù)中心,則進行注冊,注冊完畢后,根據(jù)服務(wù)引用的服務(wù)的信息生成相應(yīng)的服務(wù)Proxy對象,注入到此服務(wù)中,同時激活服務(wù)。
          2、服務(wù)卸載時
                當服務(wù)在應(yīng)用端被卸載時,首先從本地服務(wù)中心中刪除相應(yīng)的Service元信息,如此服務(wù)注冊到了遠程服務(wù)中心,那么同時刪除遠程服務(wù)中心的Service元信息。
          3、服務(wù)升級
                服務(wù)升級需要做的其實就是替換Service元信息,同時刷新classloader中的服務(wù)實例。
          通過這個容易實現(xiàn)的服務(wù)生命周期模型可以看出,實現(xiàn)出來的這個分布式服務(wù)框架將會很好的支持服務(wù)的動態(tài)部署、卸載和升級,但并沒有支持到服務(wù)的狀態(tài)的通知等,其實也不是很必要,不過在目前的這種情況下需要解決的是調(diào)用的高效的問題,因為在不知道引用的服務(wù)的狀態(tài)的情況下,最復(fù)雜的就是每次都得發(fā)起調(diào)用,這里需要有一個高效的緩存機制,以避免無謂的調(diào)用(如服務(wù)壓根就不可用呀,或者服務(wù)沒改變,參數(shù)也沒改變的情況),:),這個具體怎么實現(xiàn)大家可以先想想,在后續(xù)的章節(jié)中會詳細的介紹。
          經(jīng)歷到目前這步后,大家會發(fā)現(xiàn),OSGi在整個的分布式服務(wù)框架中開始逐步消失,確實,OSGi在分布式領(lǐng)域的不足(最強的DS在分布式領(lǐng)域非常不適合)已經(jīng)讓它不是很適合作為實現(xiàn)這種大型分布式場景應(yīng)用的框架了,但這并不意味著OSGi就沒什么用了,OSGi在很多應(yīng)用領(lǐng)域仍然是王者型的框架,只有最適合的,沒有最好的,:),而且OSGi的很多思想(例如服務(wù)的模型,所以其中還是有很多DS的影子)其實也在指導(dǎo)著這個分布式服務(wù)框架的思想,所以即使最后這個實現(xiàn)的分布式服務(wù)框架和OSGi沒有多大關(guān)系,也還是暫且叫著這個名字吧,來看下經(jīng)歷到目前這步后的分布式服務(wù)框架是個什么樣子了:

          從上圖中可見,此框架中幾乎所有的部分都是可換的,這和OSGi的microKernel思想是非常吻合的,當然,也是為了此框架能更加靈活的滿足分布式應(yīng)用領(lǐng)域的需求。

          << 基于OSGi實現(xiàn)分布式服務(wù)框架歷程(三)

          >> 基于Spring-DM實現(xiàn)分布式服務(wù)框架(DSF)(一)

          posted on 2008-01-22 11:19 BlueDavy 閱讀(4490) 評論(4)  編輯  收藏 所屬分類: OSGi、SOA、SCA

          評論

          # re: 基于OSGi實現(xiàn)分布式服務(wù)框架歷程(四)[未登錄] 2008-01-22 13:05

          收藏了。目前正在用osgi開發(fā)項目,感覺這個技術(shù)很不錯,每個人可以開發(fā)自己的模塊。很爽!!  回復(fù)  更多評論   

          # re: 基于OSGi實現(xiàn)分布式服務(wù)框架歷程(四) 2008-01-22 13:26 windspy

          對這個topic很有興趣,期待下文。  回復(fù)  更多評論   

          # re: 基于OSGi實現(xiàn)分布式服務(wù)框架歷程(四) 2008-02-22 17:11 jenny

          基于OSGi實現(xiàn)分布式框架,R-OSGi不錯的呀  回復(fù)  更多評論   

          # re: 基于OSGi實現(xiàn)分布式服務(wù)框架歷程(四)[未登錄] 2008-02-23 17:56 BlueDavy

          @jenny
          恩,差點忘了這東西。  回復(fù)  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

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

          統(tǒng)計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 武山县| 南宁市| 田林县| 崇明县| 时尚| 平邑县| 镇远县| 油尖旺区| 泰和县| 巫溪县| 忻州市| 正定县| 宜兰县| 丹棱县| 凤山县| 瑞昌市| 崇文区| 新津县| 肇州县| 白朗县| 湘阴县| 永济市| 蕉岭县| 沁源县| 韩城市| 北票市| 益阳市| 宝鸡市| 武乡县| 定远县| 蓝山县| 库车县| 左权县| 西丰县| 靖江市| 岳西县| 牡丹江市| 广水市| 来宾市| 沂南县| 商城县|