天天看點

流量染色與gRPC服務托管 微服務協作開發、灰階釋出之流量染色 灰階釋出與流量染色

文章目錄

  • ​場景​
  • ​​開發環境多服務、多分支協作​​
  • ​​生産環境灰階釋出​​
  • ​流量染色​
  • ​​染色​​
  • ​調用鍊路管控​
  • ​​網關服務篩選-坑​​
  • ​​服務篩選​​
  • ​​Ref​​

協作開發與灰階釋出是微服務架構在流量治理能力方面的兩個展現,本文結合go-micro實踐對流量進行染色,實作開發環境的多分支協作, 以及生産環境的灰階釋出。

流量染色與gRPC服務托管 微服務協作開發、灰階釋出之流量染色 灰階釋出與流量染色
  • ​QA​

    ​組測試​

    ​v1.2​

    ​和​

    ​v2.0​

    ​鍊路
  • ​v2.0​

    ​ + ​

    ​v1.2​

  • ​v1.1​

    ​組僅關注​

    ​v1.1​

    ​的版本開發
  • ​v1.1​

    ​master​

  • ​v1.2​

    ​組在​

    ​v1.1​

    ​開發新版​

    ​srv-2​

    ​服務
  • ​v1.2​

    ​v1.1​

    ​master​

  • ​v2.0​

    ​v2.0​

  • ​v2.0​

    ​master​

    ​鍊路 

生産環境灰階釋出

流量染色與gRPC服務托管 微服務協作開發、灰階釋出之流量染色 灰階釋出與流量染色

流量染色

流量染色核心:

  • gateway對請求進行染色
  • 染色規則可以是​

    ​host​

    ​、​

    ​header​

    ​字段、​

    ​agent​

    ​終端資訊、使用者篩選、流量比例等等
  • 染色資訊在服務間傳遞
  • ​go-micro​

    ​中​

    ​http​

    ​請求的​

    ​header​

    ​以及​

    ​rpc​

    ​metadata​

  • 服務調用時根據染色資訊對服務進行篩選,實作調用鍊路的管控

我們基于​

​go-micro​

​實踐的是實作多鍊路染色,染色鍊路帶有優先級,如開發環境多服務、多分支協作的​

​v1.2​

​組, 雖然​

​v1.1​

​v1.2​

​都有​

​srv-2​

​服務,但我們在染色資訊中​

​v1.2​

​在前優先選擇,是以可以實作多分支同時染色(PS:如果兩個分支中兩個服務的優先級相反無法實作,需要設計更複雜的染色方案)

網關染色及​

​client wrapper​

​實作參考我實作的兩個​

​chain​

​插件

染色

在網關對流量進行染色,基于​

​mciro​

​的插件,可以友善的實作,具體染色規則需要根據自身需求實作。

1

2

3

4

5

6

7

8

// 鍊路染色

api.Register(chain.New(chain.WithChainsFunc(func(r *http.Request) []string {

return []string{"v2.0", "v1.2"}

})))

web.Register(chain.New(chain.WithChainsFunc(func(r *http.Request) []string {

return []string{"v2.0"}

調用鍊路管控

​go-micro​

​實作調用鍊路管控,最大的障礙就是網關,​

​API​

​及​

​Web​

​均不支援服務篩選,需要自己二次開發,相關問題也回報給社群看後續計劃#1003。

網易輕舟微服務9月重大更新:流量染色與gRPC服務托管

特性簡介

根據流量協定設定對應的流量染色規則,對指定的流量進行染色标記,并在整個調用鍊中攜帶該标記,以便于對染色流量進行跟蹤和路由。 

典型使用場景

• 全鍊路灰階釋出 

新版本在正式釋出前,可以使用流量染色控制先進行小規模驗證,通過收集使用體驗的資料,對應用新版本的功能、性能、穩定性等名額進行評判,然後再全量更新。即使某個新版本出現問題,也隻會影響已染色流量,不會蔓延至整個系統,進而保證業務的正常運作。 

• 多測試環境管理 

當使用者需要在一個測試環境中管理多個測試分支時,可以通過流量染色标記不同的測試分支流量,将該流量路由至測試版本,進而提供整體測試環境的複用性的同時,避免了不同測試分支的互相幹擾。 

産品優勢

• 支援多種協定類型:包括 HTTP、RPC 等; 

• 流量入口:支援以 NSF 服務或 API 網關為流量入口; 

• 支援 MQ 等中間件流量染色; 

• 支援流量穿梭:對于染色鍊路中未指定的服務,仍允許再請求中攜帶染色标記并在下一跳路由回染色鍊路。 

• 支援多個流量染色配置:允許對一套微服務系統的不同流量進行染色,甚至允許同一個微服務同時參與多個流量染色。 

gRPC 服務托管

将 gPRC服務托管到 NSF微服務架構,使用者隻需要關注 gRPC服務自身的邏輯,無需再關注注冊中心、配置中心和中繼資料中心的搭建和維護。托管後還可以使用 NSF提供的限流降級、拓撲關系、路由、及監控等能力,而且整個托管過程是無侵入的,不會增加使用者的了解成本和開發成本。 

gRPC 治理能力

• 支援 gRPC服務的注冊與發現; 

• 檢視 gRPC 服務執行個體清單; 

• 檢視 gRPC 服務監控; 

• 支援動态配置; 

• 檢視 gRPC 服務依賴關系和服務拓撲; 

• 支援 gPRC 服務的限流、降級、容錯等治理能力; 

• 支援 gRPC 服務的路由管理; 

• 支援 gRPC 服務的流量染色; 

• 通過知識庫管理 gRPC 服務中繼資料; 

gRPC 服務托管方式

以 Java 應用為例,基于無侵入的設計方式,将 gPRC 服務托管到 NSF 隻需要以下操作: 

1、從 NSF 控制的開發工具頁面下載下傳 NSF Agent; 

2、在開發工具頁面,按照指引生成 Agent 配置檔案;其中,服務類型選擇 gPRC;将配置檔案放入工程下的配置檔案夾中; 

3、啟動 gRPC 服務,在啟動指令中,通過-jar引入 NSF Agent 的 JAR檔案; 

4、登入輕舟 NSF 控制台,檢視服務注冊結果。 

繼續閱讀