spring cloud之Eureka


Region 表示aws的地理位置,一个region有多个awailability zone,各region间完全隔离。这种方式实现最大的容错和稳定性。

spring cloud 默认使用的region是us-east-1c,非aws下awailability zone理解成机房,region理解成跨机房的eureka集群。

Eureka client 周期性向eureka server发送心跳,默认30s

Eureka server 默认90没有收到微服务心心跳就注销

多个eureka server之间通过复制实现服务注册表中数据同步

Eureka client会缓存服务注册表,从而降低eureka server的压力,另外当eureka server宕掉也可以从缓存中找到服务提供者。

Eureka Server的自我保护机制

https://mp.weixin.qq.com/s/vwPstQ0R0s_PsEhZnALP9Q

Eureka 缓存机制

http://blog.itpub.net/69918724/viewspace-2643265/

Eureka 常用配置

https://zhuanlan.zhihu.com/p/63524849

Eureka Server 相关配置 eureka.server.xxx

  • eureka.server.enable-self-preservation 是否开启自我保护机制

  • eureka.server.renewal-percent-threshold 表示 Eureka Server 开启自我保护的系数,默认:0.85

  • eureka.server.eviction-interval-timer-in-ms 表示 Eureka Server 清理无效节点的频率,默认 60000 毫秒(60 秒)。

Eureka Instance 相关配置 eureka.instance.xxx

  • eureka.instance.instance-id 服务实例的唯一id,默认

    ${spring.application.name}.${spring.application.instance_id:${server.port}}

  • eureka.instance.prefer-ip-address

    true: 实例以 IP 的形式注册

    false: 实例以机器 HOSTNAME 形式注册

  • eureka.instance.appname 服务名,默认取 spring.application.name 配置值,如果没有则为 unknown

  • eureka.instance.lease-renewal-interval-in-seconds

    表示 Eureka Client 向 Eureka Server 发送心跳的频率(默认 30 秒),如果在 lease-expiration-duration-in-seconds 指定的时间内未收到心跳,则移除该实例。

  • eureka.instance.lease-expiration-duration-in-seconds

    表示 Eureka Server 在接收到上一个心跳之后等待下一个心跳的秒数(默认 90 秒),若不能在指定时间内收到心跳,则移除此实例,并禁止此实例的流量。

    • 此值设置太长,即使实例不存在,流量也能路由到该实例

    • 此值设置太小,由于网络故障,实例会被取消流量

    需要设置为至少高于 lease-renewal-interval-in-seconds 的值,不然会被误移除了。

Eureka Client 相关配置 eureka.client.xxx

  • `eureka.client.fetch-registery

  • 客户端是否从 Eureka Server 获取实例注册信息

  • eureka.client.registery-fetch-interval-seconds

  • eureka.client.register-with-eureka

    表示此实例是否注册到 Eureka Server 以供其他实例发现。在某些情况下,如果你不想自己的实例被发现,而只想发现其他实例,配置为 false 即可。

  • eureka.client.serviceUrl.defaultZone

    表示客户端需要注册的 Eureka Server 的地址。

Eureka Server REST

常用服务发现组件对比