微服務 見 呼叫請求頭傳遞 微服務平台之灰度發布

2021-10-14 12:02:03 字數 3272 閱讀 4826

灰度發布是指在應用的新、舊版本間平滑過渡的一種發布方式。根據特定的規則,挑選一部分使用者訪問灰度版本的服務,並逐步擴大範圍,最終把所有使用者訪問遷移到新的版本上來。灰度發布時,主要涉及設定流控規則和部署新版本這兩個動作,本次主要是介紹在eos8微服務平台裡灰度發布的流量控制。

一、灰度發布介紹

二、灰度發布實踐

三、灰度發布後的監控

灰度發布是指在應用的新、舊版本間平滑過渡的一種發布方式。在應用發布與產品迭代中,通常會採用灰度發布來控制上線風險。在發布前先進行小規模的生產環境驗證,讓新版本的應用例項來承接、處理限定規模或範圍的業務流量。通過收集使用體驗的資料,對應用新版本的功能、效能、穩定性等指標進行評判,進而決定擴大新版本部署範圍直至全量公升級或回滾至老版本。

灰度發布時,主要涉及設定流控規則和部署新版本這兩個動作,這2個動作沒有一定的先後次序。可以:

1.部署新版本 -> 設定流控規則:可能的問題是在灰度規則設定生效前,進入新版本應用例項的流量可能不是灰度的。

2.設定流控規則 -> 部署新版本:可能的問題是新版本未部署前,灰度流量會降級路由到非灰度環境,在第一批新版本例項在發布後,有受到全部灰度流量衝擊的風險。

下面主要介紹下eos8微服務平台裡灰度發布的流量控制。

1、概念介紹

1.乙個系統有多個應用組成,乙個應用就是乙個微服務,乙個應用可以有多個例項組

2.乙個系統有乙個閘道器,跨系統之間的api呼叫需要經過該閘道器

3.乙個系統上可以配置多個流量策略,該流量策略對系統內應用和閘道器同時起作用

2、例項組註冊

3、流量策略設定

通過eos8的governor頁面可以設定乙個系統的流量策略。乙個系統內可以有多個流量策略,流量策略可以設定優先順序以及是否啟用。乙個策略主要由2部分組成:

2.目標應用:用於定義滿足【規則】的請求會被路由到本系統的哪個應用以及哪個例項組。

流量策略會儲存在apollo的配置中心,這樣可以方便應用和閘道器監聽流量策略配置的變化。

我們會給每個系統在apollo上建立乙個專案,專案名稱為 「sys.」+系統編碼,系統編碼要求全域性唯一。在該專案下,我們會建立乙個apollo公共的namespace,名稱為 」atp.」+系統編碼,使用公共namespace是為了讓應用和閘道器都可以使用該namespace的配置。

儲存在apollo上的配置,是以目標應用編碼為key,value是和該目標編碼相關的流量策略集合。

4、請求路由

呼叫請求分類分為2部分:

1.系統內呼叫:系統內應用互相呼叫,這種呼叫不需要經過閘道器,由應用之間直接互調,支援resttemplate和feign

2.跨系統呼叫:跨系統的應用互相呼叫,需要經過閘道器路由**

eos8的微服務平台裡使用的是spring cloud netflix和spring cloud gateway,所以以上2種情況可以歸納為如何在ribbon client上實現流量策略的路由**,不同點在於:

1.系統內呼叫時,如果規則是http_header,匹配的是client(resttemplate或者feign)傳送時的請求頭

2.跨系統呼叫時,如果規則是http_header,匹配的是閘道器收到的請求頭

ribbon 是一種客戶端負載,配合註冊中心一起使用時,可以根據被呼叫的服務名選取合適的例項進行服務呼叫。spring cloud netflix ribbon 也提供了比較方便的擴充套件,可以自定義irule並通過autoconfiguration自動注入。

可以在自定義的irule裡實現根據流控策略選擇合適應用例項進行服務呼叫,配合apollo client一起使用,可以達到動態修改流控策略的效果。

需要注意的是如果是hystrix和ribbon一起使用的時候,可能會遇到跨執行緒傳遞資料的問題,可以有以下幾種方案選擇:

1.使用hystrixrequestvariabledefault

2.自定義hystrixconcurrencystrategy

3.使用spring cloud sleuth

5、實現流程

總結一下,灰度發布的大概實現流程:

1.應用啟動時指定例項分組,並註冊到註冊中心

2.應用連線到apollo,獲取本系統的流量策略,並設定apollo的***,監聽流量策略配置的變化

3.governor修改流量策略並儲存到配置中心

灰度發布後,需要監控灰度發布的版本是否正確,比如:

1.是否有不滿足流控策略的請求路由到灰度版本例項,或者應該路由到灰度版本的請求

2.灰度版本的程式功能是否正確,響應時間是否正常等

3.灰度版本的整個請求鏈路日誌是否正確

這些可以通過governor的業務鏈路來檢視,監控資訊主要來自於skywalking以及es的日誌。確認無誤後,可以增加灰度版本例項,並下線老版本。

關於作者:普元高階軟體工程師,開源技術愛好者,容器技術專家,曾參與浦東發展銀行bpm專案、銀聯paasv1等專案。

關於eaworld:微服務,devops,資料治理,移動架構原創技術分享。

微服務學習筆記 追蹤微服務呼叫

微服務系統追蹤微服務呼叫,跟蹤記錄一次使用者請求經過哪些呼叫,經過哪些服務處理,並且記錄每一次呼叫所設計的服務的詳細資訊。如果發生呼叫失敗,可以根據日誌快速定位出現問題的環節。一 作用 1.優化系統瓶頸 通過記錄呼叫經過的每一條鏈路上的耗時,快速定位系統中的瓶頸點。2.優化鏈路呼叫 通過服務追鍾可以...

微服務學習筆記 如何監控微服務呼叫

錯誤率一段時間內呼叫失敗的次數佔呼叫總次數的比率來衡量,比 如對於介面的錯誤率一般用介面返回錯誤碼為 503 的比率來表示。1 資料採集 考慮的問題就是取樣率,也就是採集資料的頻率。取樣率決定了監控的實時性與精確度,一般來說,取樣率越高,監控的實時性就越高,精確度也越高。但取樣對系統本身的效能也會有...

微服務專案之戰 微服務間的呼叫

微服務呼叫介紹,微服務之間的呼叫 一,springcloud微服務之間呼叫的方式有那些?在springcloud中實現微服務呼叫的方式有ribbon feign兩種,他們實現軟負載均衡呼叫。ribbon是乙個基於 http 和 tcp 客戶端 的負載均衡的工具。可以在客戶端配置 ribbonserv...