Python 官方文档:入门教程 => 点击学习
目录Eureka如何指定ZoneEureka中的region和Zone概念分区服务架构图Eureka中Regin和 Zone的相关配置服务注册相关服务调用Eureka如何指定Zone
有坑。
先说结论:如果想给当前服务指定属于哪个zone, 使用
eureka.instance.metadata-map.zone=myzone
属性是无效的,而应该使用:
eureka.client.availabilityZones.beijing=myzone # beijing是region
同时指定region:
eureka.client.region=beijing
至于原因,可以在EurekaClientConfigBean的源码中找到:
@Override
public String[] getAvailabilityZones(String region) {
String value = this.availabilityZones.get(region);
if (value == null) {
value = DEFAULT_ZONE;
}
return value.split(",");
}
也就是说在判断当前服务属于哪个zone时,先从availabilityZone这个Map中查找,查找用的key是region名。
如果找不到,就使用默认值,即我们熟知的defaultZone。
像亚马逊这种大型的跨境电商平台,会有很多个机房。这时如果上线一个服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务,当同一个机房的服务不可用的时候,再去调用其它机房的服务,以达到减少延时的作用。
于是亚马逊的 AWS 提供了 region 和 zone 两个概念
region
:可以简单理解为地理上的分区。比如亚洲地区,或者华北地区,再或者北京地区等等,没有具体大小的限制,根据项目具体的情况,可以自行划分region。zone
:可以简单理解为 region 内的具体机房,比如说 region 划分为华北地区,然后华北地区有两个机房,就可以在此 region 之下划分出 zone1、zone2 两个 zoneeureka 也借用了 region 和 zone 的概念
如图所示,有一个 region:华北地区,下面有两个机房,机房A 和机房B
每个机房内有一个 Eureka Server 集群 和两个服务提供者 ServiceA 和 ServerB
现在假设 serverA 需要调用 ServerB 服务,按照就近原则,serverA 会优先调用同一个 zone 内的 ServiceB,当 ServiceB 不可用时,才会去调用另一个 zone 内的 ServiceB
eureka:
client:
# 尽量向同一区域的 eureka 注册,默认为true
prefer-same-zone-eureka: true
#地区
region: huabei
availability-zones:
huabei: zone-1,zone-2
service-url:
zone-1: Http://localhost:30000/eureka/
zone-2: http://localhost:30001/eureka/
当存在多个注册中心时,选择逻辑为
为了保证服务注册到同一个 zone 的注册中心,一定要注意 availability-zones 的顺序,必须把同一 zone 写在最前面
eureka:
instance:
# 服务和注册中心的心跳间隔时间,默认为30s
lease-renewal-interval-in-seconds: 30
# 服务和注册中心的心跳超时时间,默认为90s
lease-expiration-duration-in-seconds: 90
metadata-map:
# 当前服务所属的 zone
zone: zone1
服务消费者和服务提供者分别属于哪个zone,均是通过 eureka.instance.metadata-map.zone 来判定的。
服务消费者会先通过 ribbon 去注册中心拉取一份服务提供者的列表,然后通过 eureka.instance.metadata-map.zone 指定的 zone 进行过滤,过滤之后如果同一个 zone 内的服务提供者有多个实例,则会轮流调用。
只有在同一个 zone 内的所有服务提供者都不可用时,才会调用其它zone内的服务提供者。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: Spring Cloud Eureka: 指定Zone方式
本文链接: https://lsjlt.com/news/141254.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0