微服務 Spring cloud 各元件介紹

HuDu發表於2022-01-11

一、分散式配置中心

1.1、特點

  1. 統一管理
  2. 區分環境
  3. 實時重新整理
  4. 許可權控制
  5. 版本控制
  6. 灰度釋出

1.2、具體功能

1.2.1、配置的統一管理

配置中心服務端負責配置的管理(新增、修改、刪除、釋出),整合了配置中心客戶端的微服務程式可以統一從配置中心拉取配置,從而實現整個微服務系統的統一配置管理。

1.2.2、區分不同環境的配置

一個微服務應用中的某些配置項,在不同的環境(開發、測試、生產)通常是不同的,作為分散式配置中心需要具有隔離不同環境的功能,使得同一個微服務在不同環境能拉取到對應的配置

1.2.3、配置動態實時重新整理

當配置中心服務端中的配置發生了修改時,配置中心客戶端需要能夠實時監聽到配置的改變,使得微服務應用程式可以實時獲取到最新配置,並且不用重新部署應用程式

1.2.4、配置的許可權控制

在配置中心中,可以針對不同的角色或使用者設定對應的許可權,比如張三可以新建配置,但不能釋出配置;比如李四可以檢視配置但不能修改配置。

1.2.5、配置的版本控制

在使用配置中心的過程中,難免會出現誤操作,而這時候就需要進行版本回退,所以作為配置中心,一定要支援版本控制的

1.2.6、配置的灰度釋出

在需要釋出一項配置時,如果需要釋出到多個例項(叢集),那麼此時可以只釋出到部分例項,待測試透過以後,再發不到全部例項,這就是配置的灰度釋出

1.3、常用配置中心元件

  • Spring Cloud Config(Spring)
  • Nacos(阿里)
  • Apollo(攜程)
  • consul(Google)

二、服務閘道器

2.1、什麼是服務閘道器

服務閘道器是整個微服務架構中對外的統一入口,所有的客戶端都透過統一的閘道器使用微服務,服務閘道器起到了隔離外部訪問和內部系統的作用,服務閘道器是微服務架構中的一個標配元件

2.2、服務閘道器的特點

  1. 高併發
  2. 安全
  3. 路由轉發
  4. 監控與限流
  5. 灰度釋出
  6. 服務重試
  7. 服務別名

2.3、具體功能

2.3.1、高併發

作為微服務架構中的對外入口,必須支援高併發,能承擔更高的併發量,並保證高效能。

2.3.2、安全

服務閘道器通常具有許可權認證,黑名單,白名單等保證閘道器安全的功能。

2.3.3、路由轉發

服務閘道器接收到外部請求後,要求服務閘道器能根據請求和配置將請求轉發到對應的後端微服務上。

2.3.4、監控與限流

作為整個系統的流量入口,服務閘道器要能監控流量的情況,遇到突發情況時,能及時限流,保證整個系統的穩定性。

2.3.5、灰度釋出

當某個微服務有有新版本更新上線時,可以利用微服務閘道器進行流量的切換,實現該微服務的灰度釋出。

2.3.6、服務重試

當服務閘道器呼叫某個微服務失敗後,可以透過服務閘道器設定重試策略來重新嘗試呼叫該服務。

2.3.7、服務別名

可以在服務閘道器中給某個或者某些微服務設定別名,從而對外遮蔽內部微服務相關資訊。

2.4、常見服務閘道器元件

  • Kong
  • Zull
  • Spring Cloud Gateway

三、負載均衡

3.1、什麼是負載均衡

負載均衡是指將訪問流量根據負載均衡演算法發到後端伺服器的流量分發控制服務,透過負載均衡可以提高微服務的可用性以及效能。

3.2、常用負載均衡演算法

  1. 簡單輪詢
  2. 加權輪詢
  3. 簡單隨機
  4. 加權隨機
  5. 一致性雜湊
  6. 最小活躍數

3.3、常用演算法說明

3.3.1、簡單輪詢

將請求按順序分發給後端伺服器上,不關心伺服器當前的狀態,比如後端伺服器的效能、當前的負載。

