放眼 Spring Cloud 生态,能够深度整合 Spring Cloud 提供场景化服务路由能力的组件套件并不多。这里解释一下场景化,服务调用框架根据一定的规则实现服务路由的能力我们称之为底层原子能力。原子能力是非常通用的能力,但是很多时候并不能直接用于具体的业务场景。例如常见的测试环境分组,就近路由,蓝绿发布等称之为场景。服务路由只有做了场景化之后,才能真正做到开箱即用服务于业务。
Spring Cloud Tencent Polaris Router 目前实现了两种场景化的路由能力以及一种非常灵活的规则路由的能力。
元数据路由
服务实例都会附属一组元数据,例如环境信息,机房信息等等。元数据路由简单的讲就是以元数据信息作为路由的依据进来路由。这样讲还是有些抽象,我们以一个测试环境例子来解释一下。

(图:开发环境示意图)
上图是非常经典的用于解决测试环境冲突的方案。一次迭代中 SvcA 需要和 SvcD 联调,当团队人数少的时候,可以直接把 stable 环境部署成开发分支代码然后进行联调。但是当多个开发任务并行的情况下就会出现环境争抢的情况。一种解决方式是每个开发任务独立部署一套全链路的环境,这种方式耗时耗力效果还很差。业界最主流的做法就是上图所示,每个开发任务子环境只需要部署联调的应用即可,链路上不在子环境里的服务都路由回 stable 稳定环境。
使用 Spring Cloud Tencent 为了达到以上的目的,只需要每个服务部署的时候,增加以下两个环境变量即可实现。
- SCT_METADATA_CONTENT_ENV=dev1
- SCT_METADATA_CONTENT_TRANSITIVE=ENV
Spring Cloud Tencent Polaris Router 组件会自动读取以上环境变量,并在每次服务调用时优先调用到跟当前实例 ENV 值一样的目标实例。
元数据路由使用的场景非常广泛,更多的细节请查阅 Github Wiki。
规则路由
元数据路由本质上是基于服务实例的元数据进行筛选,是为了支持具体特定的场景而内置的服务路由能力。无需下发任何路由规则,使用起来非常简单。
而实际业务场景非常复杂,例如以下几种典型的业务场景: