Spring Cloud的系統(tǒng)結(jié)構(gòu)更簡單,“注冊+springmvc=springcloud”,而 Dubbo 各種復(fù)雜的 URL、protocol、register、invocation、dubbofilter、dubboSPI,dubbo序列化……炫技的成分更多一些。
從性能考慮
Dubbo 的網(wǎng)絡(luò)消耗小于 Spring Cloud,但是在國內(nèi)95%的公司內(nèi),網(wǎng)絡(luò)消耗不是什么太大問題。如果真的成了問題,通過壓縮、二進(jìn)制、高速緩存、分段降級等方法,很容易解。
從開發(fā)難易度考慮
Dubbo 的神坑是 jar 包依賴,開發(fā)階段難度極大。我曾經(jīng)帶一個(gè)三十人的團(tuán)隊(duì),因?yàn)?jar 包升級問題,把每個(gè)人的電腦都操作過。尤其每個(gè)人電腦的庫路徑、命令、快捷鍵、鍵盤,鼠標(biāo)快慢都不一樣,那會(huì)兒我默默的(此處省略200字)。Spring Cloud比較自由,但帶來的問題是無法“強(qiáng)力約束接口規(guī)范”,建議用行政方式解決,且我們團(tuán)隊(duì)的強(qiáng)力行政約束做的還是比較好的,在接口管控層面比較強(qiáng)效,一個(gè)沒有行政組織能力的IT團(tuán)隊(duì)真的是個(gè)廢渣,用什么框架都不好使。
Spring Cloud 由眾多子項(xiàng)目組成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系統(tǒng)及微服務(wù)常用的工具,如配置管理、服務(wù)發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、一次性 token、全局鎖、選主、分布式會(huì)話和集群狀態(tài)等,滿足了構(gòu)建微服務(wù)所需的所有解決方案。比如使用 Spring Cloud Config 可以實(shí)現(xiàn)統(tǒng)一配置中心,對配置進(jìn)行統(tǒng)一管理;使用Spring Cloud Netflix 可以實(shí)現(xiàn) Netflix 組件的功能—服務(wù)發(fā)現(xiàn)(Eureka)、智能路由(Zuul)、客戶端負(fù)載均衡(Ribbon)。
但它并沒有重復(fù)造輪子,而是選用目前各家公司開發(fā)的比較成熟的、經(jīng)得住實(shí)踐考驗(yàn)的服務(wù)框架(我們需要特別感謝 Netflix ,這家很早就成功實(shí)踐微服務(wù)的公司,幾年前把自家?guī)缀跽麄€(gè)微服務(wù)框架棧貢獻(xiàn)給了社區(qū),Spring Cloud 主要是對 Netflix 開源組件的進(jìn)一步封裝),通過 Spring Boot 進(jìn)行封裝集成并簡化其使用方式。基于 Spring Boot,意味著其使用方式如 Spring Boot 簡單易用;能夠與Spring Framework、Spring Boot、Spring Data 等其它 Spring 項(xiàng)目完美融合,意味著能從 Spring 獲得巨大的便利,意味著能減少已有項(xiàng)目的遷移成本。
Spring 推出 Spring Boot/Cloud 也是因?yàn)樽陨淼暮芏嘣颉pring 最初推崇的輕量級框架,隨著不斷的發(fā)展也越來越龐大,隨著集成項(xiàng)目越來越多,配置文件也越來越混亂,慢慢的背離最初的理念。隨著這么多年的發(fā)展,微服務(wù)、分布式鏈路跟蹤等更多新的技術(shù)理念的出現(xiàn),Spring 急需一款框架來改善以前的開發(fā)模式,因此才會(huì)出現(xiàn) Spring Boot/Cloud 項(xiàng)目,我們現(xiàn)在訪問 Spring 官網(wǎng),會(huì)發(fā)現(xiàn) Spring Boot 和 Spring Cloud 已經(jīng)放到首頁最重點(diǎn)突出的三個(gè)項(xiàng)目中的前兩個(gè),可見 Spring 對這兩個(gè)框架的重視程度。
總結(jié)一下,Dubbo 曾經(jīng)確實(shí)很牛逼,但是 Spring Cloud 是站在近些年技術(shù)發(fā)展之上進(jìn)行開發(fā),因此更具技術(shù)代表性。Spring Cloud 是整機(jī),Dubbo 需要自己組裝;整機(jī)的性能有保證,組裝的機(jī)子更自由。