Eureka注册中心就近原则集群配置
一、Eureka注册的就近原则是什么
如图所示,有一个 region:某某区域(一般这种可能是同城或者不同城的双活),下面有两个机房,主机房和备机房
每个机房内有一个 Eureka Server 集群 和多个服务提供者 Service1一对和 Service2一对及Service3一对
现在假设 主机房Service1 需要调用Service2 服务,按照就近原则,即服务调用方会优先找通机房的服务提供方,Service1 会优先调用同一个 zone 内的 Service2,当 同一个zone内的(主机房)Service2不可用时,才会去调用另一个 zone (备机房)内的 Service2
二、Eureka注册的就近原则的实现目标
当同一套应用有多个中心机房可提供服务时,我们希望相同机房内的服务调用者优先调用同一个机房内的服务提供者,当同一个机房的服务提供者不可用的时候,再去调用其它机房的服务提供者,以达到减少延时的作用。
三、Eureka注册的配置方法
Eureka注册中心配置
eureka:
client:
# 尽量向同一区域的 eureka 注册,默认为true
prefer-same-zone-eureka: true
#地区
region: tianjin
availability-zones:
tianjin: zone-1,zone-2
service-url:
zone-1: http://IP1:port/eureka/,http://IP2:port/eureka/,http://IP3:port/eureka/
zone-2: http://IP1:port/eureka/,http://IP2:port/eureka/,http://IP3:port/eureka/
当存在多个注册中心时,选择逻辑为
如果 prefer-same-zone-eureka 为 false,按照 service-url 下的 list 取第一个注册中心来注册,并和其维持心跳检测,不再向list内的其它的注册中心注册和维持心跳。
只有在第一个注册失败的情况下,才会依次向其它的注册中心注册,总共重试3次,如果3个service-url都没有注册成功,则注册失败。
注册失败后每隔一个心跳时间,会再次尝试。
如果 prefer-same-zone-eureka 为true,先通过 region 取 availability-zones 内的第一个zone,然后通过这个zone取 service-url 下的list,并向list内的第一个注册中心进行注册和维持心跳,不再向list内的其它的注册中心注册和维持心跳。
只有在第一个注册失败的情况下,才会依次向其它的注册中心注册,总共重试3次,如果3个service-url都没有注册成功,则注册失败。
注册失败后每隔一个心跳时间,会再次尝试。
为了保证服务注册到同一个 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内的服务提供者。
参考地址
https://juejin.cn/post/6844903928178409479