OSGI(Open Services Gateway Initiative) Java動(dòng)態(tài)化模塊化系統(tǒng)的一系列規(guī)范尊浓。
個(gè)人理解為支持模塊熱部署,方便模塊管理纯衍。
OSGI :
bundle是OSGi的部署(和模塊)單元。在OSGi運(yùn)行時(shí)苗胀,bundle具有如下三種狀態(tài):installed襟诸,resolved,active基协。在Spring中最主要的單元模塊是應(yīng)用程序上下文(application context)歌亲,在應(yīng)用程序上下文里包括了一些bean(被Spring的應(yīng)用程序上下文所管理的對(duì)象)。在OSGi bundle和Spring應(yīng)用程序上下文之間有很自然的緊密聯(lián)系澜驮。
使用Spring Dynamic Modules(Spring DM)陷揪,一個(gè)active的bundle可以包含一個(gè)Spring 應(yīng)用程序上下文,它負(fù)責(zé)在bundle里實(shí)例化杂穷、配置悍缠、組裝和裝飾對(duì)象(bean)。這些bean即可作為OSGi服務(wù)輸出而提供給其他bundle耐量,也能透明地注入其他OSGi服務(wù)的引用飞蚓。
分布式:
1、系統(tǒng)間相互隔離廊蜒,系統(tǒng)之間的交互通過(guò)RPC來(lái)調(diào)用趴拧,即提供方提供接口及實(shí)現(xiàn),調(diào)用方直接調(diào)用山叮,阿里采用的是sofa框架集成的tr著榴,ws等。
2屁倔、另一種為消息模式脑又,一方作為消息發(fā)送端發(fā)送消息,一方作為消息接收端接收消息(發(fā)送的消息體對(duì)象必須序列化),消息中間件:阿里采用msgbroker(訂閱關(guān)系管理及消息轉(zhuǎn)發(fā))」业現(xiàn)市面使用zookeeper叔壤。
以下轉(zhuǎn)載分布式RPC框架性能大比拼:
Dubbo 是阿里巴巴公司開(kāi)源的一個(gè)Java高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過(guò)高性能的 RPC 實(shí)現(xiàn)服務(wù)的輸出和輸入功能口叙,可以和 Spring框架無(wú)縫集成炼绘。不過(guò),略有遺憾的是妄田,據(jù)說(shuō)在淘寶內(nèi)部俺亮,dubbo由于跟淘寶另一個(gè)類(lèi)似的框架HSF(非開(kāi)源)有競(jìng)爭(zhēng)關(guān)系,導(dǎo)致dubbo團(tuán)隊(duì)已經(jīng)解散(參見(jiàn)http://www.oschina.net/news/55059/druid-1-0-9 中的評(píng)論)疟呐,反到是當(dāng)當(dāng)網(wǎng)的擴(kuò)展版本仍在持續(xù)發(fā)展脚曾,墻內(nèi)開(kāi)花墻外香。其它的一些知名電商如當(dāng)當(dāng)启具、京東本讥、國(guó)美維護(hù)了自己的分支或者在dubbo的基礎(chǔ)開(kāi)發(fā),但是官方的庫(kù)缺乏維護(hù)鲁冯,相關(guān)的依賴(lài)類(lèi)比如Spring拷沸,Netty還是很老的版本(Spring 3.2.16.RELEASE, netty 3.2.5.Final),倒是有些網(wǎng)友寫(xiě)了升級(jí)Spring和Netty的插件。
Motan是新浪微博開(kāi)源的一個(gè)Java 框架薯演。它誕生的比較晚撞芍,起于2013年,2016年5月開(kāi)源跨扮。Motan 在微博平臺(tái)中已經(jīng)廣泛應(yīng)用序无,每天為數(shù)百個(gè)服務(wù)完成近千億次的調(diào)用。
rpcx是Go語(yǔ)言生態(tài)圈的Dubbo衡创, 比Dubbo更輕量帝嗡,實(shí)現(xiàn)了Dubbo的許多特性,借助于Go語(yǔ)言?xún)?yōu)秀的并發(fā)特性和簡(jiǎn)潔語(yǔ)法璃氢,可以使用較少的代碼實(shí)現(xiàn)分布式的RPC服務(wù)丈探。
gRPC是Google開(kāi)發(fā)的高性能、通用的開(kāi)源RPC框架拔莱,其由Google主要面向移動(dòng)應(yīng)用開(kāi)發(fā)并基于HTTP/2協(xié)議標(biāo)準(zhǔn)而設(shè)計(jì)碗降,基于ProtoBuf(Protocol Buffers)序列化協(xié)議開(kāi)發(fā),且支持眾多開(kāi)發(fā)語(yǔ)言塘秦。本身它不是分布式的讼渊,所以要實(shí)現(xiàn)上面的框架的功能需要進(jìn)一步的開(kāi)發(fā)。
thrift是Apache的一個(gè)跨語(yǔ)言的高性能的服務(wù)框架尊剔,也得到了廣泛的應(yīng)用爪幻。
以下內(nèi)容轉(zhuǎn)載自 osgi確實(shí)面臨雞肋之嫌
osgi最明顯的缺陷
bundle盡管可以為隔離的服務(wù)建立獨(dú)立生命周期管理的熱部署方式,以及明確的服務(wù)導(dǎo)出和導(dǎo)入依賴(lài)能力,但是其最終基于jvm挨稿,無(wú)法對(duì)bundle對(duì)應(yīng)的服務(wù)實(shí)現(xiàn)計(jì)算資源的隔離仇轻,一個(gè)服務(wù)的故障依然會(huì)導(dǎo)致整個(gè)jvm crush,這使得在一個(gè)運(yùn)行時(shí)的osgi上部署模塊級(jí)服務(wù)只獲得了模塊部署和啟停隔離,服務(wù)明確依賴(lài)的好處奶甘,但是沒(méi)辦法實(shí)現(xiàn)計(jì)算節(jié)點(diǎn)的線(xiàn)性擴(kuò)展篷店,在當(dāng)前分布式,微服務(wù)臭家,網(wǎng)絡(luò)計(jì)算的趨勢(shì)下疲陕,使得osgi只適合構(gòu)建單一服務(wù)節(jié)點(diǎn)的內(nèi)部應(yīng)用,但是其分離的bundle的部署負(fù)擔(dān)對(duì)于微服務(wù)架構(gòu)來(lái)說(shuō)钉赁,有點(diǎn)用大炮打蚊子的臭味蹄殃。
推薦的應(yīng)用架構(gòu)方式
因此必須將基于進(jìn)程間構(gòu)建的分布式應(yīng)用和進(jìn)程內(nèi)的單一應(yīng)用分開(kāi)來(lái)架構(gòu)設(shè)計(jì),對(duì)于進(jìn)程間構(gòu)建的分布式應(yīng)用你踩,采取基于soa的理念進(jìn)行容器模式的服務(wù)部署模式诅岩,服務(wù)交互基于遠(yuǎn)程服務(wù)交互相關(guān)協(xié)議,采用可忍受網(wǎng)絡(luò)失敗的架構(gòu)設(shè)計(jì)原則带膜;
對(duì)于進(jìn)程內(nèi)的應(yīng)用按厘,如果需要模塊級(jí)的獨(dú)立生命周期熱部署和模塊管理,可以考慮采用OSGI,但是钱慢,容器內(nèi)基于本地進(jìn)程間通信的模塊交付方式不僅能提供同樣的獨(dú)立生命熱部署和模塊管理,而且具備隨時(shí)脫離出去部署成單獨(dú)容器級(jí)服務(wù)應(yīng)用的能力卿堂,加速進(jìn)程間的服務(wù)交付提供的整體管理和監(jiān)視環(huán)境基礎(chǔ).
osgi還有用武只地嗎束莫?當(dāng)然我前述都是以構(gòu)建分布式企業(yè)和面向互聯(lián)網(wǎng)這類(lèi)應(yīng)用為前提來(lái)討論的,對(duì)于嵌入式的jvm應(yīng)用草描,比如著名的osgi案例寶馬的車(chē)載系統(tǒng)览绿,osgi依然是最好的原則,不過(guò)我懷疑基于andriod系統(tǒng)的機(jī)制構(gòu)建類(lèi)似應(yīng)用穗慕,osgi的采用依然值得商榷饿敲。因此,osgi確實(shí)面臨雞肋之嫌逛绵。
分布式應(yīng)用的關(guān)鍵技術(shù)點(diǎn)及解決思路匯總
為什么要分布
為得到吞吐量和可靠性及故障隔離的架構(gòu)屬性怀各,需要將傳統(tǒng)的單一應(yīng)用按照業(yè)務(wù)邏輯進(jìn)行垂直拆分以實(shí)現(xiàn)構(gòu)建工程的獨(dú)立,部署的獨(dú)立术浪。
分布失去了什么
進(jìn)程內(nèi)服務(wù)調(diào)用的便利性和可測(cè)試性
代價(jià)巨大的資源分布導(dǎo)致的跨資源事務(wù)能力
部署和運(yùn)維工作量指數(shù)級(jí)增長(zhǎng)
不可靠網(wǎng)絡(luò)的應(yīng)用狀態(tài)一致性
及其復(fù)雜的分布式應(yīng)用依賴(lài)關(guān)系
分布式關(guān)鍵技術(shù)選擇
容器級(jí)的分布式應(yīng)用工程和部署管理瓢对;
可視化的分布式應(yīng)用及服務(wù)監(jiān)視管理視圖;
前端和后端應(yīng)用的分離胰苏;
客戶(hù)端路由
服務(wù)注冊(cè)中心
分布式協(xié)調(diào)
消息中件間
分布式存儲(chǔ)
集成框架