内部员工路由到一套生产灰度环境,外部普通用户则路由到生产正式环境VIP 客户路由到一套高保环境,普通客户路由到普通环境
以上两种业务场景,则无法通过元数据路由实现。因为涉及到业务请求参数,而不是系统维度的环境变量。规则路由就是用于满足复杂业务场景而实现的一套基于规则的服务路由实现。
一个典型的规则如下图所示:
(图:路由规则配置页面)
上图表达的含义是:HTTP Query Param 的 uid 参数值为 100 时,调用到 ENV=gray 的实例分组。通过路由规则能够描述出绝大多数复杂的业务场景。
为了便于使用, Spring Cloud Tencent 内置了一套表达式标签规则,自动从 HTTP 请求中解析标签值。目前支持的表达式规则有:
- ${http.query.xxx}
- ${http.header.xxx}
- ${http.cookie.xxx}
- ${http.method}
- ${http.uri}
规则路由相对比较复杂,更多的细节请查阅 Github Wiki。
就近路由
生产环境服务为了高可用、容灾等能力往往需要多机柜、多机房、多地域部署。
(图:部署模型图)
如上图所示,范围从小到大依次为: Campus < Zone < Region < All 其中 Campus、Zone、Region 在服务注册发现领域模型里统一定义为元数据,是一种特殊的位置元数据(Location Metadata)。
就近路由顾名思义,服务调用时按照同 Campus、同 Zone、同 Region 的优先级从高到低依次选取目标服务实例。核心是减少服务调用因物理距离增加的网络耗时。本质上,就近路由是一种基于特定一组位置元数据的元数据路由。