dAd28資訊網——每日最新資訊28at.com
Spring Cloud Alibaba 致力于提供微服務開發的一站式解決方案。包含開發分布式應用微服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕松使用這些組件來開發分布式應用服務。本文基于官方文檔,對整個體系做了整體梳理。dAd28資訊網——每日最新資訊28at.com
dAd28資訊網——每日最新資訊28at.com
SpringCloud Alibaba體系一覽dAd28資訊網——每日最新資訊28at.com
注冊中心-Nacos
Nacos(Dynamic Naming and Configuration Service):一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。dAd28資訊網——每日最新資訊28at.com
Nacos就是注冊中心+配置中心的組合 --> 等價于 Nacos = Eureka+Config +BusdAd28資訊網——每日最新資訊28at.com
dAd28資訊網——每日最新資訊28at.com
注冊中心對比dAd28資訊網——每日最新資訊28at.com
CAP原則:Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性)。分布式系統要么滿足CA,要么CP,要么AP。無法同時滿足CAP。dAd28資訊網——每日最新資訊28at.com
Nacos支持AP和CP切換。何時選擇使用何種模式?dAd28資訊網——每日最新資訊28at.com
- 如果不需要存儲服務級別的信息且服務實例是通過nacos-chient注冊,并能夠保持心跳上報,那么就可以選擇AP模式。 當前主流的服務如Spring cloud 和 Dubbo 服務,都適用于AP模式。 AP模式為了服務的可能性而減弱了一致性,因此AP模式下只支持注冊臨時實例。
- 如果需要在服務級別編輯或者存儲配置信息,那么CP是必須。K8S服務和DNS服務則適用于CP模式。 CP模式下則支持注冊持久化實例,此時則是以 Raft協議為集群運行模式,該模式下注冊實例之前必須先注冊服務,如果服務不存在,則會返回錯識。
服務調用-OpenFeign
(1)Feign
Feign是Spring Cloud組件中的一個輕量級RESTful的HTTP服務客戶端dAd28資訊網——每日最新資訊28at.com
Feign內置了Ribbon,用來做客戶端負載均衡,去調用服務注冊中心的服務。 Feign的使用方式是:使用Feign的注解定義接口,調用這個接口,就可以調用服務注冊中心的服務dAd28資訊網——每日最新資訊28at.com
依賴:
spring-cloud-starter-feigndAd28資訊網——每日最新資訊28at.com
(2)OpenFeign
OpenFeign是Spring Cloud在Feign的基礎上支持了SpringMVC的注解,如@RequesMapping等等。dAd28資訊網——每日最新資訊28at.com
OpenFeign的@Feignclient可以解析SpringMvc的@RequestMapping注解下的接口,并通過動態代理的方式產生實現類,實現類中做負載均衡并調用其他服務。dAd28資訊網——每日最新資訊28at.com
依賴:
spring-cloud-starter-openfeigndAd28資訊網——每日最新資訊28at.com
負載均衡-LoadBalancer
從Spring Cloud 2020版本開始,Spring Cloud移除了 Ribbon,使用Spring Cloud Loadbalancer作為客戶端的負載均衡組件。其使用方式與Ribbon基本兼容,可以從Ribbon進行平滑過渡。dAd28資訊網——每日最新資訊28at.com
兩種負載均衡的客戶端:dAd28資訊網——每日最新資訊28at.com
(1)RestTemplate
RestTemplate是Spring提供的用于訪問Rest服務的客戶端,RestTemplate提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率。默認情況下,RestTemplate默認依賴jdk的HTTP連接工具。dAd28資訊網——每日最新資訊28at.com
(2)WebClient
WebClient是從Spring WebFlux 5.0版本開始提供的一個非阻塞的基于響應式編程的進行Http請求的客戶端工具。它的響應式編程的基于Reactor的。WebClient中提供了標準Http請求方式對應的get、post、put、delete等方法,可以用來發起相應的請求dAd28資訊網——每日最新資訊28at.com
以RestTemplate配置LoadBalaced為例,二者對比:dAd28資訊網——每日最新資訊28at.com
dAd28資訊網——每日最新資訊28at.com
- 都是使用LoadBalancerInterceptor作為RestTemplate的攔截器。
- 在LoadBalancerInterceptor中持有LoadBalancerClient對象,在Spring Cloud LoadBalancer中是BlockingLoadBalancerClient,在Spring Cloud Ribbon中是RibbonLoadBalancerClient。
- LoadBalancerClient中持有NamedContextFactory對象,在Spring Cloud LoadBalancer中是LoadBalancerClientFactory,在Spring Cloud Ribbon中是SpringClientFactory。
- Spring Cloud LoadBalancer通過實現ReactorServiceInstanceLoadBalancer接口自定義負載均衡器,Spring Cloud Ribbon通過實現ILoadBalancer接口。
- Spring Cloud LoadBalancer通過注解@LoadBalancerClient或@LoadBalancerClients實現自定義配置,Spring Cloud Ribbon也可以使用這兩個注解,另外還可以使用@RibbonClient或@RibbonClients。
- Spring Cloud LoadBalancer支持響應式編程負載均衡,即結合Spring Web Flux使用,Spring Cloud Ribbon是不支持的。
- 目前Ribbon提供的負載均衡算法實現較Spring Cloud LoadBalancer更豐富。
微服務網關-Gateway
Gateway是在Spring生態系統之上構建的API網關服務,基于Spring 5,Spring Boot 2和Project Reactor等技術。Gateway旨在提供一種簡單而有效的方式來對API進行路由,以及提供一些強大的過濾器功能,例如:熔斷、限流、重試等。dAd28資訊網——每日最新資訊28at.com
dAd28資訊網——每日最新資訊28at.com
Spring Cloud Gateway是Spring Cloud的一個全新項目,基于Spring 5.0+Spring Boot 2.0和 Project Reactor等技術開發的網關,它旨在為微服務架構提供─種簡單有效的統一的API路由管理方式。dAd28資訊網——每日最新資訊28at.com
SpringCloud Gateway作為 Spring Cloud 生態系統中的網關,目標是替代Zuul,在Spring Cloud 2.0以上版本中,沒有對新版本的Zuul 2.0以上最新高性能版本進行集成,仍然還是使用的Zuul 1.x非Reactor模式的老版本。而為了提升網關的性能,SpringCloud Gateway是基于WebFlux框架實現的,而WebFlux框架底層則使用了高性能的Reactor模式通信框架Netty。dAd28資訊網——每日最新資訊28at.com
Spring Cloud Gateway的目標提供統一的路由方式且基于Filter鏈的方式提供了網關基本的功能,例如:安全,監控/指標,和限流。dAd28資訊網——每日最新資訊28at.com
SpringCloud Gateway使用的Webflux中的reactor-netty響應式編程組件,底層使用了Netty通訊框架。dAd28資訊網——每日最新資訊28at.com
微服務限流-Sentinel
Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。dAd28資訊網——每日最新資訊28at.com
Sentinel 具有以下特征:dAd28資訊網——每日最新資訊28at.com
- 豐富的應用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流量控制在系統容量可以承受的范圍)、消息削峰填谷、集群流量控制、實時熔斷下游不可用應用等。
- 完備的實時監控:Sentinel 同時提供實時的監控功能。您可以在控制臺中看到接入應用的單臺機器秒級數據,甚至 500 臺以下規模的集群的匯總運行情況。
- 廣泛的開源生態:Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Apache Dubbo、gRPC、Quarkus 的整合。您只需要引入相應的依賴并進行簡單的配置即可快速地接入 Sentinel。同時 Sentinel 提供 Java/Go/C++ 等多語言的原生實現。
- 完善的 SPI 擴展機制:Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現擴展接口來快速地定制邏輯。例如定制規則管理、適配動態數據源等。
dAd28資訊網——每日最新資訊28at.com
Sentinel 的主要特性dAd28資訊網——每日最新資訊28at.com
分布式事務-seata
Seata 是一款開源的分布式事務解決方案,致力于提供高性能和簡單易用的分布式事務服務。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務模式,為用戶打造一站式的分布式解決方案。dAd28資訊網——每日最新資訊28at.com
dAd28資訊網——每日最新資訊28at.com
一個典型的分布式事務過程:dAd28資訊網——每日最新資訊28at.com
分布式事務處理過程可以概括為:1 ID + 3組件模型dAd28資訊網——每日最新資訊28at.com
Transaction lD XID :dAd28資訊網——每日最新資訊28at.com
三組件概念 (opens new window)dAd28資訊網——每日最新資訊28at.com
- Transaction Coordinator (TC):事務協調器,維護全局事務的運行狀態,負責協調并驅動全局事務的提交或回滾;
- Transaction Manager (TM):控制全局事務的邊界,負責開啟一個全局事務,并最終發起全局提交或全局回滾的決議;
- Resource Manager (RM):控制分支事務,負責分支注冊、狀態匯報,并接收事務協調器的指令,驅動分支(本地)事務的提交和回滾
處理過程:dAd28資訊網——每日最新資訊28at.com
- TM 向 TC 申請開啟一個全局事務,全局事務創建成功并生成一個全局唯一的XID;
- XID 在微服務調用鏈路的上下文中傳播;
- RM 向 TC 注冊分支事務,將其納入XID對應全局事務的管轄;
- TM 向 TC 發起針對XID的全局提交或回滾決議;
- TC 調度 XID 下管轄的全部分支事務完成提交或回滾請求。
分布式鏈路追蹤-Skywalking
SkyWalking是一個開源APM系統,包含了云原生架構下的分布式系統的監控、跟蹤、診斷功能。dAd28資訊網——每日最新資訊28at.com
SkyWalking支持dubbo,SpringCloud,SpringBoot集成,代碼無侵入,通信方式采用GRPC,性能較好,實現方式是java探針,支持告警,支持JVM監控,支持全局調用統計等等,功能較完善。dAd28資訊網——每日最新資訊28at.com
dAd28資訊網——每日最新資訊28at.com
Skywalking架構dAd28資訊網——每日最新資訊28at.com
- 上面的Agent:負責收集日志數據,并且傳遞給中間的OAP服務器
- 中間的OAP:負責接收 Agent 發送的 Tracing 和Metric的數據信息,然后進行分析(Analysis Core) ,存儲到外部存儲器( Storage ),最終提供查詢( Query )功能。
- 左面的UI:負責提供web控制臺,查看鏈路,查看各種指標,性能等等。
- 右面Storage:負責數據的存儲,支持多種存儲類型。
大致流程就是Agent負責收集日志傳輸數據,通過GRPC的方式傳遞給OAP進行分析并且存儲到數據庫中,最終通過UI界面將分析的統計報表、服務依賴、拓撲關系圖展示出來。dAd28資訊網——每日最新資訊28at.com
附錄
dAd28資訊網——每日最新資訊28at.com
組件版本關系dAd28資訊網——每日最新資訊28at.com
本文鏈接:http://www.www897cc.com/showinfo-26-17667-0.htmlSpringCloud Alibaba體系一覽
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: RabbitMQ發送和接收消息的幾種方式
下一篇: 聽說你會架構設計?來,弄一個群聊系統