Java 微服务框架对比:Dubbo 和 Spring Cloud
微服務(wù)特點(diǎn):
微服務(wù)(Microservices)是一種架構(gòu)風(fēng)格,一個(gè)大型復(fù)雜軟件應(yīng)用由一個(gè)或多個(gè)微服務(wù)組成。
微服務(wù)框架
?相關(guān)概念:
?
| rpc | 1、遠(yuǎn)端過(guò)程調(diào)用,其調(diào)用協(xié)議通常包含傳輸協(xié)議和編碼協(xié)議。 2、RPC 可以把 HTTP 作為一種傳輸協(xié)議(比如 gRPC 使用 HTTP 2.0 協(xié)議傳輸),本身還會(huì)封裝一層 RPC 框架的應(yīng)用層協(xié)議,不同語(yǔ)言之間調(diào)用需要依賴(lài) RPC 協(xié)議 |
| grpc | HTTP 2.0 協(xié)議傳輸 |
| dubbo | 自定義報(bào)文的 TCP 協(xié)議。編碼協(xié)議包含: 如基于文本編碼的 XML Json,也有二進(jìn)制編碼的 ProtoBuf Binpack 等 |
| rest | REST 風(fēng)格直接把 HTTP 作為應(yīng)用協(xié)議(直接和服務(wù)打交道),不同語(yǔ)言之間調(diào)用比較方便 |
?
為什么 Dubbo 比 Spring Cloud 性能要高一些?
Dubbo 采用單一長(zhǎng)連接和 NIO 異步通訊(保持連接/輪詢(xún)處理),使用自定義報(bào)文的 TCP 協(xié)議,并且序列化使用定制 Hessian2 框架,適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及服務(wù)消費(fèi)者機(jī)器數(shù)遠(yuǎn)大于服務(wù)提供者機(jī)器數(shù)的情況,但不適用于傳輸大數(shù)據(jù)的服務(wù)調(diào)用
Spring Cloud 直接使用 HTTP 協(xié)議(但也不是強(qiáng)綁定,也可以使用 RPC 庫(kù),或者采用 HTTP 2.0 + 長(zhǎng)鏈接方式(Fegin 可以靈活設(shè)置))。
Dubbo
分布式服務(wù)框架,致力于提供高性能和透明化的?RPC 遠(yuǎn)程服務(wù)調(diào)用方案,以及?SOA 服務(wù)治理方案。簡(jiǎn)單的說(shuō),Dubbo 就是個(gè)服務(wù)框架,說(shuō)白了就是個(gè)遠(yuǎn)程服務(wù)調(diào)用的分布式框架.
| dubbo | 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)用次調(diào)和調(diào)用時(shí)間的監(jiān)控中心。 | |
| Container: 服務(wù)運(yùn)行容器。 |
SpringCloud
基于 Spring Boot,為微服務(wù)體系開(kāi)發(fā)中的架構(gòu)問(wèn)題,提供了一整套的解決方案——服務(wù)注冊(cè)與發(fā)現(xiàn),服務(wù)消費(fèi),服務(wù)保護(hù)與熔斷,網(wǎng)關(guān),分布式調(diào)用追蹤,分布式配置管理等。Spring Boot 是 Spring 的一套快速配置腳手架,使用默認(rèn)大于配置的理念,用于快速開(kāi)發(fā)單個(gè)微服務(wù)。
核心功能:
- 分布式/版本化配置
- 服務(wù)注冊(cè)和發(fā)現(xiàn)
- 路由
- 服務(wù)和服務(wù)之間的調(diào)用
- 負(fù)載均衡
- 斷路器
- 分布式消息傳遞
流程:
- 請(qǐng)求統(tǒng)一通過(guò) API 網(wǎng)關(guān)(Zuul)來(lái)訪問(wèn)內(nèi)部服務(wù)。
- 網(wǎng)關(guān)接收到請(qǐng)求后,從注冊(cè)中心(Eureka)獲取可用服務(wù)。
- 由 Ribbon 進(jìn)行均衡負(fù)載后,分發(fā)到后端具體實(shí)例。
- 微服務(wù)之間通過(guò) Feign 進(jìn)行通信處理業(yè)務(wù)。
- Hystrix 負(fù)責(zé)處理服務(wù)超時(shí)熔斷。
- Turbine 監(jiān)控服務(wù)間的調(diào)用和熔斷相關(guān)指標(biāo)。
對(duì)比
| dubbo | 優(yōu)點(diǎn): Dubbo 支持?RPC 調(diào)用,服務(wù)之間的調(diào)用性能會(huì)很好。 支持多種序列化協(xié)議,如 Hessian、HTTP、WebService。 Dobbo Admin后臺(tái)管理功能強(qiáng)大,提供了路由規(guī)則、動(dòng)態(tài)配置、訪問(wèn)控制、權(quán)重調(diào)節(jié)、均衡負(fù)載等功能。 在國(guó)內(nèi)影響力比較大,中文社區(qū)文檔較為全面。 阿里最近重啟維護(hù) |
| 缺點(diǎn): 1、Registry 嚴(yán)重依賴(lài)第三方組件(zookeeper 或者 redis),當(dāng)這些組件出現(xiàn)問(wèn)題時(shí),服務(wù)調(diào)用很快就會(huì)中斷 2、只支持 RPC 調(diào)用。使得服務(wù)提供方(抽象接口)與調(diào)用方在代碼上產(chǎn)生了強(qiáng)依賴(lài) 3、Dubbo?只是實(shí)現(xiàn)了服務(wù)治理,其他微服務(wù)框架并未包含,需要結(jié)合第三方框架實(shí)現(xiàn)(比如分布式配置用淘寶的 Diamond、服務(wù)跟蹤用京東的 Hydra,但使用相對(duì)麻煩些),開(kāi)發(fā)成本較高,且風(fēng)險(xiǎn)較大。 | |
| springcloud | 優(yōu)點(diǎn) 1、有強(qiáng)大的 Spring 社區(qū)、Netflix 等公司支持 2、標(biāo)準(zhǔn)化的將微服務(wù)的成熟產(chǎn)品和框架結(jié)合一起,Spring Cloud 提供整套的微服務(wù)解決方案,開(kāi)發(fā)成本較低,且風(fēng)險(xiǎn)較小。 3、基于 Spring Boot,具有簡(jiǎn)單配置、快速開(kāi)發(fā)、輕松部署、方便測(cè)試的特點(diǎn) 4、支持 REST 服務(wù)調(diào)用,相比于 RPC,更加輕量化和靈活(服務(wù)之間只依賴(lài)一紙契約,不存在代碼級(jí)別的強(qiáng)依賴(lài)),有利于跨語(yǔ)言服務(wù)的實(shí)現(xiàn),以及服務(wù)的發(fā)布部署。另外,結(jié)合 Swagger,也使得服務(wù)的文檔一體化 5、提供了 Docker 及 Kubernetes 微服務(wù)編排支持 6、企業(yè)應(yīng)用非常多,經(jīng)受了大公司的應(yīng)用考驗(yàn)(比如 Netfilx 公司),以及強(qiáng)大的開(kāi)源社區(qū)支持 |
| 缺點(diǎn): 1、REST 服務(wù)調(diào)用性能會(huì)比 RPC 低一些(但也不是強(qiáng)綁定) 2、Spring Cloud 整合了大量組件,相關(guān)文檔比較復(fù)雜,需要針對(duì)性的進(jìn)行閱讀 3、支持 REST 服務(wù)調(diào)用,可能因?yàn)?strong>接口定義過(guò)輕,導(dǎo)致定義文檔與實(shí)際實(shí)現(xiàn)不一致導(dǎo)致服務(wù)集成時(shí)的問(wèn)題(可以使用統(tǒng)一文檔和版本管理解決,比如 Swagger)。 |
?
性能比較:
選型出發(fā)點(diǎn)
微服務(wù)選型要評(píng)估以下幾點(diǎn):
選型建議
1、使用 Dubbo 構(gòu)建的微服務(wù)架構(gòu)就像組裝電腦,各環(huán)節(jié)我們的選擇自由度很高,但是最終結(jié)果很有可能因?yàn)橐粭l內(nèi)存質(zhì)量不行就點(diǎn)不亮了,總是讓人不怎么放心,但是如果你是一名高手,那這些都不是問(wèn)題;而 Spring Cloud 就像品牌機(jī),在 Spring Source 的整合下,做了大量的兼容性測(cè)試,保證了機(jī)器擁有更高的穩(wěn)定性,但是如果要在使用非原裝組件外的東西,就需要對(duì)其基礎(chǔ)有足夠的了解。
2、Spring Cloud 可以說(shuō)是一個(gè)更完備的微服務(wù)解決方案,它從功能性上是 Dubbo 的一個(gè)超集對(duì)于一些中小型企業(yè) Spring Cloud 可能是一個(gè)更好的選擇
3、Dubbo 和 Spring Cloud 的主要不同體現(xiàn)在兩個(gè)方面:服務(wù)調(diào)用方式不同和專(zhuān)注點(diǎn)不同(生態(tài)不同)。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java 微服务框架对比:Dubbo 和 Spring Cloud的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 项目设计报告可行性分析
- 下一篇: Java Servlet API中的fo