『壹』 Spring微服務灰度發布(熱部署)的實現(二)
接著上篇說,我們微服務中用到的nepxion discovery主要採用了三種灰度發布方式,一種是web圖形化界面發布,二是zuul過濾器灰度發布,三是業務參數策略灰度發布。下面將重點介紹三種方式的實現。
一、web圖形化界麵灰度發布
因為我們項目用到了eureka注冊中心,所以選擇web圖形化界麵灰度發布比較合適。
1) 首先需要建立一個discovery控制台工程console, 埠為2222,控制台工程負責web圖形化界面請求的處理,運行console工程。
2) 下載discovery ui,地址:https://github.com/Nepxion/DiscoveryUI,運行discovery UI,埠為8090
3)瀏覽器中輸入localhost:8090,即可打開控制台,如下
注意:全鏈路灰度發布需要在「配置中心」下才可用。灰度發布配置中心,負責存儲全鏈路灰度發布規則,並將規則推送到各個微服務中。而配置中心可用nacos,redis等,Discovery 中提供了相應配置中心的插件包。
二、zuul網關過濾器灰度發布
通過網關過濾器傳遞Http Header的方式傳遞全鏈路灰度路由規則。下面代碼只適用於Zuul和Spring Cloud Gateway網關,Service微服務不需要加該方式。
三、業務參數在策略類中自定義灰度路由規則
通過策略方式自定義灰度路由規則。下面代碼既適用於Zuul和Spring Cloud Gateway網關,也適用於Service微服務,同時全鏈路中網關和服務都必須加該方式
上面說了具體灰度規則發布方式,那究竟怎麼定義灰度規則呢??
規則是基於XML或者Json為配置方式,存儲於本地文件或者遠程配置中心,可以通過遠程配置中心修改的方式達到規則動態化。其核心代碼參考discovery-plugin-framework以及它的擴展、discovery-plugin-config-center以及它的擴展和discovery-plugin-admin-center等,規則示例
XML示例(Json示例見discovery-springcloud-example-service下的rule.json)
黑/白名單的IP地址注冊的過濾規則
微服務啟動的時候,禁止指定的IP地址注冊到服務注冊發現中心。支持黑/白名單,白名單表示只允許指定IP地址前綴注冊,黑名單表示不允許指定IP地址前綴注冊。規則如何使用,見示例說明
最大注冊數的限制的過濾規則
微服務啟動的時候,一旦微服務集群下注冊的實例數目已經達到上限(可配置),將禁止後續的微服務進行注冊。規則如何使用,見示例說明
黑/白名單的IP地址發現的過濾規則
微服務啟動的時候,禁止指定的IP地址被服務發現。它使用的方式和「黑/白名單的IP地址注冊的過濾規則」一致
版本訪問的灰度發布規則
版本權重的灰度發布規則
全局版本權重的灰度發布規則
區域權重的灰度發布規則
全局區域權重的灰度發布規則
網關端全鏈路路由策略的灰度發布規則
注意 路由策略的入口有三個(以{"discovery-springcloud-example-a":"1.0", "discovery-springcloud-example-b":"1.0", "discovery-springcloud-example-c":"1.0;1.2"})為例:
其作用的優先順序為外界傳入>網關Filter指定>配置中心或者本地rule.xml配置
您可以根據自己需求,自由定義灰度發布規則,靈活實現微服務的灰度發布。
源碼位置:https://github.com/Nepxion/Discovery