897
技術社區[雲棲]
《OSGi官方文檔》使用OSGi的好處
開發者:
對於今天的大型分布式係統OSGi提供了一個和小型、嵌入式應用一樣的模塊化的架構來減少係統複雜性。從內部和現成的模塊來構建係統可以顯著的減少開發和維護的成本。OSGi編程模型就是實現組件為基礎的係統。
業務:
OSGi的模塊化和動態模塊降低在網絡工作環境下的多設備集成的操作成本,減少應用的開發、維護和遠程服務管理的成本。OSGi 如此成功的關鍵原因在於它提供了一個非常成熟的組件係統,他可以工作在數量驚人的環境中。OSGi 的組件係統實際已經被用來構建像IDEs(Eclipse)、應用服務器(GlassFish, IBM Websphere, Oracle/BEA Weblogic, Jonas, JBoss)、應用框架(Spring, Guice)、工業自動化、家庭網關、手機等高複雜應用。
所以,OSGi的組件係統究竟能給你帶來什麼好處呢?
1、減少複雜性
利用OSGi技術進行開發意味著軟件包的開發:OSGI組件、軟件包和模塊。它們隱藏它們的內部實現,通過已經定義好的服務來和其他包進行通信,隱藏內部實現意味這以後可以自由更改實現。這樣不僅減少了bug的數量,而且使得包的開發更為簡單,因為可以隻需要實現已經定義好的一定數量的功能接口即可。
2、複用
OSGi的組件模塊使得它在應用中可以非常簡單的使用其他第三方組件。已經有很多的開源項目都是通過OSGi來發布他們的jar包,而且商業庫也開始使用現成的包。
3、現實情況
OSGi是一個動態框架。他可以更新正在運行的模塊和服務。那些曾經的java開發者認為這個特性是有問題的,而且並沒有看到這個特性的好處。然而,事實表明,真實的世界是高動態化的,並且有很多錯綜的服務以完美的匹配真實世界的場景。例如,在網絡環境中模擬一個設備的服務,如果該設備被發現,服務就去注冊,如果設備掉線,服務就取消注冊。現實世界中有很多場景都和動態服務模型相匹配。應用因此在他們所屬的領域裏可以強有力的複用注冊中心(注冊,獲取,具有展現力的過濾語言列表,等待服務的出現或消失)。這不僅可以保存正在實現的代碼,而且還對全局提供了可見性、調試工具和更多的功能而不是需要實現過時的問題,在這樣的動態環境下寫代碼聽起來似乎是個噩夢,但是幸運的是,它有主要的支持類和框架,如果不是這樣,那將非常痛苦。
4、開發簡單
OSGi 技術並不是組件化的一個標準,它也指定了組件是如果安裝和管理的,這個API已經被很多挺管理代理的模塊所使用。這種管理代理可以和命令行已經簡單,例如TR-6g管理協議驅動,OMA DM協議驅動,Amazon EC2的計算接口、IBM Tivoli 的管理係統等。標準化管理API很容易在現有和未來的係統中集成OSGi技術。
5、動態更新
OSGi 組件模塊是一個動態的模塊,模塊可以在不需要停止整個係統的情況下被安裝、啟動、停止、更新和卸載。許多的Java 開發者不相信它的這種做法是可靠的,因此自覺的在生產環境下不這樣使用。然而,使用這種方法一段時間後,許多人開始意識到它確實可以工作和減少部署的重要性。
6、自適應
OSGi的組件模型設計原則是允許組件的混合和匹配。這需要指定組件的依賴性,也需要組件在一個並不總是可用的可選的依賴環境中。OSGi的服務注冊是一個可以注冊、獲取和偵聽服務的動態注冊的軟件包。這種動態服務模塊允許軟件包找出係統上可用的功能,並調整它們能提供的功能,這些可以使得代碼更為靈活和更好的適應變化。
7、透明性
軟件包和服務在OSGi環境中是最高級的。管理API不但提供了對軟件包內部狀態的訪問而且也也提供了如何去和其他包做對接。例如,大多數框架提供了一個命令行的窗口來展示內部狀態;也有部分應用為了調試一個確切的問題而被停止,或者引入軟件診斷包。OSGi 的應用可以在一個命令行窗口下進行調試,而不用盯著百萬行的日誌輸出和很長的重啟時間。
8、版本控製
OSGi技術解決了JAR的痛苦。JAR 包帶來的問題是,A庫依賴的版本=2的B庫,但是C庫又依賴版本=3的B庫,在標準的java中,你是非常不幸的。在OSGi的環境中,所有的軟件包都被非常仔細的設定版本,隻有這些包在相同的類空間下它們才會被連接在一起協同工作。這種方式就允許軟件包A和軟件包C都和它們各自的庫一起工作.雖然不建議在這種版本的問題下來設計係統,但是在某些情況下它依然是非常有用的。
9、簡單
使用OSGi是非常的簡單的,它不但依賴管理、配置和動態性都非常強大,而且OSGi的代碼也和傳統的Java代碼完全相似。有很多簡單的注解可以讓程序在用運行期間知道一個特殊的類是如何使用動態性、配置和對其他服務的依賴。默認情況向是完全因此了動態性和OSGi的其他的特性,簡單的模塊會逐步使用一些高級特性。
10、體積小
第4版OSGi框架的jar文件大約隻有300KB的大小。隻包含OSGi 就實現了很多功能的應用來說已經非常的小了.OSGi 可以運行在很多種類的設備上:從很小、小設備再到大型機器,它僅僅需要一個最低配的Java虛擬機來運行。
11、快速
OSGi的一個主要功能就是從軟件包裏加載類。在傳統的java程序中,jar包是清晰可見的,並線性的排列。搜索一個類需要遍曆整個列表(通常時間會很久)。相比之下,OSGi軟件包之間的預依賴可以準確的知道是哪個軟件包提供的類,通過減少搜索是啟動速度提高的一個重要因素。
12、懶加載
懶加載是軟件中一個很好的點,OSGi技術有很多的機製來保證隻有當類真正需要的時候才開始加載他們。例如,軟件包以餓漢的方式啟動,但是當其他的包在使用它們的時候它們也能以配置的方式啟動。當服務被使用的時候它們才會被注冊。為了允許各種懶加載的場景,以使得它們可以節省運行時的巨大成本,OSGi的規範已經被優化過很多次了。
13、安全
Java的底層有一個非常強大的細粒度的安全模型,但是它在實踐中卻非常難配置,結果就是大多數安全的java應用都以二進製的選項運行:其喪失安全性或者安全性能有限。OSGi的安全模型利用細粒度的安全模型,但是通過它提高了可用性
通過軟件包的開發人員以一種簡單的審計方式來指定安全請求的細節,同時環境的操作者也對其完全負責來提高其可用性(以及加強原始模型)。
14、非獨占性
許多應用框架運行時需要獨占整個VM,且每個虛擬機上僅僅允許允許一個應用的實例。這時就體現出了OSGi規範的靈活性,它甚至可以在J2EE的應用服務器中運行。很多開發者都想運行OSGi,但是他們的公司並不允許他們部署通常的JAR包。因此,這些開發者可以將某個OSGi框架包括在WAR文件中,並將軟件包從文件係統或通過網絡裝載到應用服務器中來運行。OSGi非常的靈活,這使得一個應用服務器上就可以容易地作為多個OSGi框架的宿主。
15、非侵入
在一個OSGi的環境中,不同軟件包均有自己的環境設置,不同應用實際是都可以使用虛擬機提供的所有設施,OSGi對此並無任何限製。OSGi的最佳實踐就是編寫POJO(Plain Old Java Objects),並且由於這個原因,OSGi服務並不需要任何特殊的接口,甚至一個Java的String對象也可以充當一個OSGi服務。這個策略使得應用程序的代碼可以更容易地移植到其他環境。
16、可以四處運行
當然,這裏有所依賴。Java的最初目的是能夠四處運行。顯然,由於不同環境中的Java虛擬機(Java VM)實現存在差異,在任何地方都能運行所有的代碼並不可能。例如,手機中的虛擬機就不太可能與IBM大型機中運行的銀行應用支持相同的類庫(libraries)。要具備四處運行的能力,必須考慮兩個問題。一是OSGi API應該使用能在所有環境中都有效的類;二是如果bundle包含了在某個執行環境中無效的代碼,那麼這個bundle就不能在該環境中啟動。在OSGi規範中,這兩個問題都得到了解決。
17、廣泛使用
雖然最初起始於嵌入式家用自動化市場,但從1998年起,OSGi規範已被擴展並應用於多個業務領域:汽車、移動技術、工業自動化、網關/路由、專用小交換機、固定電話等等。從2003年起,廣泛流行的Eclipse統一開發環境開始采用OSGi技術運行,並提供擴展,以支持bundle開發。最近幾年,企業開發者也開始采用OSGi規範。不僅Eclipse的開發者發現了OSGi技術的威力,並且由於Spring Framework為OSGi創造了一種特殊的擴展,使得這種技術進一步得到廣泛流行。現在,你可以在IBM Websphere、SpringSource dm Server、Oracle(以前的BEA) Weblogic、Sun的GlashFish和Redhat的JBoss中都能找到OSGi技術的蹤影。
18、核心公司支持
在OSGi的成員中,集中了大量不同領域的大型計算機公司,包括Oracle、IBM、Samsung、Nokia、Progress、Motorola、NTT、Siemens、Hitachi、Deutsche Telekom、Redhat和Ericsson等
OSGi 規範開始於1988年,它開始被寄予家庭自動化的市場,嚐試解決怎樣構建獨立應用之外的組件。在過去的十年中,軟件由於開源項目的爆發而發生了巨大的變化。十年以前,一個應用是由許多寫代碼的人在一起開發的。而今天,大多數的軟件是有大量的開源構建組成的,而它們有嚐嚐是一些不在一起工作的人設計的,這和OSGi所有解決的問題有點相像。許多開源工程更關注實際中的問題,減少對底層軟件的問題的擔憂,也為了使它在其他工程使用更簡單,因此它們也采用了OSGi的規範,而且這是大勢所趨。
如果你是在Java開發軟件,OSGi技術應該是一個合乎邏輯的下一步,因為它解決了許多你可能不知道可以解決的問題。 OSGi技術的優勢如此之多,如果你使用Java,那麼OSGi 應該在你的工具箱中。
最後更新:2017-05-19 10:24:32