Service Mesh:服務(wù)網(wǎng)格有哪些應(yīng)用
Dubbo 和 Spring Cloud ,這兩個框架是面試中的熱點
本文就梳理下 Dubbo 和 Spring Cloud 的應(yīng)用特性,以及兩個組件功能對比
Dubbo 應(yīng)用
Dubbo 是阿里開源的一個分布式服務(wù)框架
目的是 支持高性能的遠程服務(wù)調(diào)用,并且進行相關(guān)的服務(wù)治理
從功能上,Dubbo 可以對標(biāo) gRPC,Thrift 等典型的 RPC 框架
總體架構(gòu)

應(yīng)用特性
- 基于 SPI 的擴展
SPI(Service Provider Interface) 是 JDK 內(nèi)置的一種服務(wù)提供發(fā)現(xiàn)機制
要獲取一個類的擴展必須加載所有實現(xiàn)類,得到指定的實現(xiàn)類需要遍歷
Dubbo 中增強了原生的 SPI 實現(xiàn),可以通過指定的擴展類名稱來找到具體的實現(xiàn) - 靈活的服務(wù)調(diào)用
Dubbo 支持多種服務(wù)調(diào)用方式
針對服務(wù)端和消費端的線程池,集群調(diào)用模式,異步和同步調(diào)用等都可以進行靈活的配置 - 責(zé)任鏈和插件模式
使用者可以在服務(wù)調(diào)用的責(zé)任鏈上,對各個環(huán)節(jié)進行自定義實現(xiàn)
也可通過這種方式,解決 Dubbo 自帶策略有限的問題
Dubbo 實現(xiàn)了一個類似微內(nèi)核加插件的設(shè)計,整體的可擴展性和靈活性都比較高 - 高級特性支持
Dubbo 對遠程服務(wù)調(diào)用提供了非常細粒度的功能支持
比如服務(wù)發(fā)布支持 XML,注解等多種方式,調(diào)用可以選擇泛化調(diào)用,Mock 調(diào)用等
Spring Cloud 應(yīng)用
Spring Cloud 基于 Spring Boot,是一系列組件的集成
為微服務(wù)開發(fā)提供一個比較全面的解決方案
包括服務(wù)發(fā)現(xiàn)功能,配置管理功能,API 網(wǎng)關(guān),限流熔斷組件,調(diào)用跟蹤等一系列的對應(yīng)實現(xiàn)
總體架構(gòu)

應(yīng)用特性
Spring Cloud 目前主要的解決方案包括:
Spring Cloud Netflix 系列,以及 Spring Cloud Config,Spring Cloud Consul 等
Spring Cloud 典型的應(yīng)用:
- 配置中心,一般使用 Spring Cloud Config 實現(xiàn),服務(wù)發(fā)現(xiàn)也可以管理部分配置
- 服務(wù)發(fā)現(xiàn),使用 Eureka 實現(xiàn),也可以擴展 Consul 等
- API網(wǎng)關(guān),使用 Zuul 實現(xiàn),另外還有 Kong 等應(yīng)用
- 負載均衡,使用 Ribbon 實現(xiàn),也可以選擇 Feign
- 限流降級,使用 Hystrix 實現(xiàn)熔斷機制,也可以選擇 Sentinel
Dubbo 和 Spring Cloud 對比
介紹 Dubbo 時,主要是從 RPC 調(diào)用的特性入手
介紹 Spring Cloud 時,更多的是強調(diào)其在微服務(wù)方面提供的整體解決方案
Dubbo 更多關(guān)注遠程服務(wù)調(diào)用功能特性
Spring Cloud 包含了整體的解決方案,可以認為 Dubbo 支持的功能是 Spring Cloud 的子集
功能對比
生產(chǎn)環(huán)境使用 Dubbo 組件實現(xiàn)服務(wù)調(diào)用,需要強依賴 ZooKeeper 注冊中心
如果要實現(xiàn)服務(wù)治理和周邊功能,比如配置中心,服務(wù)跟蹤等,則需要集成其他組件的支持
- 注冊中心:需要依賴 ZooKeeper ,其他注冊中心應(yīng)用較少
- 分布式配置:可以使用 diamond,淘寶的開源組件來實現(xiàn)
- 分布式調(diào)用跟蹤:應(yīng)用擴展 Filter 用 Zippin 來做服務(wù)跟蹤
- 限流降級:可以使用開源的 Sentinel 組件,或者自定義 Filter 實現(xiàn)
對于 Spring Cloud,提供的功能更加多樣
服務(wù)治理只是其中一個方面,面向的是微服務(wù)整體的解決方案
調(diào)用方式
- Dubbo 使用 RPC 協(xié)議進行通信,支持多種序列號方式,包括 Dubbo 協(xié)議,Hessian,Kryo 等,如果針對特定的業(yè)務(wù)場景,用戶還可以擴展自定義協(xié)議實現(xiàn)
- Spring Cloud 一般使用 HTTP 協(xié)議的 RESTful API 調(diào)用
RESTful 接口相對 RPC 更為靈活,服務(wù)提供方和調(diào)用方可以更好的解耦,不需要依賴額外的 jar 包等
從性能角度考慮,一般來說,會認為 RPC 方式的性能更高
服務(wù)發(fā)現(xiàn)
- Dubbo 的服務(wù)發(fā)現(xiàn)通過注冊中心實現(xiàn),支持多種注冊中心
本地測試支持 Multicast,Simple 等簡單的服務(wù)發(fā)現(xiàn)方式 - Spring Cloud 有各種服務(wù)發(fā)現(xiàn)組件,包括 Eureka,Consul,Nacos 等
Spring Cloud 中的 Eureka 實現(xiàn)的是 AP 一致性,AP 更適合服務(wù)發(fā)現(xiàn)的場景
開發(fā)成本
- 應(yīng)用Dubbo 需要一定的開發(fā)成本,自定義功能需要實現(xiàn)各種 Filter 來做定制
- Spring Cloud 各種功能都有了對應(yīng)的開源實現(xiàn),應(yīng)用起來更加簡單
如果項目中已經(jīng)應(yīng)用了 Spring 框架,Spring Boot 等技術(shù)
可以更方便的集成 Spring Cloud ,減少已有項目的遷移成本
Dubbo 和 Spring Cloud 的目標(biāo)不同,關(guān)注的是微服務(wù)實現(xiàn)的不同維度
- Dubbo 看重遠程服務(wù)調(diào)用
- Spring Cloud 作為一個微服務(wù)生態(tài),覆蓋了從服務(wù)調(diào)用,到服務(wù)治理的各個場景
總結(jié)
本文對比了微服務(wù)的兩大技術(shù)棧
分別介紹了 Dubbo 和 Spring Cloud 的架構(gòu),以及應(yīng)用特性
- Spring Cloud 從發(fā)展到現(xiàn)在,社區(qū)一直保持高度活躍,各類解決方案越來越豐富
- Dubbo 在近幾年重啟維護,發(fā)布了新版本,也官宣了新的升級計劃