Skip to content

六、服务路由-Router ​

1、模块简介 ​

当 A 服务调用 B 服务时,先从注册中心获取全量 B 服务地址信息。当没有服务路由,直接进行负载均衡,根据负载均衡算法从全量 B 服务地址中挑选一个服务实例发起服务调用。 当加入服务路由阶段后,挑选服务实例分为两个阶段:

  • 阶段一:从全量服务地址中根据路由规则选取一批目标服务地址
  • 阶段二:从阶段一选取的一批目标服务地址中,再根据负载均衡算法挑选一个实例

image

需要明确一下概念:

  • 服务路由 :根据路由规则从全量实例列表中,挑选一部分实例
  • 负载均衡 :根据负载均衡算法,从一批实例中挑选一个实例

服务路由具有广泛的使用场景,例如金丝雀发布、灰度发布、蓝绿发布、按机房收敛流量等。

在 Spring Cloud Hoxton 版本之前,Spring Cloud Netflix Ribbon 提供了负载均衡能力,不具备服务路由的能力。 Spring Cloud Tencent Router 则扩展了路由能力。Spring Cloud Tencent Router 集成了 Polaris 的路由功能,提供了开箱即用的路由能力。

2、服务路由实现原理 ​

服务路由实现的原理非常简单,从注册中心获取全量的健康的服务实例列表,再经过一系列的 RouterFilter 插件过滤出满足条件的实例列表。不同的服务路由类型即是其中一个 RouterFilter 实现,用户也可以自定义 RouterFilter 以实现自身特殊的服务路由场景。

image

3、使用服务路由 ​

目前 Spring Cloud Tencent Router 内置了三种服务路由能力,每种服务路由能力请参考对应的文档:

在使用每种类型的服务路由之前,需要参考 服务路由基础 引入 Router 的依赖以及填写相关的配置以开启服务路由能力。

4、调整负载均衡策略 ​

1、Hoxton 版本 ​

Hoxton 版本由于服务路由是在 Ribbon 的 IRule 上做的扩展以实现服务路由的能力,所以破坏了原有的负载均衡策略模型(通过注入相应的 LoadBalancer Bean)。Spring Cloud Tencent 提供了另外一种通过配置(spring.cloud.polaris.loadbalancer.strategy)的方式来达到调整负载均衡策略的方式。可设置的值为:

值负载均衡策略
random随机算法
roundRobin轮训算法
polarisWeighted北极星权重算法,通过北极星页面调整权重生效的前提是负载均衡算法是 polarisWeighted
responseTimeWeighted响应时间权重算法
bestAvailable并发量最小算法