You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/05/11 09:20:56 UTC

[servicecomb-docs] 01/03: [SCB-1885] add router doc

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

commit 61373ef86db27270a6b3076e9507350b7e2b92c6
Author: GuoYL <gy...@gmail.com>
AuthorDate: Sat May 9 17:05:57 2020 +0800

    [SCB-1885] add router doc
---
 .../zh_CN/docs/references-handlers/router.md       | 74 ++++++++++++++++++++++
 java-chassis-reference/zh_CN/docs/toc.md           |  1 +
 2 files changed, 75 insertions(+)

diff --git a/java-chassis-reference/zh_CN/docs/references-handlers/router.md b/java-chassis-reference/zh_CN/docs/references-handlers/router.md
new file mode 100644
index 0000000..daddabd
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/references-handlers/router.md
@@ -0,0 +1,74 @@
+# 路由管理
+
+应用可以通过使用路由管理,来进行灰度发布实现版本的平滑过渡升级。路由管理通过动态配置下发完成。 
+
+使用路由管理,需要在项目中引入如下依赖:
+
+```xml
+<dependency>
+  <groupId>org.apache.servicecomb</groupId>
+  <artifactId>handler-router</artifactId>
+</dependency>
+```
+
+在配置文件中增加配置项:
+
+| 配置项名                                   | 描述                   |
+| ------------------------------------------ | ---------------------- |
+| servicecomb.routeRule.[targetService]      | 目标服务的路由管理规则 |
+| servicecomb.routeRule.type                 | 填写'router'           |
+| servicecomb.handler.chain.Consumer.default | 增加'loadbalance'      |
+
+路由管理规则实例如下:
+
+```yaml
+servicecomb:
+    routeRule:  
+      provider: | #服务名
+        - precedence: 2 #优先级
+          match:        #匹配策略
+            headers:          #header匹配
+              region:            
+                regex: 'regoin[0-9]*'
+                caseInsensitive: false # 是否区分大小写,默认为false,区分大小写
+              type:         
+                exact: gray
+          route: #路由规则
+            - weight: 100 #权重值
+              tags:
+                version: {version1}
+                app: {appId}
+        - precedence: 1
+          route:
+            - weight: 20
+              tags:
+                version: 0.01
+                tags: tag
+            - weight: 80
+              tags:
+                version: 0.02
+```
+
+#### 规则说明
+
+- 匹配特定请求由match配置,匹配条件是headers。
+- Header中的字段的匹配支持正则匹配、精准匹配。
+- 如果未定义match,则可匹配任何请求。
+- 转发权重定义在routeRule.{targetServiceName}.route下,由weight配置,weight数值表示百分数,需要满足加和等于100,不满足100的部分会用最新版本填充。
+- 服务分组定义在routeRule.{targetServiceName}.route下,由tags配置,配置内容有version和app。
+- caseInsensitive 配置条件是否区分大小写,默认false区分大小写,true则不区分大小写。
+- 优先级数量越大优先级越高。
+
+#### 匹配流程
+
+对于上面的示例配置,所有访问provider服务的请求,首先尝试与优先级为2的第一个的match规则进行匹配header:header存在key为region的按照正则规则区分大小写匹配,存在key为type的进行字符串精准匹配。若匹配match成功则按照route的配置分配100%的流量到version和tags对应的实例。若匹配match失败则进入下个优先级为1的规则。不同规则优先级不能相等。
+
+#### 异常情况的处理
+
+如果因为规则配置错误,或者没有match到任何一条规则,流量会直接跳过灰度规则,相当于没有灰度发布配置。
+
+如果已经匹配了match,因为对应的version或者tags找不到实例,则剩余流量自动转发到目前的最新版本。
+
+#### 负载均衡算法
+
+借鉴了nginx,使用平滑加权轮询算法,流量会均匀的等比分配到对应的服务实例上。
\ No newline at end of file
diff --git a/java-chassis-reference/zh_CN/docs/toc.md b/java-chassis-reference/zh_CN/docs/toc.md
index 5c15244..598eb9b 100644
--- a/java-chassis-reference/zh_CN/docs/toc.md
+++ b/java-chassis-reference/zh_CN/docs/toc.md
@@ -91,6 +91,7 @@
 - 处理链参考: 
     - [处理链介绍](references-handlers/intruduction.md)
     - [负载均衡](references-handlers/loadbalance.md)
+    - [路由管理](references-handlers/router.md)
     - [隔离熔断容错](references-handlers/bizkeeper.md)
     - [公钥认证](references-handlers/publickey.md)
 - 常用配置项参考: