Spring Cloud Gray 微服務灰度中間件

在這裏插入圖片描述

Spring Cloud Gray 是一套開源的微服務灰度路由解決方案,它由 spring-cloud-gray-client,spring-cloud-gray-client-netflix 和 spring-cloud-tray-server,spring-cloud-gray-webui 組成。

spring-cloud-gray-client 定義了一套灰度路由決策模型,灰度信息追蹤模型,以及和 spring-cloud-gray-server的基本通信功能。
spring-cloud-gray-client-netflix 在 spring-cloud-gray-client 的基礎上集成了微服務註冊中心 eureka,擴展ribbon 的負載均衡規則,提供了對 zuul、feign、RestTemplate 的灰度路由能力,並且無縫支持 hystrix 線程池隔離。
spring-cloud-gray-server 負責灰度決策、灰度追蹤等信息的管理以及持久化。
spring-cloud-gray-webui 提供操作界面。

SpringCloudGray 能做什麼

  1. 金絲雀測試
    先發布1臺實例,用於測試驗證,指定測試的流量進入這臺實例,其它流量依然進入其它正常的實例。優勢在於發佈成本小,快速測試,並且不影響正常用戶體驗影響,即使測試不通過,也只需回滾這一臺實例,用戶無感知。
    在這裏插入圖片描述

  2. 灰度放量
    通過金絲雀測試後,可以逐漸放量到新的版本上。例如,根據userId或者ip放5%的流量到其中一臺灰度實例上,觀察一段時間沒異常,可調整放入20%的流量,如果一臺實例扛不住,可再發一臺或多臺實例。將發佈產生的風險保持在可控範圍內。

在這裏插入圖片描述

  1. 切斷實例流量
    當線上出現問題,可將某臺實例的流量切斷,保留現場,設置指定的請求進入實例,在線調試並且不影響其它用戶。
    在這裏插入圖片描述

  2. 數據透傳
    藉助灰度追蹤的能力,在網關處記錄用戶請求的最初的數據,可以將之透傳到請求完整的調用鏈中。

  3. 藉助“破窗”能力,實例藍綠髮布
    首次上灰度時,會存在兩種環境,一種是已經依賴了灰度客戶端的環境,另一種是正常運行的當前環境。假如微服務的負載均衡是由 ribbon 實現,那麼當前環境會請求路由到實例狀態爲 UP 的實例上,而依賴了灰度客戶端的環境,則可以通過"破窗"能力,跟灰度路由結合,可以將匹配灰度策略的請求路由到實例狀態爲 STARTING 的實例上,不匹配灰度策略的請求路由到實例狀態爲 UP 的實例上。
    在這裏插入圖片描述

設計思想

在微服務架構中,接口的調用通常是服務消費方按照某種負載均衡策略去選擇服務實例;但這無法滿足線上更特殊化的一些路由邏輯,比如根據一次請求攜帶的請求頭中的信息路由到某一個服務實例上。Spring Cloud Gray 正是爲此而創建。
在Spring Cloud Gray 中定義了幾個角色灰度客戶端(gray-client)、灰度管控端(gray-server)、註冊中心。
在這裏插入圖片描述

註冊中心 負責服務的註冊和發現。

灰度客戶端 灰度的客戶端是指依賴了spring-cloud-gray-client的服務,一般是指服務消費方。

灰度管控端 負責灰度信息的管理、持久化等維護工作。

灰度客戶端會從灰度管控端拉取一份灰度信息的清單,並在內存中維護這份清單信息,清單中包含服務,服務實例,灰度策略,灰度追蹤字段等。當請求達到網關時,網關就會在灰度追蹤中將需要透傳的信息記錄下來,並將傳遞給轉發的服務實例,後面的接口調用也會按照同樣的邏輯將追蹤信息透傳下去,從而保證所有一個請求在微服務調用鏈中的灰度路由。
如下圖所示:
在這裏插入圖片描述

管控端後臺功能

  1. 用戶管理
    可添加用戶,禁用用戶,重置密碼等。
    在這裏插入圖片描述

  2. 服務列表
    在這裏插入圖片描述

  3. 權限控制
    灰度的權限控制是以服務爲對象的,擁有服務的權限,就可以操作服務的所有灰度信息。在服務的權限控制中,分爲兩種角色,owner和管理者,owner擁有最大的權限,管理者除了不能刪除owner的權限,其它權限同owner一樣。
    在這裏插入圖片描述
    在這裏插入圖片描述

  4. 灰度實例管理
    查看、編輯服務的灰度實例,修改實例狀態等。
    在這裏插入圖片描述

  5. 在線實例列表
    查看指定服務在註冊中心註冊的實例,點擊【Add】按鈕,可快速添加爲實例實例
    在這裏插入圖片描述

  6. 編輯灰度策略
    從實例列表點擊【策略】按鈕進入灰度策略列表,可在策略列表中添加灰度策略和灰度決策。
    實例的灰度策略,包含可多個灰度決策。
    策略是從灰度實例列表進入。一個實例可以有多個灰度策略,策略與策略之間是"或"的關係。就是說,一個請求只要 滿足實例的任意一個灰度策略,這個請求被路由到該實例上。
    決策是灰度中進行比對的最小項。它定義一種規則,對請求進行比對,返回 true/false。當請求調用時,灰度調用端可以根據灰度實例的灰度決策,進行對比,以判斷灰度實例是否可以受理該請求。多個決策是"與"的關係。
    在這裏插入圖片描述
    在這裏插入圖片描述

  7. 編輯灰度追蹤
    動態編輯追這蹤信息字段,使其透傳到請求的完整調用鏈路中,從服務列表點擊【追蹤】按鈕進入
    在這裏插入圖片描述

  8. 改變實例狀態
    可在實例列表中,通過【實例狀態】按鈕修改實例狀態。提前是實例得依賴了灰度客戶端的jar包,並且uri沒有設置前綴(server.servlet.context-path)
    在這裏插入圖片描述

  9. 操作審記
    所有的POST,PUT,DELETE操作都會被記錄下來,可能通過操作記錄查詢,用於事後審計。
    在這裏插入圖片描述
    查詢維度包括:

  • StartTime - EndTime 記錄時間
  • Operator Id 操作人Id
  • ApiRes Code 接口返回的ApiRes Code
  • operate State 操作的結果
  • Request Hander spring mvc 的接口(Controller/Handler)的類名和方法
  • URI 接口的uri
  • IP http請求(操作人)的ip

版本支持

目前有三個分支,對 spring cloud 的支持分別如下

項目版本 srpingcloud版本 springboot版本
A.1.1.0 Edgware.SR6 1.5.22.RELEASE
B.0.0.1 Finchley.SR4 2.0.9.RELEASE
C.0.0.1-SNAPHOST Greenwich.SR2 2.1.7.RELEASE

項目擴展

項目已經實現了灰度的內核,如果要與其它的註冊中心或者負載均衡中間件集成,只需實現相應的 plugin 即可,spring cloud gray 已經提供了 eureka、ribbon、feign、zuul 以及 spring cloud gateway 和 spring cloud stream 的 plugin,添加相應的 plugin 依賴即可。

Github地址

https://github.com/SpringCloud/spring-cloud-gray
!!! 歡迎Start收藏!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章