SpringCloud中eureka治理组件的原理

1.客户端功能

当添加了一个eureka-client组件到一个springboot工程时,依赖,属性,注解会启动一个eureka-client进程,完成和服务端交互

1.1注册:

程序启动时会携带自身的信息,包括服务名称,包括ip地址,包括端口号,等参数,以http协议请求访问 defaultZone 
可以通过 eureka.client.register-with-eureka=true/false决定当前客户端是否进行注册

(注册是为了被别人调用,抓取是为了调用别人---可以控制是否开启注册或者抓取)

1.2抓取注册信息:

在启动之后,客户端默认每隔30秒中,继续访问服务端接口,进行抓取注册信息的功能,将服务端所有注册好的信息,同步到本地 
可以通过 eureka.client.fetch-registry=true/false决定开启关闭抓取功能

1.3心跳续约:

为了让注册中心动态管理存活的有效的客户端,客户端默认每隔30秒中,向服务端发送一次心跳存活请求.在服务端接到请求,更新客户端信息时间戳. 

同一个服务,可以有多个客户端作为服务提供者同时注册在注册中心

2.服务端功能

2.1管理注册信息:

接收到客户端注册时,会接收参数(客户端服务名称,ip,port,等等),在内存生成一个双层map对象 Map<String,Map<String,String>> 
第一层map的key值:服务名称

第一层map的value值:第二层map对象(管理了所有同服务名称的服务提供者)

第二层map的key值:区分不同实例的名字

第二层map的value值:保存了该节点该服务提供者详细信息的instance对象(ip:port,时间戳)

图解如下:

8091和8092两个客户端拥有相同的服务名称(service-hi),那么他们在第一层map中存的key就是同一个,其他的信息将作为内部map的key-value继续存储

客户端注册到注册中心,是双层map,第一次生成一个key ,之后就是在map的value中在嵌套map添加key,value(保证了服务名称不重名,功能不一样,服务名称应该不一样)

2.2超时剔除:

服务端启动定时任务,每隔60秒钟运行一次定时任务,扫描所有注册信息instance对象时间戳,计算判断,如果发现有超过90秒心跳,将会作为超时的实例从注册信息中删除。

2.3保护机制:

正常的微服务集群,肯定会因为故障,网络延迟导致总是有超时的实例从注册信息提出.网络故障的面积非常大,影响了集群中大部分的节点发送心跳,如果严格执行超时提出,导致微服务集群注册信息丢失,整个集群的功能瘫痪.设置了一个超时剔除的阈值(15%,超过总体节点数量15%,同一时间剔除),开启保护机制,不提出任何服务信息. 
配置服务端属性

eureka.server.enable-self-preservation=false

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值