Eureka总结笔记
Posted IT一二
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eureka总结笔记相关的知识,希望对你有一定的参考价值。
Eureka 结构
-
Eurka由两部分组成,即Eureka Client、Eureka Server,Client端又分为服务消费者客户端、和服务提供者客户端; -
服务提供者启动时,发起resgiter请求,默认间隔30s进行renew请求心跳(续约)给Server端,当主动下线时,发起cancel请求移除服务注册信息,并由Server端移除服务信息及通知客户端; -
服务消费者端,定期向Server端get resgitry获取服务列表信息,并缓存在本地; -
Erueka Server端启动后,会去其他节点同步数据,默认90(s)/1周期进行服务剔除操作,将在周期内3次未续约的服务进行服务移除操作。
Eureka server 组成
-
接口服务层,用于处理与Client端的数据交互,传输格式:json/Byte[] -
二级缓存层,分为L1和L2缓存,L1缓存为hashMap 只读缓存,不存在失效时间。L2为guava 读写缓存,有周期性的失效机制。当接收到get registy请求时,会加载registry(全量拉取)和chahgeQueue数据(增量拉取)到缓存,优先级:一级缓存>二级缓存>存储Registry。 -
数据存储层,采用双ConcurrentHashMap结构存储服务注册信息,第一级Map存在 spring.application.name 为Key, 二级Map为Value。而二级Map.Key为相同注册名(Name)服务的instanceId,Map.Vlaue为服务的Lease信息,含:服务上线时间,最近心跳时间,实例信息等等
服务注册机制
-
客户端发起register请求 -> 服务端更新本节点存储层registry,更新服务阀值 -> 推送到recentlyChangeQueue -> 清空本节点二级缓存 -> 推送数据同步给其他节点
运行过程中节点数据同步
-
客户端发起register/renew/cancel请求 -> 服务端节点封装成TaskHolder,放入AcceptorBlockingQueue -> 经过处理,放入 BatchWorkBlockingQueue -> TaskExecutorThreadPool poll任务 -> 向其他节点发起同步请求。当同步失败时,放入reprocessQueue,进行重试处理。
总结归纳
-
eureka是基于AP设计的注册中心,当一个节点挂掉之后,其他节点继续提供服务,但不保证数据是最新的,只保证最终的一致性,强调服务高可用。
更多文档
参考自
eureka原理解析[1]
github[2]
参考资料
eureka原理解析: https://blog.csdn.net/zhuyanlin09/article/details/89598245
[2]github传送门: https://github.com/Netflix/eureka
以上是关于Eureka总结笔记的主要内容,如果未能解决你的问题,请参考以下文章