3.3.2、加權輪詢

根據伺服器自身的效能給伺服器設定不同的權重,將請求按順序和權重分發給後端伺服器,可以讓效能高的機器處理更多的請求

3.3.3、簡單隨機

將請求隨機分發給後端伺服器上,請求越多,各個伺服器接收到的請求越平均

3.3.4、加權隨機

根據伺服器自身的效能給伺服器設定不同的權重,將請求按各個伺服器的權重隨機分發給後端伺服器

3.3.5、一致性雜湊

根據請求的客戶端ip、或請求引數透過雜湊演算法得到一個數值,利用該數值取模對映出對應的後端伺服器,這樣能保證同一個客戶端或相同引數的請求每次都使用同一臺伺服器

3.3.6、最小活躍數

統計每臺伺服器上當前正在處理的請求數,也就是請求活躍數,將請求分發給活躍數最少的後臺伺服器

3.4、常用負載均衡元件

  • nginx
  • lvs
  • ribbon

四、RPC 呼叫

4.1、什麼是 RPC 呼叫

RPC 就是遠端過程呼叫,對於 Java 程式而言,RPC 就是遠端方法呼叫,表示一個方法呼叫遠端的另一個方法,微服務架構中一個服務呼叫另外一個服務就可以用 PPC 呼叫

4.2、RPC 呼叫與 HTTP 呼叫區別

HTTP 呼叫使用的是 HTTP 協議,是網路 7 層中的應用層協議,HTTP 協規定了資料傳輸的格式,Restful 風格就可以透過 HTTP 協議來實現。
RPC 不是網路層面的協議,而是更上層的更靈活的通訊協議,RPC 呼叫可以自定義資料格式、資料傳輸方式,只要能保證呼叫到遠端方法即可。

4.3、常用的 RPC 呼叫元件或框架

  • Dubbo
  • gRPC
  • Thrift
  • Feign

五、服務熔斷

5.1、什麼是服務熔斷

服務熔斷是指,當服務 A 呼叫的某個服務 B 不可用時,上游服務 A 為了保證自己不受影響,從而不再呼叫服務 B,直接返回一個結果,減輕服務 A 和 服務 B 的壓力,直到服務 B 恢復。

5.2、什麼是熔斷器

實現熔斷功能的叫熔斷器,代表元件為 Hystrix、Sentinel。

5.3、熔斷器的三種狀態

  1. Closed:關閉狀態
  2. Open:開啟狀態
  3. Half-Open:半開啟狀態

5.4、狀態詳解

5.4.1、Closed:關閉狀態

當呼叫失敗次數達到閾值時則啟動熔斷器

5.4.2、Open:開啟狀態

此時不會真正的呼叫下游服務,而是直接返回,當過了,某段時間後,熔斷器會進入到半開啟狀態。

5.4.3、Half-Open:半開啟狀態

此時會有部分請求訪問下游服務,如果這些請求都呼叫成功了,則認為下游服務恢復了,那麼則關閉熔斷器,否則熔斷器回到開啟狀態

六、服務降級

6.1、什麼是服務降級

服務降級是指,當發現系統壓力過載時,可以透過關閉某個服務,或限流某個服務來減輕系統壓力,這就是服務降級。

6.2、服務降級與服務熔斷的區別

  1. 都是為了防止系統崩潰
  2. 都讓使用者體驗到某些功能暫時不可用
  3. 熔斷是下游服務故障觸發的,降級是為了降低系統負載

6.3、什麼是服務雪崩

服務 A 呼叫服務 B,服務 B 呼叫 C,此時大量請求突然呼叫服務 A,假如服務 A 本身能抗住這些請求,但是服務 C 抗不住,導致服務 C 請求堆積,從而服務 B 請求堆積,從而服務 A不可用,這就是服務雪崩,解決方式就是服務降級和服務熔斷。

七、什麼是服務限流

7.1、什麼是服務限流

服務限流是指在高併發請求下,為了保護系統,可以對訪問服務的請求進行數量上的限制,從而防止系統不被大量請求壓垮,在秒殺中,限流是非常重要的

