面试题答案
一键面试1. Eureka
- 工作原理:
- Eureka采用客户端 - 服务端架构。Eureka Server作为服务注册中心,各个微服务实例启动时,会向Eureka Server注册自己的信息(包括服务名、IP地址、端口等)。同时,微服务实例会定期向Eureka Server发送心跳包,以表明自己的存活状态。
- 其他微服务需要调用某个服务时,会从Eureka Server获取服务实例列表,然后根据负载均衡策略选择一个实例进行调用。
- 特点:
- 高可用:Eureka Server支持集群部署,各个节点之间相互复制数据,保证高可用性。
- 自我保护机制:当Eureka Server在一定时间内没有接收到某个微服务实例的心跳时,默认情况下会将该实例从服务列表中剔除。但在网络分区等异常情况下,为了防止误删服务实例,Eureka Server会开启自我保护机制,不再剔除长时间没有心跳的实例。
- 客户端缓存:Eureka客户端会缓存从Eureka Server获取的服务列表信息,即使Eureka Server出现短暂故障,客户端依然可以根据缓存的信息进行服务调用。
2. Consul
- 工作原理:
- Consul基于Go语言开发,它包含一个Server模式和多个Client模式的节点。服务提供者启动时,会向Consul Server注册自己的服务信息。Consul使用Raft算法保证Server节点之间数据的一致性。
- 服务消费者从Consul Server获取服务实例列表,同时Consul提供健康检查功能,它会定期检查服务实例的健康状态,如通过HTTP、TCP等方式进行探测。如果某个服务实例不健康,Consul会将其从服务列表中移除。
- 特点:
- 多数据中心支持:Consul原生支持多数据中心,能够在不同数据中心之间进行服务注册与发现,适合大规模分布式系统。
- 健康检查丰富:提供多种健康检查方式,包括HTTP、TCP、脚本等,能更灵活地检测服务实例的健康状况。
- KV存储:内置键值对(KV)存储,可用于存储一些配置信息等,方便微服务之间共享一些简单的数据。
3. ZooKeeper
- 工作原理:
- ZooKeeper采用树形结构来存储数据。服务提供者在启动时,会在ZooKeeper的指定节点下创建一个临时节点,节点内容包含自身的服务信息。
- 服务消费者通过监听ZooKeeper上的对应服务节点,当有新的服务实例注册或已有实例下线时,ZooKeeper会通知服务消费者,消费者重新获取最新的服务实例列表。
- 特点:
- 强一致性:ZooKeeper使用ZAB协议保证数据的强一致性,即所有客户端看到的服务实例列表是一致的。
- 可靠性:ZooKeeper集群通过多数节点投票机制保证数据的可靠性,部分节点故障不会影响整体服务。但是,ZooKeeper不适合频繁的读写操作,因为写操作需要通过集群内的多数节点确认,性能相对较低。