Service Mesh:服務(wù)網(wǎng)格有哪些應(yīng)用
Dubbo 和 Spring Cloud 嚷闭,這兩個(gè)框架是面試中的熱點(diǎn)
本文就梳理下 Dubbo 和 Spring Cloud 的應(yīng)用特性攒岛,以及兩個(gè)組件功能對(duì)比
Dubbo 應(yīng)用
Dubbo 是阿里開(kāi)源的一個(gè)分布式服務(wù)框架
目的是 支持高性能的遠(yuǎn)程服務(wù)調(diào)用,并且進(jìn)行相關(guān)的服務(wù)治理
從功能上胞锰,Dubbo 可以對(duì)標(biāo) gRPC灾锯,Thrift 等典型的 RPC 框架
總體架構(gòu)
應(yīng)用特性
- 基于 SPI 的擴(kuò)展
SPI(Service Provider Interface) 是 JDK 內(nèi)置的一種服務(wù)提供發(fā)現(xiàn)機(jī)制
要獲取一個(gè)類(lèi)的擴(kuò)展必須加載所有實(shí)現(xiàn)類(lèi),得到指定的實(shí)現(xiàn)類(lèi)需要遍歷
Dubbo 中增強(qiáng)了原生的 SPI 實(shí)現(xiàn)嗅榕,可以通過(guò)指定的擴(kuò)展類(lèi)名稱(chēng)來(lái)找到具體的實(shí)現(xiàn) - 靈活的服務(wù)調(diào)用
Dubbo 支持多種服務(wù)調(diào)用方式
針對(duì)服務(wù)端和消費(fèi)端的線程池顺饮,集群調(diào)用模式,異步和同步調(diào)用等都可以進(jìn)行靈活的配置 - 責(zé)任鏈和插件模式
使用者可以在服務(wù)調(diào)用的責(zé)任鏈上凌那,對(duì)各個(gè)環(huán)節(jié)進(jìn)行自定義實(shí)現(xiàn)
也可通過(guò)這種方式兼雄,解決 Dubbo 自帶策略有限的問(wèn)題
Dubbo 實(shí)現(xiàn)了一個(gè)類(lèi)似微內(nèi)核加插件的設(shè)計(jì),整體的可擴(kuò)展性和靈活性都比較高 - 高級(jí)特性支持
Dubbo 對(duì)遠(yuǎn)程服務(wù)調(diào)用提供了非常細(xì)粒度的功能支持
比如服務(wù)發(fā)布支持 XML案怯,注解等多種方式君旦,調(diào)用可以選擇泛化調(diào)用,Mock 調(diào)用等
Spring Cloud 應(yīng)用
Spring Cloud 基于 Spring Boot,是一系列組件的集成
為微服務(wù)開(kāi)發(fā)提供一個(gè)比較全面的解決方案
包括服務(wù)發(fā)現(xiàn)功能金砍,配置管理功能局蚀,API 網(wǎng)關(guān),限流熔斷組件恕稠,調(diào)用跟蹤等一系列的對(duì)應(yīng)實(shí)現(xiàn)
總體架構(gòu)
應(yīng)用特性
Spring Cloud 目前主要的解決方案包括:
Spring Cloud Netflix 系列琅绅,以及 Spring Cloud Config,Spring Cloud Consul 等
Spring Cloud 典型的應(yīng)用:
- 配置中心鹅巍,一般使用 Spring Cloud Config 實(shí)現(xiàn)千扶,服務(wù)發(fā)現(xiàn)也可以管理部分配置
- 服務(wù)發(fā)現(xiàn),使用 Eureka 實(shí)現(xiàn)骆捧,也可以擴(kuò)展 Consul 等
- API網(wǎng)關(guān)澎羞,使用 Zuul 實(shí)現(xiàn),另外還有 Kong 等應(yīng)用
- 負(fù)載均衡敛苇,使用 Ribbon 實(shí)現(xiàn)妆绞,也可以選擇 Feign
- 限流降級(jí),使用 Hystrix 實(shí)現(xiàn)熔斷機(jī)制枫攀,也可以選擇 Sentinel
Dubbo 和 Spring Cloud 對(duì)比
介紹 Dubbo 時(shí)括饶,主要是從 RPC 調(diào)用的特性入手
介紹 Spring Cloud 時(shí),更多的是強(qiáng)調(diào)其在微服務(wù)方面提供的整體解決方案
Dubbo 更多關(guān)注遠(yuǎn)程服務(wù)調(diào)用功能特性
Spring Cloud 包含了整體的解決方案来涨,可以認(rèn)為 Dubbo 支持的功能是 Spring Cloud 的子集
功能對(duì)比
生產(chǎn)環(huán)境使用 Dubbo 組件實(shí)現(xiàn)服務(wù)調(diào)用图焰,需要強(qiáng)依賴(lài) ZooKeeper 注冊(cè)中心
如果要實(shí)現(xiàn)服務(wù)治理和周邊功能,比如配置中心蹦掐,服務(wù)跟蹤等技羔,則需要集成其他組件的支持
- 注冊(cè)中心:需要依賴(lài) ZooKeeper ,其他注冊(cè)中心應(yīng)用較少
- 分布式配置:可以使用 diamond卧抗,淘寶的開(kāi)源組件來(lái)實(shí)現(xiàn)
- 分布式調(diào)用跟蹤:應(yīng)用擴(kuò)展 Filter 用 Zippin 來(lái)做服務(wù)跟蹤
- 限流降級(jí):可以使用開(kāi)源的 Sentinel 組件堕阔,或者自定義 Filter 實(shí)現(xiàn)
對(duì)于 Spring Cloud,提供的功能更加多樣
服務(wù)治理只是其中一個(gè)方面颗味,面向的是微服務(wù)整體的解決方案
調(diào)用方式
- Dubbo 使用 RPC 協(xié)議進(jìn)行通信超陆,支持多種序列號(hào)方式,包括 Dubbo 協(xié)議浦马,Hessian时呀,Kryo 等,如果針對(duì)特定的業(yè)務(wù)場(chǎng)景晶默,用戶(hù)還可以擴(kuò)展自定義協(xié)議實(shí)現(xiàn)
- Spring Cloud 一般使用 HTTP 協(xié)議的 RESTful API 調(diào)用
RESTful 接口相對(duì) RPC 更為靈活谨娜,服務(wù)提供方和調(diào)用方可以更好的解耦能庆,不需要依賴(lài)額外的 jar 包等
從性能角度考慮仰剿,一般來(lái)說(shuō)猜旬,會(huì)認(rèn)為 RPC 方式的性能更高
服務(wù)發(fā)現(xiàn)
- Dubbo 的服務(wù)發(fā)現(xiàn)通過(guò)注冊(cè)中心實(shí)現(xiàn),支持多種注冊(cè)中心
本地測(cè)試支持 Multicast粤铭,Simple 等簡(jiǎn)單的服務(wù)發(fā)現(xiàn)方式 - Spring Cloud 有各種服務(wù)發(fā)現(xiàn)組件鳍置,包括 Eureka识补,Consul蹂安,Nacos 等
Spring Cloud 中的 Eureka 實(shí)現(xiàn)的是 AP 一致性,AP 更適合服務(wù)發(fā)現(xiàn)的場(chǎng)景
開(kāi)發(fā)成本
- 應(yīng)用Dubbo 需要一定的開(kāi)發(fā)成本彰阴,自定義功能需要實(shí)現(xiàn)各種 Filter 來(lái)做定制
- Spring Cloud 各種功能都有了對(duì)應(yīng)的開(kāi)源實(shí)現(xiàn)瘾敢,應(yīng)用起來(lái)更加簡(jiǎn)單
如果項(xiàng)目中已經(jīng)應(yīng)用了 Spring 框架,Spring Boot 等技術(shù)
可以更方便的集成 Spring Cloud 尿这,減少已有項(xiàng)目的遷移成本
Dubbo 和 Spring Cloud 的目標(biāo)不同簇抵,關(guān)注的是微服務(wù)實(shí)現(xiàn)的不同維度
- Dubbo 看重遠(yuǎn)程服務(wù)調(diào)用
- Spring Cloud 作為一個(gè)微服務(wù)生態(tài),覆蓋了從服務(wù)調(diào)用射众,到服務(wù)治理的各個(gè)場(chǎng)景
總結(jié)
本文對(duì)比了微服務(wù)的兩大技術(shù)棧
分別介紹了 Dubbo 和 Spring Cloud 的架構(gòu)碟摆,以及應(yīng)用特性
- Spring Cloud 從發(fā)展到現(xiàn)在,社區(qū)一直保持高度活躍叨橱,各類(lèi)解決方案越來(lái)越豐富
- Dubbo 在近幾年重啟維護(hù)焦履,發(fā)布了新版本,也官宣了新的升級(jí)計(jì)劃