就近路由和跨可用区容灾

最近更新时间: 2024-09-05 15:09:00

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. 登录 【TSF 控制台】 。

  2. 在左侧导航栏中,单击【集群】,进入集群列表页,单击【新建集群】。

  3. 新建虚拟机集群 cluster1,【所在可用区】选择广州一区,设置其他属性。

  4. 新建虚拟机集群 cluster2,【所在可用区】选择广州二区,设置其他属性。

  5. 集群 cluster1 和集群 cluster2 分别导入所在可用区的云服务器。

  6. 在集群 cluster1 的集群详情页 >【命名空间】标签页,单击【新建】,新建命名空间 dev-ns。

  7. 在集群 cluster2 的集群详情页 >【命名空间】标签页,单击【新建】,新建命名空间 dev-ns。

  8. 确认命名空间 dev-ns 的就近路由开关默认是开启的。

步骤二:部署应用

  1. 在左侧导航栏中,单击【应用管理】,进入应用管理页,单击【新建应用】。

  2. 新建应用 consumer-app 和 provider-app。

  3. 在应用详情页 >【程序包管理】页面上传 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 程序包。

步骤三:验证就近路由

consumer 和 provider 部署成功后,观察服务依赖拓扑图是否出现,如果出现说明服务间调用正常。

  1. 在控制台左侧导航栏,单击【服务治理 】。

  2. 单击 provider-demo 进入微服务详情页,单击【服务路由】标签页的流量详情中可以观察来自 consumer 的请求是否全部路由到部署组 provider-group-03 中,如果请求全部路由到部署组 provider-group-03 证明就近路由功能生效。

步骤四:验证容灾

  1. 停止部署组 provider-group-03。

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

步骤五:关闭就近路由

  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。