面试题答案
一键面试基本概念
Spring Cloud决策竞选机制是指在分布式系统中,为了保证系统的高可用性和数据一致性,通过一定的算法从多个候选者中选择出一个或多个“领导者”(Leader),由这些领导者来负责协调系统中的各种操作,如服务发现、配置管理等。在分布式场景下,多个实例可能都具备执行某些关键任务的能力,但为了避免冲突和确保一致性,需要一种竞选机制来确定哪个实例来执行该任务。
常用选举算法
- Bully算法:在该算法中,每个节点都有一个唯一的标识符,标识符最高的节点成为领导者。当领导者故障时,剩余节点中标识符最高的节点发起选举,自认为领导者并通知其他节点。
- Raft算法:是一种相对较新的一致性算法,用于管理复制日志。它将时间划分为一个个的任期(Term),每个任期开始都会进行一次选举,选出一个领导者。在正常情况下,领导者处理所有的客户端请求并将日志复制到其他节点。如果领导者故障,系统会进入新的选举阶段,选出新的领导者。
Eureka中服务实例的竞选实现
- 心跳机制:Eureka客户端(服务实例)会定期向Eureka服务器发送心跳(默认30秒一次),以表明自己仍然存活。如果Eureka服务器在一定时间内(默认90秒)没有收到某个实例的心跳,则认为该实例已失效。
- 自我保护机制:当Eureka服务器在短时间内丢失过多客户端(超过一定比例)时,会开启自我保护机制。在该机制下,Eureka服务器不会剔除那些没有心跳的实例,而是会等待它们重新恢复心跳,以防止误判。
- 服务发现竞选:在Eureka中并没有像传统意义上通过特定选举算法选出“领导者”服务实例。每个Eureka服务器节点都是平等的,它们相互之间通过复制机制来同步注册表信息。当一个新的服务实例注册到Eureka服务器时,该服务器会将这个信息同步给其他Eureka服务器节点,从而保证所有节点上的注册表信息一致性。在客户端进行服务发现时,会从Eureka服务器获取服务实例列表,然后通过负载均衡算法(如随机、轮询等)选择一个实例进行调用。