基于业务参数的服务治理最佳实践
最近更新时间: 2024-10-17 17:10:00
操作场景
本文档指导您通过微服务网关和服务路由能力,即可实现基于业务参数的服务治理。您无需修改代码,即可实现基于业务参数的路由、鉴权功能,并依据业务参数过滤请求调用链。
在实际的业务场景中,经常有依据某些请求参数值决定请求路由到某个服务的某个版本中的场景,或依据请求参数值对请求进行限流、鉴权等场景。 如下图中,当外网请求通过网关访问后端微服务时:
当请求参数 region = guangzhou 时,路由到微服务的版本1中。
当请求参数 region = shanghai 时,路由到微服务的版本2中。
前提条件
在开始本文的实践前,您需要先了解 TSF 的以下功能:
【微服务网关的部署 、【通过微服务网关管理 API】
微服务网关插件(tag 类型插件)
【服务路由】
【标签】
操作步骤
步骤1:新建微服务网关分组
- 准备 consumer -demo 和 provider - demo 两个微服务。要求如下:
provider - demo 存在两个版本的包:provider-demo-guangzhou.jar 和 provider-demo-shanghai.jar。
provider - demo 两个版本在访问请求中携带 region 参数,且访问 /test-region 接口时,会分别返回 shanghai 和 guangzhou;访问 provider - demo 时,可以携带两个 Header 参数、region 和 usertype。
consumer - demo 部署在一个部署组上,provider - demo 部署在两个部署组上,每个部署组部署一个版本的 jar 包。
- 部署一个微服务网关 ,部署后服务名为 msgw - demo,部署组名称为 test,默认端口为8080(给对应机器开放8080端口)。在本 demo 中,将直接通过网关访问微服务 provider。
新建微服务网关分组,并将微服务网关分组绑定在创建好的网关应用部署组上。 新建微服务网关: 绑定网关部署组:
将微服务 API 导入到分组中,并将分组进行发布。
步骤2:配置微服务网关插件
在这一步中,我们在网关配置插件,将请求参数转化为 TSF 中的标签信息。
在 【TSF 控制台】 左侧导航栏中,单击【微服务网关】>【插件管理】。
在插件管理页左上角,单击【新建插件】,填写以下信息:
插件类型:选择 Tag。
插件名称:最长60个字符。
配置自定义标签:将请求参数中 Header 参数中的 region、usertype 设置为标签。
单击【完成】,跳转至插件管理列表页。
选择目标插件,单击操作列的【绑定对象】,将创建好的插件与步骤1中创建的分组进行绑定。
单击【提交】,完成配置。
步骤3:配置服务治理规则
在这一步中,我们配置依据步骤2已经转化的标签,配置服务治理规则。当前 TSF 标签可以与服务路由、服务鉴权、服务限流、调用链进行联动。此处将为您介绍路由、鉴权、以及调用链联动功能。
服务路由
在 【TSF 控制台】 左侧导航栏中,单击【服务治理】,进入服务列表页。
找到创建好的 provider - demo 微服务,单击微服务名称,进入服务详情页。
在服务详情页顶部,单击【服务路由】,进入服务路由页面。
在服务路由页左上角,单击【新建路由规则】,创建两条规则:
当自定义标签 region 值为 guangzhou 时,100%的流量指向部署了 provider-demo-guangzhou.jar 的部署组。
当自定义标签 region 值为 shanghai 时,100%的流量指向部署了provider-demo-shanghai.jar 的部署组。规则配置可参考下图:
注意:
路由规则始终是在被调用方进行配置的。
- 单击【完成】,该规则即可生效。
结果验证:
公网发送请求 :http://129.XX.XX.XX:8080/test-region/tj-test-1_default/provider-demo/test-region/12
并携带 Header 参数 region = shanghai
若配置的路由生效,则请求会路由到返回值为 shanghai 的部署组中。
同理,当请求 Header 参数 = guangzhou 时,则请求会路由到返回值为 guangzhou 的部署组中。
服务鉴权
在 [TSF 控制台] 左侧导航栏中,单击【服务治理】,进入服务列表页。
找到创建好的 provider - demo 微服务,单击微服务名称,进入服务详情页。
在服务详情页顶部,单击【服务鉴权】,进入服务鉴权页面。
选择服务鉴权方式为黑名单鉴权,并单击页面左下角的【新建鉴权规则】。
配置鉴权规则。当请求参数 Header 中携带了参数 usertype = user 时,请求不通过,且永久生效。配置方式如下:
标签类型:自定义标签
标签名:usertype
逻辑关系:等于
值:user
生效状态:永久生效
- 单击【完成】,完成服务鉴权,自动跳转至服务鉴权页面。
结果验证: 同理发送请求,携带 Header 参数 usertype = user,region = shanghai。发现返回请求失败。
调用链查询
在 TSF 中,我们提供了基于请求标签过滤调用链的能力,您可以依据业务数据过滤对应请求的调用链。最为常见的场景是查询某个用户 ID 的请求调用成功失败情况以及层级耗时。
使用方法:
在 【TSF 控制台】左侧导航栏中,单击【依赖分析】>【调用链查询】,进入调用链查询页面。
选择对应的命名空间和微服务,单击 “展开高级查询条件”。
输入查询标签。 我们输入 userid:1000001,过滤 userid 为1000001的请求数据。
单击【查询】,即可查看携带对应标签的请求 Trace 数据列表。