Eurake的服务列表是基于ConcurrentHashMap实现,服务列表名位Key,对应的访问地址位Value;如果相同服务器复制了多个那么同一个Key则会对应多个Value。
在Eureka架构中微服务角色分为两类:
EurakeServer:服务端,注册中心
作用:记录服务信息、心跳监控
EurakeClient:客户端
Provider(服务提供者):
每隔30s向EurakeService发送心跳
注册自己的信息到EurakeService
Consumer(服务消费者):
根据服务名从EurakeService拉取服务器列表
基于服务列表做负载均衡,选中一个微服务发起远程调用
如果服务消费者需要注册中心里的服务提供者就会在注册中心将服务提供者拉去下来,通过@LoadBanlance注解里的IRule类去知道具体找哪个服务
Euraka中的一些机制
服务剔除:当服务提供者超过30s没有向注册中心提供心跳,注册中心会等待3次30s的等待,如果拍还没收到心跳续约,在没有开启自我保护机制的情况下就会被注册中心剔除
自我保护机制:生产者会每隔30s向EurekaService发送心跳,但在发送心跳的过程中会发生因网络问题造成数据丢包的可能从而导致EurakeService误删活着的服务提供者。但开启了自我保护机制EurakeService就不会剔除服务提供者,如果此服务真的挂掉也不会剔除
定时线程:定时线程是定时检查心跳的,如果有服务提供者没有进行心跳的续约此线程就会等待3次30s,如果还未收到心跳续约那么就会将该服务器进行服务剔除(前提是没有开启自我保护机制)
Eureka中的两级缓存
Read Write:服务提供者注册上来后会立刻同步给ReadWrite缓存中,ReadWrite有个定时线程,此线程会定时同步给 ReadOnly缓存中
ReadOnly:服务消费者拉取服务会从ReadOnly缓存中进行拉取,如果消费者直接对接服务列表,但服务列表为了安全会加锁,消费者拉取就会造成阻塞
两级缓存的目的是减少阻塞