一澎迎、微服務(wù)實(shí)現(xiàn)框架
? ?當(dāng)前隨著微服務(wù)的應(yīng)用,越來越多的商用公司和開源團(tuán)體開發(fā)微服務(wù)的實(shí)現(xiàn)框架鳍刷。主要有:
1)Dubbo
? ?Dubbo是阿里巴巴公司開源的一個(gè)高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過高性能的 RPC 實(shí)現(xiàn)服務(wù)的輸出和輸入功能,可以和 Spring框架無縫集成宗侦。
? ? ? 由于該框架由于資料文檔較多,并且經(jīng)過阿里內(nèi)部系統(tǒng)忆蚀、其他公司大量驗(yàn)證矾利,對(duì)于國內(nèi)開發(fā)人員來說是學(xué)習(xí)和實(shí)現(xiàn)微服務(wù)首選框架。
2)Spring Cloud
? ? ?Spring Cloud是一系列框架的有序集合蜓谋。它利用Spring Boot的開發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā)梦皮,如服務(wù)發(fā)現(xiàn)注冊(cè)、配置中心桃焕、消息總線剑肯、負(fù)載均衡、斷路器观堂、數(shù)據(jù)監(jiān)控等让网,都可以用Spring Boot的開發(fā)風(fēng)格做到一鍵啟動(dòng)和部署。Spring并沒有重復(fù)制造輪子师痕,它只是將目前各家公司開發(fā)的比較成熟溃睹、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來,通過Spring Boot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理胰坟,最終給開發(fā)者留出了一套簡(jiǎn)單易懂因篇、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。
? ? 該框架中最為出名的便是Spring Cloud Netflix 微服務(wù)框架笔横。從項(xiàng)目的背景來看竞滓,Dubbo 國內(nèi)用的公司挺多,國內(nèi)影響力大吹缔,Spring Cloud 自然在國外影響力較大商佑,所以這個(gè)來看不分伯仲了,畢竟都有大公司在使用厢塘。
3)Dubbox
Dubbox是當(dāng)當(dāng)網(wǎng)擴(kuò)展了Dubbo茶没,
dubbx是當(dāng)當(dāng)網(wǎng)對(duì)原阿里dubbo2.x的升級(jí),并且兼容原有的dubbox晚碾。其中升級(jí)了zookeeper和spring版本抓半,并且支持restfull風(fēng)格的遠(yuǎn)程調(diào)用。
dubbox git地址:https://github.com/dangdangdotcom/dubbox
dubbox 關(guān)于restfull的介紹:http://dangdangdotcom.github.io/dubbox/rest.html
--------------------------------------------------------------------------------------------------------------------------------------------
dubbox的新特性介紹:
支持REST風(fēng)格遠(yuǎn)程調(diào)用(HTTP + JSON/XML):基于非常成熟的JBossRestEasy框 架格嘁,在dubbo中實(shí)現(xiàn)了REST風(fēng)格(HTTP + JSON/XML)的遠(yuǎn)程調(diào)用琅关,以顯著簡(jiǎn)化企業(yè)內(nèi)部的跨語言交互,同時(shí)顯著簡(jiǎn)化企業(yè)對(duì)外的Open API、無線API甚至AJAX服務(wù)端等等的開發(fā)涣易。事實(shí)上画机,這個(gè)REST調(diào)用也使得Dubbo可以對(duì)當(dāng)今特別流行的“微服務(wù)”架構(gòu)提供基礎(chǔ)性支持。 另外新症,REST調(diào)用也達(dá)到了比較高的性能步氏,在基準(zhǔn)測(cè)試下,HTTP + JSON與Dubbo 2.x默認(rèn)的RPC協(xié)議(即TCP + Hessian2二進(jìn)制序列化)之間只有1.5倍左右的差距徒爹,詳見文檔中的基準(zhǔn)測(cè)試報(bào)告荚醒。
支持基于Kryo和FST的Java高效序列化實(shí)現(xiàn):基于當(dāng)今比較知名的Kryo和FST高性能序列化庫,為Dubbo默認(rèn)的RPC協(xié)議添加新的序列化實(shí)現(xiàn)隆嗅,并優(yōu)化調(diào)整了其序列化體系界阁,比較顯著的提高了Dubbo RPC的性能,詳見文檔中的基準(zhǔn)測(cè)試報(bào)告胖喳。
支持基于Jackson的JSON序列化:基于業(yè)界應(yīng)用最廣泛的Jackson序列化庫泡躯,為Dubbo默認(rèn)的RPC協(xié)議添加新的JSON序列化實(shí)現(xiàn)。
支持基于嵌入式Tomcat的HTTP remoting體系:基于嵌入式tomcat實(shí)現(xiàn)dubbo 的HTTP remoting體系(即dubbo-remoting-http)丽焊,用以逐步取代Dubbo中舊版本的嵌入式Jetty较剃,可以顯著的提高REST等的遠(yuǎn) 程調(diào)用性能,并將Servlet API的支持從2.5升級(jí)到3.1技健。(注:除了REST写穴,dubbo中的WebServices、Hessian雌贱、HTTP Invoker等協(xié)議都基于這個(gè)HTTP remoting體系)啊送。
升級(jí)Spring:將dubbo中Spring由2.x升級(jí)到目前最常用的3.x版本,減少版本沖突帶來的麻煩欣孤。
升級(jí)ZooKeeper客戶端:將dubbo中的zookeeper客戶端升級(jí)到最新的版本馋没,以修正老版本中包含的bug。
支持完全基于Java代碼的Dubbo配置:基于Spring的Java Config导街,實(shí)現(xiàn)完全無XML的純Java代碼方式來配置dubbo
調(diào)整Demo應(yīng)用:暫時(shí)將dubbo的demo應(yīng)用調(diào)整并改寫以主要演示REST功能、Dubbo協(xié)議的新序列化方式纤子、基于Java代碼的Spring配置等等搬瑰。
修正了dubbo的bug包括配置、序列化控硼、管理界面等等的bug泽论。
注:dubbox和dubbo 2.x是兼容的,沒有改變dubbo的任何已有的功能和配置方式(除了升級(jí)了spring之類的版本)
4)ServiceComb框架
? ? ?該框架是華為的HWCloud在6月發(fā)布開源的一款微服務(wù)框架卡乾,基于Go/YAML進(jìn)行配置翼悴,部署特別快,源碼量也小,可以輕松地在一臺(tái)機(jī)子上分析與斷點(diǎn)鹦赎。詳細(xì)參考http://www.reibang.com/p/ba432eae0a8f
二.Dubbo簡(jiǎn)介
1)Dubbo的框架
上面從Dubbo官網(wǎng)直接拿來谍椅,看一下基于RPC層,服務(wù)提供方和服務(wù)消費(fèi)方之間的調(diào)用關(guān)系古话。
Provider: 暴露服務(wù)的服務(wù)提供方。
Consumer: 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。
Registry: 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心挑胸。
Monitor: 統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間的監(jiān)控中心揽思。
調(diào)用流程
0.服務(wù)容器負(fù)責(zé)啟動(dòng),加載肩狂,運(yùn)行服務(wù)提供者摘完。
1.服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)傻谁。
2.服務(wù)消費(fèi)者在啟動(dòng)時(shí)孝治,向注冊(cè)中心訂閱自己所需的服務(wù)。
3.注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者栅螟,如果有變更荆秦,注冊(cè)中心將基于長連接推送變更數(shù)據(jù)給消費(fèi)者。
4.服務(wù)消費(fèi)者力图,從提供者地址列表中步绸,基于軟負(fù)載均衡算法,選一臺(tái)提供者進(jìn)行調(diào)用吃媒,如果調(diào)用失敗瓤介,再選另一臺(tái)調(diào)用。
5.服務(wù)消費(fèi)者和提供者赘那,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間刑桑,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心
2)Dubbo的注冊(cè)中心
? ? ?注冊(cè)中心需要服務(wù)的提供者和消費(fèi)者在啟動(dòng)和停止時(shí)自動(dòng)注冊(cè),消費(fèi)者在選擇提供者也先通過在注冊(cè)中心根據(jù)集群的選擇策略來確定服務(wù)者募舟。Dubbo的注冊(cè)中心支持Zookeeper注冊(cè)中心祠斧、Multicast注冊(cè)中心、Redis注冊(cè)中心等拱礁。其中琢锋,Zookeeper使用較為普遍。
3)Dubbo項(xiàng)目
Dubbo項(xiàng)目可以在? http://dubbo.io/? 下載呢灶,目前版本是2.5.8吴超。目錄結(jié)構(gòu)如下圖:
可以通過Dubbo的代碼(使用Maven管理)組織,與上面的模塊進(jìn)行比較鸯乃。簡(jiǎn)單說明各個(gè)包的情況:
dubbo-common 公共邏輯模塊鲸阻,包括Util類和通用模型。
dubbo-remoting 遠(yuǎn)程通訊模塊,相當(dāng)于Dubbo協(xié)議的實(shí)現(xiàn)鸟悴,如果RPC用RMI協(xié)議則不需要使用此包陈辱。
dubbo-rpc 遠(yuǎn)程調(diào)用模塊,抽象各種協(xié)議遣臼,以及動(dòng)態(tài)代理性置,只包含一對(duì)一的調(diào)用,不關(guān)心集群的管理揍堰。
dubbo-cluster 集群模塊鹏浅,將多個(gè)服務(wù)提供方偽裝為一個(gè)提供方,包括:負(fù)載均衡屏歹、容錯(cuò)隐砸、路由等,集群的地址列表可以是靜態(tài)配置的蝙眶,也可以是由注冊(cè)中心下發(fā)季希。
dubbo-registry 注冊(cè)中心模塊,基于注冊(cè)中心下發(fā)地址的集群方式幽纷,以及對(duì)各種注冊(cè)中心的抽象式塌。
dubbo-monitor 監(jiān)控模塊,統(tǒng)計(jì)服務(wù)調(diào)用次數(shù)友浸,調(diào)用時(shí)間的峰尝,調(diào)用鏈跟蹤的服務(wù)。
dubbo-config 配置模塊收恢,是Dubbo對(duì)外的API武学,用戶通過Config使用Dubbo,隱藏Dubbo所有細(xì)節(jié)伦意。
dubbo-container 容器模塊火窒,是一個(gè)Standalone的容器,以簡(jiǎn)單的Main加載Spring啟動(dòng)驮肉,因?yàn)榉?wù)通常不需要Tomcat/JBoss等Web容器的特性熏矿,沒必要用Web容器去加載服務(wù)。
參考地址:http://blog.csdn.net/noaman_wgs/article/details/70214612
http://dubbo.io/
http://www.reibang.com/p/ba432eae0a8f
http://shiyanjun.cn/archives/325.html