19. Dubbo 和 Spring Cloud 兩大技術(shù)棧如何選項

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)
20230807200518.jpg
應(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)
20230807201916.jpg
應(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ā)布了新版本,也官宣了新的升級計劃
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容