SpringCloud 面试题, Eureka 和 Zookeeper 的区别是什么?
SpringCloud 面试题, Eureka 和 Zookeeper 的区别是什么?
QA
Step 1
Q:: SpringCloud 面试题:
Eureka 和 Zookeeper 的区别是什么?
A:: Eureka 和 Zookeeper 都是用于服务注册与发现的工具,但它们在设计目标和使用场景上有显著的区别。Eureka 是 Netflix 开源的服务注册与发现组件,设计目标是 'AP'(Availability and Partition tolerance),即在网络分区的情况下优先保证服务的可用性。这意味着即使某些节点与主节点失联,Eureka 仍然会允许服务继续注册和发现。Zookeeper 则是一个分布式协调服务,设计目标是 'CP'
(Consistency and Partition tolerance),即在网络分区的情况下优先保证数据的一致性。这意味着在网络分区时,Zookeeper 可能会拒绝某些操作,以确保所有节点的数据一致。实际生产环境中,如果系统对高可用性要求更高且可以接受短暂的不一致性,通常选择 Eureka;而如果系统对数据一致性要求更高,则倾向于选择 Zookeeper。
Step 2
Q:: SpringCloud 面试题:
Eureka 如何保证服务的高可用性?
A:: Eureka 通过设计上的容错机制和心跳检测来保证服务的高可用性。Eureka Server 是无状态的,多个 Eureka Server 实例可以组成集群,服务注册到多个 Eureka Server 实例中,以此保证即使部分 Eureka Server 实例宕机,服务依然可以被发现和调用。服务实例会定期向 Eureka Server 发送心跳,来表明自身状态。如果 Eureka Server 在一定时间内未收到心跳,则会将该服务实例标记为 'DOWN'
状态。即使某些服务实例失效,其他实例依然可以提供服务,确保系统的高可用性。
Step 3
Q:: SpringCloud 面试题:
Zookeeper 是如何保证分布式一致性的?
A:: Zookeeper 通过基于 Paxos 协议的变种——Zab 协议来实现分布式一致性。Zookeeper 的集群节点通过选举产生一个 Leader,所有的写操作都通过 Leader 来进行,Leader 会将数据更新广播给所有 Follower,并等待大多数节点确认后,才将更新提交,确保所有节点数据的一致性。此外,Zookeeper 还使用了 '版本号'
来标识数据状态的变化,进一步保证一致性。在生产环境中,Zookeeper 通常用于需要严格数据一致性的场景,如分布式锁、分布式协调服务等。