文章目錄
- 前言
- SpringCloud是什么?
- SpringCloud 在 2018 年,技術體系
- SpringCloud 在 2020 年,“移除”了技術體系
- SpringCloud 在 2024 年,移除了技術體系
- SpringCloud 2024年,技術體系
- 服務注冊與發現 模塊
- 1、Eureka
- 2、Consul - 官網 Java 推薦
- 3、Etcd (適用 Go 語言)
- 4、Nacos - 主流
- 服務調用和負載均衡
- 1、Ribbon - GG了,不關注
- 2、openFeign
- 3、LoadBalancer
- 分布式事務
- 1、Seata - 主流
- 2、LCN
- 3、Hmily
- 服務熔斷和降級
- Hystrix - 不再使用,知道就行
- Circuit Breaker 斷路器
- Sentinel - 哨兵 (主流)
- 服務鏈路追蹤
- Sleuth + Zipkin 【已過期,了解即可】
- Micrometer Tracing - 重點
- 服務網關
- Zuul - 過時,了解即可
- Gate Way 重點
- 分布式配置管理
- Config + Bus 了解即可
- consul
- Nacos
- 匯總
前言
本專欄文章的內容均來自于B站up主“尚硅谷”的教程視頻。
博主的博客,你可以理解為是博主在做筆記,方便復習。
希望也可以幫到你們。
SpringCloud是什么?
基于 Spring Boot 的 Spring 集成應用程序.
它利用 Spring Boot 的開發便利性簡化了分布式系統的開發,提供與外部系統的集成。
如服務注冊與發現、服務調用,服務熔斷,負載均衡,服務接口調用,消息隊列,配置中心管理,服務路由,服務監控,全鏈路追蹤,自動化構建部署,數據流操作。
SpringCloud是一個由許多子項目組成的綜合項目,各子項目有不同的發布節奏。
換句話說:Spring Cloud 提供了構建分布式系統所需的“全家桶”。
Spring cloud Task,一個生命周期短暫的微服務框架,用于快速構建執行有限數據處理的應用程序。
?
注意!上圖中的每一個功能,都有對應的 Cloud 組件
但不是每一個都需要,我們只需要關注主要功能的組件即可。
以下7個技術,是構成現在主流分布式微服務架構的重要支撐體系。
黑色名稱的組件,都是來自 SpringCloud。
紅色名稱的組件,都是來自 SpringCloud - Alibaba。
SpringCloud 在 2018 年,技術體系
我們回過頭來看 2018 年,技術體系又有哪些?
值得注意的是:這七個主鍵中有4個都是 NETFLIX OSS (網飛)公司提供的、
即便到現在,SpringCloud Netflix 依然存在
但是,在不就之后,NETFLIX OSS 就被移除了。原因:
更新版本沒有什么大驚小怪的,但是本次更新卻正式開啟了SpringCloudNetflix體系的終結進程。Netflix公司是目前微服務落地中最成功的公司。
它開源了諸如Eureka、Hystrix、Zuul、Feign、Ribbon等等廣大開發者所知微服務套件,統稱為Netflix OSS。
在當時 NetflixOSS 成為微服務組件上事實的標準。
但是微服務興起不久,也就是在2018年前后Netflix公司宣布其核心組件Hystrix、Ribbon、Zuul、Eureka等進入維護狀態,不再進行新特性開發,只修BUG。
這直接影響了 SpringCloud 項目的發展路線,Spring官方不得不采取了應對措施,在2019年的在SpringOne2019大會中,SpringCloud 官方宣布Spring Cloud Netflix項目進入維護模式,并在2020年移除相關的NetflixOSS組件。
SpringCloud 在 2020 年,“移除”了技術體系
那么,在2020年之后,原先的SpringCloud架構中組件被“干死”了?
上面這九個,是被“移除”(維護)的。
但是,注意!
“移除”(維護):
??停更(新)不停用
進一步來說:
1、被動修復Bugs:除非是重大bug,可能會修復,否則不理會
2、不在接受合并請求
3、不再發布新版本
SpringCloud 在 2024 年,移除了技術體系
注意,這是被 remove 掉了,和前面的維護是2個意思。
這里是指這些技術,在新版本的SpringCloud中舍棄了,不再使用。
也就是說,沒有學習的必要了。
SpringCloud 2024年,技術體系
服務注冊與發現 模塊
我們發現有2個: Consul,Alibaba Nacos
那么,服務注冊體系中,只有這兩個體系?
1、Eureka
由于 NetFlix 的擺爛,與其相關的技術體系,基本全軍覆沒。
可以用,但不推薦。
2、Consul - 官網 Java 推薦
首先,在功能方面 比 Eureka 更強大!
3、Etcd (適用 Go 語言)
這也是目前比較主流的服務測試體系之一。
但是,它是 go 語言 編寫的。
鍵值型 服務注冊中心
4、Nacos - 主流
服務(Service)是 Nacos 世界的一等公民。Nacos 支持幾乎所有主流類型的“服務”的發現、配置和管理:
Kubernetes Service
?
gRPC & Dubbo RPC Service
?
Spring Cloud RESTful Service
?
相信很多人接觸過 SpringCloud 項目的人,都對它很熟悉。
基本上,我遇到的 SpringCloud 項目,都是使用 Nacos 的。
?
Nacos 的關鍵特性包括:
服務發現和服務健康監測
??Nacos 支持基于 DNS 和基于 RPC 的服務發現。服務提供者使用 原生SDK、OpenAPI、或一個獨立的Agent TODO注冊 Service 后,服務消費者可以使用DNS TODO 或 HTTP&API查找和發現服務。
?
??Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求。Nacos 支持傳輸層 (PING 或 TCP)和應用層 (如 HTTP、MySQL、用戶自定義)的健康檢查。 對于復雜的云環境和網絡拓撲環境中(如 VPC、邊緣網絡等)服務的健康檢查,Nacos 提供了 agent 上報模式和服務端主動檢測2種健康檢查模式。Nacos 還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量。
?
動態配置服務
??動態配置服務可以讓您以中心化、外部化和動態化的方式管理所有環境的應用配置和服務配置。
??動態配置消除了配置變更時重新部署應用和服務的需要,讓配置管理變得更加高效和敏捷。
?
配置中心化管理讓實現無狀態服務變得更簡單,讓服務按需彈性擴展變得更容易。
??Nacos 提供了一個簡潔易用的UI (控制臺樣例 Demo) 幫助您管理所有的服務和應用的配置。Nacos 還提供包括配置版本跟蹤、金絲雀發布、一鍵回滾配置以及客戶端配置更新狀態跟蹤在內的一系列開箱即用的配置管理特性,幫助您更安全地在生產環境中管理配置變更和降低配置變更帶來的風險。
?
動態 DNS 服務
??動態 DNS 服務支持權重路由,讓您更容易地實現中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單DNS解析服務。動態DNS服務還能讓您更容易地實現以 DNS 協議為基礎的服務發現,以幫助您消除耦合到廠商私有服務發現 API 上的風險。
??Nacos 提供了一些簡單的 DNS APIs TODO 幫助您管理服務的關聯域名和可用的 IP:PORT 列表.
?
服務及其元數據管理
Nacos 能讓您從微服務平臺建設的視角管理數據中心的所有服務及元數據,包括管理服務的描述、生命周期、服務的靜態依賴分析、服務的健康狀態、服務的流量管理、路由及安全策略、服務的 SLA 以及最首要的 metrics 統計數據。
服務調用和負載均衡
1、Ribbon - GG了,不關注
2、openFeign
Ribbon 的替代品之一
是目前遠程微服務調用,面向接口編程,需要掌握了解到的。
應用場景:SpringCloud項目,在登錄時,通過 Feign 組件調用用戶信息接口,獲取用戶信息,生成token令牌
3、LoadBalancer
Ribbon 的替代品之一,屬于 SpringCloudCommons、
點擊 綠色文本(微服務)
分布式事務
分布式,是 微服務 重要構成部分,也是面試常見問題之一。
1、Seata - 主流
Apache Seata(incubating) 是一款開源的分布式事務解決方案,致力于在微服務架構下提供高性能和簡單易用的分布式事務服務。
2、LCN
??LCN框架在2017年6月份發布第一個版本,從開始的1.0,已經發展到了5.0版本。LCN名稱是各取如下單詞首字母得來的。鎖定事務單元(lock)、確認事務模塊狀態(confirm)、通知事務(notify) 。
??5.0以后由于框架兼容了LCN、TCC、TXC三種事務模式,為了避免區分LCN模式,特此將LCN分布式事務改名為TX-LCN分布式事務框架。
??LCN并不生產事務,LCN只是本地事務的協調工
??TX-LCN定位于一款事務協調性框架,框架其本身并不操作事務,而是基于對事務的協調從而達到事務一致性的效果。
3、Hmily
Hmily 一款金融級的分布式事務解決方案,支持 Dubbo、Spring Cloud、Motan ,GRPC,BRCP等 RPC 框架進行分布式事務。
服務熔斷和降級
Hystrix - 不再使用,知道就行
??Spring Cloud Hystrix 是一款優秀的服務容錯與保護組件,也是 Spring Cloud 中最重要的組件之一。
??Spring Cloud Hystrix 是基于 Netflix 公司的開源組件 Hystrix 實現的,它提供了熔斷器功能,能夠有效地阻止分布式微服務系統中出現聯動故障,以提高微服務系統的彈性。Spring Cloud Hystrix 具有服務降級、服務熔斷、線程隔離、請求緩存、請求合并以及實時故障監控等強大功能。
?
??在微服務系統中,Hystrix 能夠幫助我們實現以下目標:
保護線程資源:防止單個服務的故障耗盡系統中的所有線程資源。
?
快速失敗機制:當某個服務發生了故障,不讓服務調用方一直等待,而是直接返回請求失敗。
?
提供降級(FallBack)方案:在請求失敗后,提供一個設計好的降級方案,通常是一個兜底方法,當請求失敗后即調用該方法。
?
防止故障擴散:使用熔斷機制,防止故障擴散到其他服務。
?
監控功能:提供熔斷器故障監控組件 Hystrix Dashboard,隨時監控熔斷器的狀態。
Circuit Breaker 斷路器
這是目前主流使用,非常重要,需要熟悉掌握
幾乎 將 Hystrix 平替了。
?
Circuit Breaker 就是 接口,類似與 Java 的 List
其中 Resilience4J 重點掌握,其中 J 就是代表Java,這是為Java準備的。
Sentinel - 哨兵 (主流)
…?Sentinel定位是分布式系統的流量防衛兵。目前互聯網應用基本上都使用微服務,微服務的穩定性是一個很重要的問題,而限流、熔斷降級是微服務保持穩定的一個重要的手段。
?
Sentinel有哪些特征?
??豐富的應用場景。控制突發流量在可控制的范圍內,消息削峰填谷,集群流量控制,實時熔斷下游不可用的應用等等。
?
完備的實時監控。Sentinel 提供實時的監控功能。您可以在控制臺中看到接入應用的單臺機器秒級數據,甚至 500 臺以下規模的集群的匯總運行情況。
?
廣泛的開源生態。Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴并進行簡單的配置即可快速地接入 Sentinel。
?
完善的 SPI 擴展點。Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現擴展接口來快速地定制邏輯。例如定制規則管理、適配動態數據源等
服務鏈路追蹤
通俗來說:
??服務鏈路追蹤,就是記錄 某個方法,在某個時刻被誰調用,執行時間多長。
并且,在執行的過程中,是否順暢。
針對這些數據進行圖形展示,方便監控。
Sleuth + Zipkin 【已過期,了解即可】
我們可以看到 Sleuth 已經被 Micrometer Tracing 所代理了。
Micrometer Tracing - 重點
2016年,Sprin Cloud 團隊開發了一個追蹤庫,能夠極大地幫助眾多開發者。
該庫被稱為Spring Cloud Sleuth。
Spring 團隊意識到追蹤功能可以與Spring Cloud 分離出來,于是創建了Micrometer Tracing項目,這本質上就是 Spring 無關的版本的 Spring Cloud Sleuth。
Micrometer Tracing 于2022年11月發布了1.0.0正式版,并且此后一直在不斷改進
故米追蹤為最常用的追蹤庫提供了簡便的接口,讓您在不受供應商限制的情況下檢測基于jvm的應用程序代碼。
它的目的是在最大限度地提高跟蹤工作的可移植性的同時,為跟蹤收集活動增加很少甚至沒有開銷。
服務網關
等價于 Nginx,但是 地位 和 環境部署 是不一樣的。
Zuul - 過時,了解即可
Spring Cloud Zuul 是 Spring Cloud Netflix 子項目的核心組件之一,可以作為微服務架構中的 API 網關使用,支持動態路由與過濾功能
API 網關為微服務架構中的服務提供了統一的訪問入口,客戶端通過 API 網關訪問相關服務。
API 網關的定義類似于設計模式中的門面模式,它相當于整個微服務架構中的門面,所有客戶端的訪問都通過它來進行路由及過濾。
它實現了請求路由、負載均衡、校驗過濾、服務容錯、服務聚合等功能。
Gate Way 重點
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技術開發的網關,Spring Cloud Gateway旨在為微服務架構提供一種簡單而有效的統一的API路由管理方式。
Spring Cloud Gateway作為Spring Cloud生態系中的網關,目標是替代ZUUL,其不僅提供統一的路由方式,并且基于Filter鏈的方式提供了網關基本的功能,例如:安全,監控/埋點,和限流等。
分布式配置管理
Config + Bus 了解即可
consul
Nacos
服務(Service)是 Nacos 世界的一等公民。Nacos 支持幾乎所有主流類型的“服務”的發現、配置和管理:
Kubernetes Service
?
gRPC & Dubbo RPC Service
?
Spring Cloud RESTful Service
?
相信很多人接觸過 SpringCloud 項目的人,都對它很熟悉。
基本上,我遇到的 SpringCloud 項目,都是使用 Nacos 的。
?
Nacos 的關鍵特性包括:
?
服務發現和服務健康監測
??Nacos 支持基于 DNS 和基于 RPC 的服務發現。服務提供者使用 原生SDK、OpenAPI、或一個獨立的Agent TODO注冊 Service 后,服務消費者可以使用DNS TODO 或 HTTP&API查找和發現服務。
??Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求。Nacos 支持傳輸層 (PING 或 TCP)和應用層 (如 HTTP、MySQL、用戶自定義)的健康檢查。 對于復雜的云環境和網絡拓撲環境中(如 VPC、邊緣網絡等)服務的健康檢查,Nacos 提供了 agent 上報模式和服務端主動檢測2種健康檢查模式。Nacos 還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量。
?
動態配置服務
??動態配置服務可以讓您以中心化、外部化和動態化的方式管理所有環境的應用配置和服務配置。
??動態配置消除了配置變更時重新部署應用和服務的需要,讓配置管理變得更加高效和敏捷。
?
配置中心化管理讓實現無狀態服務變得更簡單,讓服務按需彈性擴展變得更容易。
??Nacos 提供了一個簡潔易用的UI (控制臺樣例 Demo) 幫助您管理所有的服務和應用的配置。Nacos 還提供包括配置版本跟蹤、金絲雀發布、一鍵回滾配置以及客戶端配置更新狀態跟蹤在內的一系列開箱即用的配置管理特性,幫助您更安全地在生產環境中管理配置變更和降低配置變更帶來的風險。
?
動態 DNS 服務
??動態 DNS 服務支持權重路由,讓您更容易地實現中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單DNS解析服務。動態DNS服務還能讓您更容易地實現以 DNS 協議為基礎的服務發現,以幫助您消除耦合到廠商私有服務發現 API 上的風險。
??Nacos 提供了一些簡單的 DNS APIs TODO 幫助您管理服務的關聯域名和可用的 IP:PORT 列表.
?
服務及其元數據管理
Nacos 能讓您從微服務平臺建設的視角管理數據中心的所有服務及元數據,包括管理服務的描述、生命周期、服務的靜態依賴分析、服務的健康狀態、服務的流量管理、路由及安全策略、服務的 SLA 以及最首要的 metrics 統計數據。