微服务注册中心 Eureka 架构深入解读
服务提供者、服务消费者、以及服务注册中心自己,启动后都会向注册中心注册服务(如果配置了注册)。下图是介绍如何完成服务注册的: ![]() 注册中心服务接收到 register 请求后:
服务续约机制 服务注册后,要定时(默认 30S,可自己配置)向注册中心发送续约请求,告诉注册中心“我还活着”。 ![]() 注册中心收到续约请求后:
服务注销机制 服务正常停止之前会向注册中心发送注销请求,告诉注册中心“我要下线了”。 ![]() 注册中心服务接收到 cancel 请求后:
服务剔除机制 Eureka Server 提供了服务剔除的机制,用于剔除没有正常下线的服务。 ![]() 服务的剔除包括三个步骤,首先判断是否满足服务剔除的条件,然后找出过期的服务,最后执行剔除。 判断是否满足服务剔除的条件 有两种情况可以满足服务剔除的条件:
这里比较核心的条件是自我保护机制,Eureka 自我保护机制是为了防止误杀服务而提供的一个机制。Eureka 的自我保护机制“谦虚”的认为如果大量服务都续约失败,则认为是自己出问题了(如自己断网了),也就不剔除了;反之,则是 Eureka Client 的问题,需要进行剔除。而自我保护阈值是区分 Eureka Client 还是 Eureka Server 出问题的临界值:如果超出阈值就表示大量服务可用,少量服务不可用,则判定是 Eureka Client 出了问题。如果未超出阈值就表示大量服务不可用,则判定是 Eureka Server 出了问题。 条件 1 中如果关闭了自我保护,则统统认为是 Eureka Client 的问题,把没按时续约的服务都剔除掉(这里有剔除的最大值限制)。 这里比较难理解的是阈值的计算:
最后自我保护阈值的计算公式为: 自我保护阈值 = 服务总数 * (60S/ 客户端续约间隔) * 自我保护阈值因子。 举例:如果有 100 个服务,续约间隔是 30S,自我保护阈值 0.85。 自我保护阈值 =100 * 60 / 30 * 0.85 = 170。 如果上一分钟的续约数 =180>170,则说明大量服务可用,是服务问题,进入剔除流程; 如果上一分钟的续约数 =150<170,则说明大量服务不可用,是注册中心自己的问题,进入自我保护模式,不进入剔除流程。 找出过期的服务 遍历所有的服务,判断上次续约时间距离当前时间大于阈值就标记为过期。并将这些过期的服务保存到集合中。 剔除服务 在剔除服务之前先计算剔除的数量,然后遍历过期服务,通过洗牌算法确保每次都公平的选择出要剔除的任务,最后进行剔除。 执行剔除服务后:
服务获取机制 Eureka Client 获取服务有两种方式,全量同步和增量同步。获取流程是根据 Eureka Server 的多层数据结构进行的: ![]() (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |