赞
踩
概述
所有的注册中心都需要两个核心功能:
注册中心核心原理:
一、Eureka的整体架构
Eureka Netflix 服务注册与发现的中间件Spring Cloud 2020版本中唯一留下的组件,整体架构如下。
Application Service: 作为Eureka Client,扮演了服务的提供者,提供业务服务,向Eureka Server注册和更新自己的信息,同时能从Eureka Server的注册表中获取到其他服务的信息。
Application Client: 作为Eureka Client,扮演了服务消费者,通过Eureka Server获取到注册到上面的其他服务的信息,从而根据信息找到所需的服务发起远程调用。
Eureka Server: 扮演服务注册中心的角色,提供服务注册和发现的功能,每个Eureka Client向Eureka Server注册自己的信息,也可以通过Eureka Server获取到其他服务的信息达到发现和调用其他服务的目的。
Replicate:服务同步,Eureka Server直接相互注册构建集群,注册表信息的同步拷贝,保持不同的Eureka Server集群中的注册表中的服务实例信息的一致性。提供了数据的最终一致性。
Cancel: 服务下线,Client在关闭时主动向Server注销服务实例元数据,这时Client的的服务实例数据将从Server的注册表中删除。
服务剔除,Client由于网络原因,没有发送请求给Server来进行服务下线,Eureka Server会每60秒遍历一次注册表中的信息,把超过90秒还没有续约的服务剔除。
二、服务注册发现的流程
注册:
发现:
Eureka Client在启动时, 发送REST请求向Eureka Server取到注册到上面的其他服务的信息,并缓存在本地,默认30s轮询一次。
三、如何判断一个服务不可用(心跳)
在每一个Eureka Client启动的时候,都会有一个HeartbeatThread的心跳线程,保证默认每隔30秒的时候向Eureka Server发送一个心跳,告诉Eureka Server当前的Eureka Client还存活着。eureka.instance.lease-renewal-interval-in-seconds
,这个参数可以来配置对应的心跳间隔时间。
Eureka Server在接收到请求之后,先去自己的注册表中去,找到请求的对应的服务信息,在这个服务信息里面有个Lease的对象,更新Lease对象里面的LastUpdateTimestamp时间戳,每一次接收到都会更新这个时间戳的(Renew 续约)
Eureka Server会每60秒遍历一次注册表中的信息,然后查看注册表中的信息是否有过期的,如果90秒还没有更新对应的LastUpdateTimestamp就表示这个服务过期(从注册表中删除注册信息)。
//可以配置心跳检测的时间间隔
eureka.server.evictionIntervalTimerInMs
//90秒过期的配置
eureka.instance.lease-expiration-duration-in-seconds
整体原理:
四、Eurka的自我保护机制
Eureka Server在运行期间会去统计心跳失败的比例在15分钟之内是否低于85% 如果发现85%以上的服务都没有心跳,Eureka Server会认为当前实例的客户端与自己的心跳连接出现了网络故障,那么Eureka Server会把这些实例保护起来,让这些实例不会过期导致实例剔除。
这样做的目的是为了减少网络不稳定或者网络分区的情况下,Eureka Server将健康服务剔除下线的问题。 使用自我保护机制可以使得Eureka 集群更加健壮和稳定的运行。
进入自我保护状态后,会出现以下几种情况
protected volatile int numberOfRenewsPerMinThreshold; //每分钟最小续约数量
protected volatile int expectedNumberOfClientsSendingRenews; //预期每分钟收到续约的
客户端数量,取决于注册到eureka server上的服务数量
Eureka的自我保护机制,都是围绕上面这两个变量来实现的。
五、Eurka信息存储原理多级缓存设计
六、zk和eureka的区别
zk:是CP模型设计,目的是一个分布式协调系统,用于进行资源的统一管理,当节点挂了之后,需要进行leader选举(zab协议),在这个期间服务不可用。
eureka:是AP模型设计,目的服务注册发现系统,用于进行服务的注册发现,eureka各个节点是平等的,几个节点挂了不影响正常节点工作,当eureka客户端发现连接失败后会自动切换到其他正常节点,只要一台eureka节点还在,就能保证服务注册发现可用,只不过查到的信息可能不是最新的,不保证强一致性。
Eureka Server在运行期间会去统计心跳失败的比例在15分钟之内是否低于85% 如果发现85%以上的服务都没有心跳,Eureka Server会认为当前实例的客户端与自己的心跳连接出现了网络故障,那么Eureka Server会把这些实例保护起来,让这些实例不会过期导致实例剔除。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。