SpringCloud原理 (一) eureka

1.在某网站拿个多机房eureka部署图在这里插入图片描述
Eureka Server(北京,天津,青岛)

  • 集群部署,节点间进行(异步)数据同步,保证最终一致性。
  • 通过appName和instanceInfoId(微服务信息)来唯一区分一个服务实例,服务实例信息保存在Map中:
// 第一层的key是appName,第二层的key是instanceInfoId
private final ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry 
    = new ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>>();
  • Eureka Server同时也是一个Eureka Client,在不禁止Eureka Server的客户端行为时,它会向它配置文件中的其他Eureka Server进行拉取注册表、服务注册和发送心跳等操作。
  • eureka指定时间收不到client的心跳时,将剔除服务。
  • 自我保护机制的工作机制:
    如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为自己出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:
    (1)Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。
    (2)Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。
    (3)当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。
    因此Eureka Server可以很好的应对因网络故障导致部分节点失联的情况,而不会像ZK那样如果有一半不可用的情况会导致整个集群不可用而变成瘫痪。
    Eureka自我保护机制,通过配置 eureka.server.enable-self-preservation来true打开/false禁用自我保护机制,默认打开状态,建议生产环境打开此配置。

Eureka Client

  • 启动后,将InstanceInfo(服务信息)发送给eureka server。并且从eureka server拉取其它微服务信息,保存到本地registry。该注册列表信息还定期(每30秒钟)从eureka server中拉取更新一次。
  • 在运行过程中,Eureka Client 定时向注册中心发送 renew 心跳,证明“我还活着”。
  • 停止服务提供者,向注册中心发起 cancel 请求,清空当前服务注册信息。
  • Eureka Client 会拉取、更新和缓存 Eureka Server 中的信息。因此当所有的 Eureka Server 节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者,但是当服务有更改的时候会出现信息不一致。
  • Eureka Client关键配置
    (1)启用服务消费者从注册中心拉取服务列表的功能
eureka.client.fetch-registry=true

(2)每隔30s从server中拉取服务信息。

eureka.client.registry-fetch-interval-seconds=30

(3)Eureka Client每隔5s向Eureka Server发送心跳

eureka.instance.lease-renewal-interval-in-seconds=5

(4)到期时间(默认90秒).如果你约定时间内还没跟服务端说你还活着,就代表你已经死了。然后服务端就能把你踢了

eureka.instance.lease-expiration-duration-in-seconds =30

Eureka集群

  1. 没有主,从节点区分。某几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而 Eureka Client 在向某个 Eureka 注册时,如果发现连接失败,则会自动切换至其它节点。只要有一台 Eureka Server 还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

Eureka基本流程总结

  1. Eureka Server 启动成功,等待服务端注册。在启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息。
  2. Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务。
  3. Eureka Client 会每 30s 向 Eureka Server 发送一次心跳请求,证明客户端服务正常。
  4. 当 Eureka Server 90s 内没有收到 Eureka Client 的心跳,注册中心则认为该节点失效,会注销该实例。
  5. 单位时间内 Eureka Server 统计到有大量的 Eureka Client 没有上送心跳,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端。
  6. 当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式。
  7. Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地。
  8. 服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存。
  9. Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中删除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值