hashmap? 通過hash函數(shù) 鏈表 +紅黑樹
框架比較的方面Dubbo+zookeeperSpring Cloud
性能方面? Dubbo是阿里巴巴開源的頂級項目,以前是用于阿里巴巴的分布式服務(wù)治理框架,其性能毋庸置疑一定是很強的,它適合一些比較大的公司用的分布式服務(wù)治理框架。(注:2017年之前阿里巴巴沒有對其進行更新維護,但是2017年Dubbo項目官網(wǎng)宣布重新對其進行更新維護,并且在2018年Dubbo項目正式進入了Apache孵化器)?Spring Cloud是最近才興起的一個分布式服務(wù)框架,現(xiàn)在它的社區(qū)十分的火爆,代碼的更新迭代十分的快;它一般適合于中小型企業(yè),并且性能比Dubbo低一些;
具有的特點 Dubbo有良好的連通性、健壯性、伸縮性、升級性。結(jié)合Dubbo可以相對于單體系統(tǒng)提升系統(tǒng)整體的擴展性。
?Dubbo提供了多種協(xié)議給用戶選擇, 如dubbo、hessian、rmi 。 并可為每個服務(wù)指定不同的傳輸協(xié)議,粒度可以細化到方法,?不同服務(wù)在性能上適用不同協(xié)議進行傳輸,比如大數(shù)據(jù)用短連接協(xié)議,小數(shù)據(jù)大并發(fā)用長連接協(xié)議。
Spring Cloud來源于Spring,質(zhì)量、穩(wěn)定性、持續(xù)性都可以得到保證Spring Cloud是Java領(lǐng)域最適合做微服務(wù)的框架。
相比于其它框架,Spring Cloud對微服務(wù)周邊環(huán)境的支持力度最大。
Spirng Cloud天然支持Spring Boot,更加便于業(yè)務(wù)落地。
??框架結(jié)構(gòu)
(自身支持的組件)
見下圖(spirng cloud對比 Dubbo 圖(1))
注:(dubbo本身自帶的組件不夠支持搭建分布式系統(tǒng)的架構(gòu),但是其可以集成第三方的開源項目,從而完善分布式系統(tǒng)的架構(gòu)。)
方便性? Dubbo使用起來不太方便,由于許多組件其本身不支持,所以我們在搭建架構(gòu)環(huán)境時,需要集成一些其他的開源組件,集成時會遇到種種的困難,并且在以后的項目維護和升級也不方便。
Dubbo服務(wù)調(diào)用的方式是RPC,服務(wù)提供方與調(diào)用方接口依賴方式太強:我們需要將調(diào)用的抽象接口依賴到消費者項目中才能調(diào)用服務(wù),這會導(dǎo)致在以后的開發(fā)、測試、版本管理上很麻煩。
SpringCloud自身的組件可以搭建成一個完整的微服務(wù)架構(gòu),并且搭建起來稍微簡單一些;
SpringCloud調(diào)用的方式是REST,REST接口相比RPC更為輕量化,服務(wù)提供方和調(diào)用方的依賴只是依靠一紙契約,不存在代碼級別的強依賴,當(dāng)然REST接口也有缺點,很容易導(dǎo)致定義文檔與實際實現(xiàn)不一致導(dǎo)致服務(wù)集成時的問題。
靈活性?由于dubbo許多組件都是集成的第三方,所以dubbo組件之間的自由度很高,dubbo更加的靈活SpringCloud自身支持了組件,各個組件之間的關(guān)聯(lián)關(guān)系已經(jīng)配置好了,所以它的靈活度不是很好,如果想要用第三方組件代替其中的一個組件的話會有一些困難。
服務(wù)注冊中心Zookeeper保證C(一致性)P(分區(qū)容錯性)
當(dāng)master節(jié)點因為網(wǎng)絡(luò)故障與其他節(jié)點失去聯(lián)系時,剩余節(jié)點會重新進行l(wèi)eader選舉。問題在于,選舉leader的時間太長,30 ~ 120s, 且選舉期間整個zk集群都是不可用的,這就導(dǎo)致在選舉期間注冊服務(wù)癱瘓。
? Eureka保證A(可用性)P(分區(qū)容錯性)
? Eureka各個節(jié)點都是平等的,幾個節(jié)點掛掉不會影響正常工作。而Eureka的客戶端在向某個Eureka注冊或時如果發(fā)現(xiàn)連接失敗,則會自動切換至其它節(jié)點,只要有一臺Eureka還在,就能保證注冊服務(wù)可用(保證可用性),只不過查到的信息可能不是最新的(不保證強一致性)
代碼開發(fā)角度Dubbo常與Spring、zookeeper結(jié)合,而且實現(xiàn)只是通過xml來配置服務(wù)地址、名稱、端口,代碼的侵入性是很小的,可以說幾乎沒有代碼入侵。Spring Cloud,由于它的實現(xiàn)需要類注解等,所以多少具有一定代碼侵入。
