为什么服务注册?
服务注册可以帮助所有服务都注册并查找在Eureka这样的服务器上,因此能够很好适应服务地点配置的更改。
Eureka服务注册发现流程
服务注册是从生产者角度来说的,就是服务在启动的时候将信息注册到注册中心,由注册中心进行服务的统一管理。
服务发现则是从消费者角度来说的,就是客户端每隔一段时间去注册中心获取注册表信息。在Eureka中,client是从readOnly缓存中获取数据的,并且通过两个周期之间进行增量更新。
在服务注册之后,一个client发送取消请求或者Eureka Server在多个心跳周期都没有收到client发送的心跳,那么该client节点就会从服务注册中移除。
在client实际访问服务时,若服务只部署了一个节点,那么就可以通过ip+端口访问;若是部署了很多节点,就可以通过域名访问,然后通过nginx转发到某节点。
Eureka自我保护机制
当15分钟内超过80%都没有正常心跳的话,那么Server就会认为网络故障,进入自我保护机制。
在此机制中,若某些服务节点不正常下线,并不会剔除该节点,访问该节点的消费者也会获取到一个无效服务实例。也不会同步新服务注册查询请求到其他server。
Eureka多级缓存
Eureka为了避免同时读取内存数据所造成的并发冲突,采用了多级缓存提升响应速度。
- 一级只读缓存:concurrentHashMap <K,V> readOnlyCacheMap,无过期时间,依赖定时器从readWriteCacheMap更新。
- 二级读写缓存:LoaDing<K,V>readWriteCacheMap本质是Guava缓存,默认缓存过期时间为180s
服务注册在缓存中实际发生的是:内存更新注册表信息,同时过期readWriteCacheMap中缓存。在一段时间后(默认30s),后台定时同步缓存线程在readOnlyCacheMap更新
Ref
- https://blog.csdn.net/ThinkWon/article/details/104397367
- https://juejin.cn/post/6844904125717544973
- https://zhuanlan.zhihu.com/p/334711540