7.2、常用的限流演算法

  1. 固定視窗計數器
  2. 滑動視窗計數器
  3. 令牌桶
  4. 漏桶

八、控制匯流排

8.1、什麼是控制匯流排

控制匯流排也稱訊息匯流排,是微服務系統中用來連線系統中所有服務節點的,微服務中的所有服務節點可以透過控制匯流排來進行通訊。

8.2、控制匯流排應用場景

目前,Spring Cloud Bus 就是控制匯流排的具體實現,某個微服務可以透過 Spring Cloud Bus 來廣播事件,而其它微服務可以接收到事件進行相關處理。

九、分散式事務

9.1、什麼是分散式事務

在一次請求中,所涉及的分散在多個微服務上的操作要保證同時成功或同時失敗,這就是分散式事務,比如建立訂單、減庫存、銀行轉賬等。

9.2、實現分散式事務的方式

  1. 直接透過資料庫
  2. 透過訊息佇列
  3. 兩階段提交
  4. 三階段提交

9.3、分散式事務中的三個角色

  1. 事務協調器
  2. 事務管理者
  3. 資源管理者

9.4、分散式事務常用框架

  • seata
  • Icn
  • bytetcc

十、服務安全

10.1、什麼是服務安全

對於一個企業來說,微服務系統中的服務安全性越來越重要,服務的認證和授權是企業必須具備的,Spring Cloud Security 是 Spring Cloud 提供的微服務安全元件。

10.2、服務安全性特性

  1. 可擴充、可配置的認證和授權
  2. 單點登入
  3. 防止會話固定、點選劫持、跨網站請求偽造等攻擊
  4. 與 Servlet API 整合

十一、鏈路追蹤

11.1、什麼是鏈路追蹤

鏈路追蹤為微服務系統提供了完整的呼叫鏈路還原、呼叫請求量統計、路拓撲、應用依賴分析等功能,可以幫助開發者快速分析和診斷微服務架構下的效能瓶頸

11.2、鏈路追蹤的功能

  1. 分散式呼叫鏈診斷
  2. 應用效能實時彙總
  3. 分散式拓撲動態發現
  4. 多語言開發程式接入
  5. 豐富的下游對接場景

11.3、常用的鏈路追蹤技術

  • SkyWalking
  • Sleuth
  • Zipkin

十二、叢集管理

12.1、什麼是叢集管理

叢集管理是指,對於微服務系統中的某個服務叢集所提供的針對叢集管理的功能,Spring Cloud Cluster 的職責就是叢集管理

12.2、叢集管理有哪些功能

  • 領導者選舉
  • 一致性儲存
  • 叢集狀態管理
  • 一次性 tokens

十三、事件驅動

13.1、什麼是事件驅動

事件驅動就是訊息驅動,在Spring Cloud中提供了Spring Cloud Stream 來實現事件驅動,有了事件驅動,在微服務系統中可以更方便的透過傳送訊息來進行通訊

13.2、事件驅動中的概念

  • 目標繫結器:目標指的是 kafka 或 rabbitmq
  • 繫結橋樑:連線訊息系統和應用程式
  • 訊息:應用程式和訊息系統之間傳遞的資料

13.3、事件驅動特點

  • 非同步處理
  • 流量削峰
  • 服務解耦

十四、雲聯結器

14.1、什麼是雲聯結器

雲聯結器可以用來更方便的連線部署在雲上的各種服務,Spring Cloud 中 Spring Cloud Connector 就是雲聯結器的實現。

14.2、目前支援的雲平臺

  • Spring Cloud Cloud Foundry
  • Spring Cloud Heroku

十五、函式計算

15.1、什麼是函式計算

函式計算也稱為函數語言程式設計,是實現 Serverless 的一種手段,企業如果能使用函式計算能大大節約成本,在Spring Cloud中提供了Spring CloudFunction 來開發基於雲平臺的函式計算

15.2、函式計算特點

  • 支援響應式等程式設計風格
  • 輸入輸出型別透明化
  • 流資料處理
  • 同一個 jvm 中執行多版本函式
  • 打包函式到指定雲平臺
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章