有奖捉虫:云通信与企业服务文档专题,速来> HOT
文档中心 > 微服务平台 TSF > 最佳实践 > 就近路由和跨可用区容灾
TSF 支持业务同城可用区就近路由和跨可用区容灾。该功能在1.12.0版本(参考 版本更新)发布之后生效,使用前提条件:
如果是 Spring Cloud 应用,必须使用1.12.0之后版本的 SDK。
如果是虚拟机应用,部署实例必须是1.12.0发布之后导入集群的云主机。
如果是容器应用,部署实例必须是1.12.0发布之后创建或者重新部署。

功能概述

命名空间、集群有如下特点:不同集群可关联同一命名空间,服务支持跨集群访问,详细说明请参考 命名空间
以 consumer 服务调用 provider 服务为例说明服务跨可用区访问的原理。在下方示意图中有两个集群,分别位于广州一区和广州二区。集群1分别部署了 consumer 和 provider 微服务,集群2部署了 provider 微服务。两个可用区的服务都会注册到同一个注册中心集群。
开启就近路由时,广州一区的 consumer 会优先调用同一可用区的 provider。


开启就近路由时,当广州一区的 provider 不可用时,consumer 会跨可用区调用广州二区的 provider。


关闭就近路由时,广州一区的 consumer 会从两个可用区 provider 中随机选择实例进行调用。

就近路由原理

微服务的路由模块会将可用区作为一种系统标签,当开启就近路由时,服务消费者会将请求流量全部路由到相同可用区标签的服务提供者,只有当同一可用区服务提供者不可用时,才会进行跨可用区的服务调用;当关闭就近路由时,服务消费者会随机选择不同可用区的服务提供者实例进行调用。
关于服务路由的更多说明参考 服务路由基本原理服务路由使用方法

最佳实践

跨可用区容灾场景下的就近路由

场景:当开启就近路由时,广州一区的 consumer 会优先调用同一可用区的 provider ,只有当广州一区的 provider 不可用时,consumer 才会跨可用区调用广州二区的 provider。

步骤1:准备资源

1. 登录 TSF 控制台
2. 在左侧导航栏中,单击集群,进入集群列表页,单击新建集群
3. 新建虚拟机集群 cluster1,所在可用区选择广州一区,设置其他属性。
4. 新建虚拟机集群 cluster2,所在可用区选择广州二区,设置其他属性。
5. 集群 cluster1 和集群 cluster2 分别导入所在可用区的云服务器。
6. 在集群 cluster1 的集群详情页 >命名空间标签页,单击新建,新建命名空间 dev-ns。
7. 在集群 cluster2 的集群详情页 >命名空间标签页,单击新建,新建命名空间 dev-ns。
8. 确认命名空间 dev-ns 的就近路由开关默认是开启的。

步骤2:部署应用

1. 在左侧导航栏中,单击 应用管理,进入应用管理页,单击新建应用
2. 新建应用 consumer-app 和 provider-app。
3. 在应用详情页 > 程序包管理页面上传 Demo 程序包,Demo 获取请参考 Demo 工程概述
4. 进入 conumser-app 应用详情页 >部署组标签页。 新建部署组 consumer-group, 属于集群 cluster1,命名空间 dev-ns。添加实例,部署 consumer-demo 程序包。
5. 在 provider-app 应用详情页 > 部署组标签页
新建部署组 provider-group-03,属于集群 cluster1,命名空间 dev-ns,添加实例,部署 provider-demo 程序包。
新建部署组 provider-group-04,属于集群 cluster2,命名空间 dev-ns,添加实例,部署 provider-demo 程序包。
关于部署的详细操作参考 虚拟机应用部署组

步骤3:验证就近路由

consumer 和 provider 部署成功后,观察服务依赖拓扑图是否出现,如果出现说明服务间调用正常。
1. 在控制台左侧导航栏,单击 **服务治理**。
2. 单击 provider-demo 进入微服务详情页,单击服务路由标签页的流量详情中可以观察来自 consumer 的请求是否全部路由到部署组 provider-group-03 中,如果请求全部路由到部署组 provider-group-03 证明就近路由功能生效。



步骤4:验证容灾

1. 停止部署组 provider-group-03。
2. 观察 provider-demo 服务路由页面的流量详情中可以观察到流量分配到部署组 provider-group-04,证明容灾能力生效。



步骤5:关闭就近路由

1. 启动部署组 provider-group-03,观察到流量分配回 provider-group-03。
2. 在命名空间页面关闭就近路由开关,观察到流量均匀分配到2个部署组。



就近路由与路由规则

开启就近路由后,服务消费者会按照路由规则优先调用同一可用区的服务提供者,只有当同一可用区的服务提供者不可用时,会按照路由规则进行跨可用区调用。
场景:集群1和集群2都部署了 provider 的两个版本 v1 和 v2;路由规则是90%的流量分配到 v1,10%的流量分配到 v2;命名空间开启了就近路由。
当集群1中 provider 的 v1 和 v2 版本实例都正常时,consumer 会按照路由规则调用同一可用区的 provider。


当集群1中 provider 的 v1 实例不正常, v2 版本实例正常时,consumer 会按照路由规则将90%请求发送给可用区二的 v1 ,10%请求发送给可用区一的 v2。


当集群1中 provider 的 v1 和 v2 实例都不正常,consumer 会按照路由规则将所有90%请求发送给可用区二的 v1,10%请求发送给可用区二的 v2。