Skip to content

就近路由

fredrikliu edited this page Apr 16, 2024 · 8 revisions

就近路由简介

生产环境服务为了高可用、容灾等能力往往需要多机房、多城市、多地域部署。

image

如上图所示,范围从小到大依次为: Campus < Zone < Region < All

其中 CampusZoneRegion 在服务注册发现领域模型里统一定义为元数据,是一种特殊的位置元数据(Location Metadata)。

以一个实际的部署模型为例:上海机房一、上海机房二、杭州机房一、杭州机房二、北京机房。

  1. 三层模型
  • Campus(上海机房一) < Zone(上海) < Region(华东)
  1. 三层模型有时太过于复杂,也可简化成两层模型
  • Zone(上海机房一) < Region (上海)

就近路由顾名思义,服务调用时按照 同 Campus、同 Zone、同 Region 的优先级从高到低依次选取目标服务实例。核心是减少服务调用因物理距离增加的网络耗时。

本质上,就近路由是一种基于特定一组位置元数据的元数据路由。

就近路由操作

步骤一

开启就近路由 在examples中的application.yaml中,将路由相关的配置设置为true

spring.cloud.polaris.router.enabled=true

spring.cloud.polaris.router.rule-router.enabled=true

spring.cloud.polaris.router.metadata-router.enabled=true

spring.cloud.polaris.router.nearby-router.enabled=true

步骤二

在examples中的application.yaml中,添加地域相关的配置(两个provider的地域需不同才能验证就近路由)

spring.cloud.tencent.metadata.content.region=huanan
spring.cloud.tencent.metadata.content.zone=shenzhen
spring.cloud.tencent.metadata.content.campus=shenzhen-zone-1

consumer.serviceRouter.plugin.nearbyBasedRouter.matchLevel=campus
consumer.serviceRouter.plugin.nearbyBasedRouter.maxMatchLevel=all

步骤三

修改编辑后生成的jar文件:polaris-agent.config,修改为对应的版本

plugins.enable=spring-cloud-2023-plugin

步骤四

将两个provider打上不同的环境变量,并且在ProviderApplication将环境变量输出出来

-Dspring.cloud.tencent.metadata.content.env=pro1

步骤五

测试调用

curl http://127.0.0.1:65001/echo/test
Clone this wiki locally