注册中心分析
简述
之前面试问到了工作中用到的注册中心和市面上的有啥异同。
公司用的注册中心:Zookeeper
市面上除此之外还有其他注册中心:Eureka、Consul、Nacos
组件名称 | 所属公司 | 组件介绍 |
---|---|---|
Zookeeper | Apache | Zookeeper是一个分布式协调工具,可以实现注册功能 |
Eureka | Netflix | Spring最早的注册中心,目前已经进入停更进维 |
Consul | Hashicorp | Consul简化了分布式环境中的服务的注册和发现流程,通过HTTP或者DNS接口发现,支持外部Saas提供者等 |
Nacos | Alibaba | Nacos致力于发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,快速实现动态服务发现、服务配置、服务元数据以及流量管理 |
Zookeeper
遵循CP原则(一致性,分区容错性),牺牲了高可用。所以任何时候请求都能得到一致的数据结果,但是不能保证每次服务请求都是可达的。比如请求的时候leader节点宕机,或者集群中半数以上节点不可用,那么将无法处理请求。
Eureka
遵循AP原则(可用性,分区容错性),牺牲了数据一致性。也就是能保证每次服务请求都是可达的,但是不能保证每次的请求结果都是一致的。Eureka集群没有主从之分,采用的是Peer to Peer对等通信,这是一种去中心化的架构,每个节点都需要添加一个或多个有效的serviceUrl指向其他节点,每个节点都是其他节点的副本。集群中只要还有一个节点存活,那么服务就是可用的,但是不饿能保证查到的数据是最新的或者一致的。
除此之外还有一种保护机制,如果在15分钟内超过85%的节点都没有正常心跳,Eureka则认为客户端与注册中心之间出现了网络故障,此时会出现以下几种情况:
1 | 1、Eureka不再从注册表中移除因长时间没有收到心跳而过期的服务 |
Consul
遵循CP原则,Hashicorp公司开发,用于实现分布式系统的服务发现与配置。使用的时Raft算法,比zookeeper使用的Paxos算法更简单,虽然保证了强一致性,但是可用性方面性能有所下降,比如在服务注册方面,Raft协议要求半数以上的节点都写入才算注册成功,leader节点宕机之后,在重新选取出leader节点之前都会导致不可用。
Nacos
遵循AP原则,也可支持CP原则,阿里开源,nacos = 注册中心 + 配置中心,总之很强大,推荐。
总结
Nacos | Eureka | Consul | Zookeeper | |
---|---|---|---|---|
一致性协议 | CP+AP | AP | AP | CP |
健康检查 | TCP/HTTP/MySQL/Client Beat | Client Beat | TCP/HTTP/gRPC/Cmd | keep alive |
负载均衡 | 权重/metadata/Selector | Ribbon | Fabio | - |
自动注销实例 | 支持 | 支持 | 不支持 | 支持 |
访问协议 | HTTP/DNS | HTTP | HTTP/DNS | TCP |
监听支持 | 支持 | 支持 | 支持 | 支持 |
多数据中心 | 支持 | 支持 | 支持 | 不支持 |
跨注册中心同步 | 支持 | 不支持 | 支持 | 不支持 |
SpringCloud集成 | 支持 | 支持 | 支持 | 不支持 |