服务路由使用说明

最近更新时间: 2024-10-17 17:10:00

前提条件

要使用路由功能,用户需要在客户端配置依赖项,然后在 TSF 控制台设置路由规则。

使用服务路由

配置依赖项

Spring Cloud 应用请参考开发手册中的 【服务路由】 。对于 Mesh 应用,如果希望使用基于自定义标签的路由,需要在代码中设置标签,关于如何设置标签参考 【Mesh 开发使用指引】。

新建路由规则

  1. 登录 【TSF 控制台】。

  2. 在左侧菜单中,选择【服务治理】。

  3. 在服务列表中,选择需要配置服务路由规则的服务,单击服务名称,进入服务详情页。

  4. 选择服务路由选项,单击【新建路由规则】。

  5. 新建路由规则,一个微服务下最多50条路由规则。

  6. 路由规则名称

  7. 填写规则

  • 流量来源配置:设置系统标签和自定义标签表达式。

  • 流量目的地:支持部署组和版本号两种目的地类型,确保权重加总为100。

注意:

  • 当服务在线时,您可以通过服务当前关联的应用来过滤部署组,配置流量规则指向哪一个部署组。
  • 当服务尚未上线或已经离线时,系统无法判断该服务与哪一个部署组关联,您可以预先选择与将注册的服务相关联的应用,并选择对应的部署组或者版本号,提前配置路由规则。

3. 单击【提交】。

启用路由规则

  1. 登录 【TSF 控制台】 ,单击左侧导航栏的【服务治理】,进入服务详情页面。

  2. 选择服务路由标签。

  3. 单击【生效状态】的切换按钮,当按钮为蓝色表明已经生效。

  4. 配置生效后,可以在列表项的下面流量分配图中查看流量分配情况,用户可以选择时间段,查看部署组上流量分配情况。

  • 24小时内的流量分配情况如下:

  • 应用路由规则后10分钟之内的流量分配曲线如下:
  1. 在流量分配图下方的流量分配表中,可以查看近五分钟内的平均每分钟请求数比例。

路由配置了流量的权重比例后,要使路由准确性达到预期,请求数至少要在1000以上;如果请求样本数不高的情况下偏差会比较大,样本数越高准确性就才越高。

容错保护

开启容错保护后,会实现兜底策略。例如服务设置了如下路由规则:

  • 10%的流量分配到 v1 版本。

  • 40%的流量分配到 v2 版本。

  • 50%的流量请求分配到 v3 版本。

假设场景:v1 版本的实例全部不可用。

  • 如果不开启容错保护,仍然会有10%的请求分发到 v1 版本的实例上,此时请求会失败。

  • 如果开启容错保护,SDK 发现 v1 版本的实例不可用时,会采用 Round Robin 轮询算法将请求随机分发到所有可用实例上。

使用说明

  • 填写路由规则需要在服务提供方进行配置,例如 A 服务调用 B 服务,需要在 B 服务上配置服务路由规则。

  • 对于 Spring Cloud 服务,配置路由规则后,若配置的目标部署组无法运行,流量将按照原有默认的轮询方式分配到其他部署组上。

  • 对于 Spring Cloud 服务,当服务提示未绑定应用时,需要在服务详情页单击编辑,绑定服务,才能开始配置路由规则。服务绑定应用操作,一经绑定,不能修改

  • Spring Cloud 服务调用其他服务的场景时,要使服务路由生效,需要确保 Spring Cloud 服务使用了 SDK 并添加开启路由注解,详情请参考开发手册中 【服务路由】。

  • 对于 Mesh 应用,配置路由规则后,若配置的目标部署组无法运行,则路由规则配置失败,请求无法发送。

其他操作

编辑路由规则

注意:

在生效状态的路由规则可以编辑,编辑之后立即生效。

  1. 登录 【TSF 控制台】,单击左侧导航栏的【服务治理】,进入服务详情页面。

  2. 选择服务路由标签。

  3. 在服务路由页面已经提交的规则页面单击【编辑】。

在编辑页面,仅支持编辑规则的详情,不支持编辑规则类型。 4. 单击【提交】,完成路由编辑。

删除路由规则

注意:

在生效状态的服务路由规则不能被删除,只能先停用,再删除。

  1. 登录 【TSF 控制台】 ,单击左侧导航栏的【服务治理】,进入服务详情页面。

  2. 选择服务路由标签。

  3. 在服务路由页面已经提交的规则页面单击【删除】。

限制说明

等于、不等于、包含、不包含属于严格匹配,正则表达式属于模糊匹配。因此当系统标签是被调方 API PATH 时,目前仅支持使用正则表达式的逻辑关系来匹配带参数的 API 请求。

  • 当标签的逻辑关系是正则表达式,值填写/echo/.*时,可以匹配带参数的请求 /echo/test123 (其中 test123 是参数)。

  • 当标签的逻辑关系是等于、不等于、包含、不包含关系,值是/echo/{param}时,不能匹配带参数的请求 /echo/test123 (其中 test123 是参数)。