This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-docs.git


The following commit(s) were added to refs/heads/master by this push:
     new dcb7bd2  [#345] 调整灰度发布规则内容 (#346)
dcb7bd2 is described below

commit dcb7bd21d5cc32fe9ccdc05c25a373b3a542f903
Author: Alex <[email protected]>
AuthorDate: Sat Jul 27 08:48:11 2024 +0800

    [#345] 调整灰度发布规则内容 (#346)
---
 .../zh_CN/docs/references-handlers/router.md       | 105 +++++++++++++++++----
 1 file changed, 88 insertions(+), 17 deletions(-)

diff --git a/java-chassis-reference/zh_CN/docs/references-handlers/router.md 
b/java-chassis-reference/zh_CN/docs/references-handlers/router.md
index 2d4220b..d4fa0cd 100644
--- a/java-chassis-reference/zh_CN/docs/references-handlers/router.md
+++ b/java-chassis-reference/zh_CN/docs/references-handlers/router.md
@@ -12,7 +12,7 @@
 | servicecomb.routeRule.[targetService]      | 目标服务的路由管理规则 |
 | servicecomb.router.type                    | 填写'router'           |
 
-灰度发布规则示例如下:
+## 服务级灰度发布规则
 
 ```yaml
 servicecomb: 
@@ -20,15 +20,36 @@ servicecomb:
     type: router
   routeRule:
     business: |
+      - precedence: 3
+        emptyProtection: false
+        match:
+          apiPath:
+            prefix: "/business/v3"
+        route:
+          - weight: 50
+            tags:
+              version: 1.1.0
+          - weight: 50
+            tags:
+              version: 2.0.0
       - precedence: 2
+        emptyProtection: true
         match:
           apiPath:
             prefix: "/business/v2"
         route:
-          - weight: 100
+          - weight: 50
+            tags:
+              version: 1.1.0
+          - weight: 50
             tags:
               version: 2.0.0
+        fallback:
+          - weight: 100
+            tags:
+              version: 1.0.0
       - precedence: 1
+        emptyProtection: false
         match:
           apiPath:
             prefix: "/business/v1/dec"
@@ -36,27 +57,77 @@ servicecomb:
           - weight: 50
             tags:
               version: 1.1.0
-          - weight: 50
-            tags:
-              version: 2.0.0
-
 ```
 
 #### 规则说明
 
-- 匹配特定请求由match配置,  match的配置逻辑和 [流量特征治理](governance.md) 一致。
-- 
转发权重定义在routeRule.{targetServiceName}.route下,由weight配置,weight数值表示百分数,需要满足加和等于100,不满足100的部分会用最新版本填充。
-- 服务分组定义在routeRule.{targetServiceName}.route下,由tags配置,配置内容有version和app。
-- 优先级数量越大优先级越高。
+- 匹配特定请求由match配置, match的配置逻辑和 [流量特征治理](governance.md) 一致。
+- business为目标服务名。
+- precedence为规则优先级,数字越大,优先级越高。
+- emptyProtection路由空实例保护开关,当按照设定的路由规则未匹配到实例时,开关打开则返回所有实例,开关关闭返回空实例,默认为打开,详细规则见 
`匹配流程`。
+- 
route服务路由规则,weight对应tags实例转发权重,数值为百分数,设置值小于等于100;tags对应路由目标服务属性,内容有version和实例properties。
+- 
fallback降级服务路由规则,当routeRule.{targetServiceName}.route下设置tags未匹配到服务实例时,按fallback路由规则匹配路由实例。
+
+#### 路由规则逻辑
+
+对于上面的示例配置,所有访问provider服务的请求,按照precedence优先级顺序匹配
+match规则,未设置match的不需要匹配,直接使用路由规则。如果因为规则配置错误,或者没
+有match到任何一条规则,流量会直接跳过灰度规则,相当于没有灰度发布配置。
+
+路由执行逻辑:
+- 正常按照route设置的权重、tags进行选择服务实例路由;
+- 若route规则选择的实例为空,判断是否设置fallback路由规则,如果存在,则按照fallback设置的权重、tags进行选择服务实例路由;
+- 若route规则选择的实例为空,且fallback规则选择实例为空或未设置时:
+  1、route设置的权重总和等于100,emptyProtection为true时,返回所有目标服务实例;
+  2、route设置的权重总和等于100,emptyProtection为false时,返回空实例;
+  3、route设置的权重总和小于100,存在路由规则中未设置的服务实例时,返回未设置的服务实例;
+  
4、route设置的权重总和小于100,不存在路由规则中未设置的服务实例时,emptyProtection为true时,返回所有目标服务实例,false时返回空实例;
+
+上述规则为例:
 
-#### 匹配流程
+- precedence: 3
+  1、请求url前缀为/business/v3则使用该条路由规则。
+  2、如果存在2.0.0、1.1.0两个version实例时,路由按照权重评分请求到两个实例,即使存在其他实例也是一样。
+  3、如果2.0.0、1.1.0中的一个实例不存在,50%返回空实例,即使存在其他实例也是一样。
+  4、如果2.0.0、1.1.0实例都不存在,100%返回空实例,即使存在其他实例也是一样。
 
-对于上面的示例配置,所有访问provider服务的请求,首先尝试与优先级为2的第一个的match规则进行匹配
-header:header存在key为region的按照正则规则区分大小写匹配,存在key为type的进行字符串精准匹配。若匹配
-match成功则按照route的配置分配100%的流量到version和tags对应的实例。若匹配match失败则进入下个优先级为1的规则。不同规则优先级不能相等。
+- precedence: 2
+  1、请求url前缀为/business/v2则使用该条路由规则。
+  2、如果存在2.0.0、1.1.0两个version实例时,路由按照权重评分请求到两个实例,即使存在其他实例也是一样。
+  3、如果version 2.0.0、1.1.0中的一个实例或都不存在,且存在1.0.0对应实例时,route规则未匹配到实例时,返回1.0.0实例。
+  4、如果version 2.0.0、1.1.0中的一个实例或都不存在,且不存在1.0.0对应实例时,route规则未匹配到实例时,返回所有实例。
 
-#### 异常情况的处理
+- precedence: 1
+  1、请求url前缀为/business/v1/dec则使用该条路由规则。
+  2、如果仅存在version 1.1.0实例时,路由完全分配到该实例。
+  3、如果存在version 1.1.0及其他实例,那么50%流量分配到1.1.0实例,50%流量分配到其他实例。
+  4、如果不存在version 1.1.0实例,那么100%流量分配到其他实例。
 
-如果因为规则配置错误,或者没有match到任何一条规则,流量会直接跳过灰度规则,相当于没有灰度发布配置。
+## 全局灰度发布规则
+
+```yaml
+servicecomb: 
+  router:
+    type: router
+  globalRouteRule: |
+    - precedence: 2
+      match:
+        apiPath:
+          prefix: "/business/v2"
+      route:
+        - weight: 50
+          tags:
+            version: 1.1.0
+        - weight: 50
+          tags:
+            version: 2.0.0
+      fallback:
+        - weight: 100
+          tags:
+            version: 1.0.0
+```
+
+#### 规则说明
 
-如果已经匹配了match,因为对应的version或者tags找不到实例,则剩余流量自动转发到目前的最新版本。
+- 全局路由规则优先级低于服务级路由规则,当全局路由、服务级路由同时存在时,优先使用服务级路由规则。
+- 全局路由规则的匹配逻辑与服务级路由相同。
\ No newline at end of file

Reply via email to