文章目录
- 服务注册与发现
- 什么是服务注册
- 什么是服务发现
- Eureka 是什么
- Eureka的设计架构
- Eureka 与 Zookeeper 的比较
- Zookeeper 保证 CP
- Eureka 保证 AP
服务注册与发现
在微服务架构中,服务注册与发现是核心组件之一,手动指定每个服务是很低效
的,Spring Cloud 提供了多种服务注册与发现的实现方式,例如:Eureka、
Consul、Zookeeper。
Spring Cloud 支持得最好的是 Eureka,其次是 Consul,再次是 Zookeeper。
什么是服务注册
服务注册:将服务所在主机、端口、版本号、通信协议等信息登记到注册中心上;
什么是服务发现
服务发现:服务消费者向注册中心请求已经登记的服务列表,然后得到某个服务
的主机、端口、版本号、通信协议等信息,从而实现对具体服务的调用;
Eureka 是什么
Eureka 是一个服务治理组件,它主要包括服务注册和服务发现,主要用来搭建
服务注册中心。
Eureka 是一个基于 REST 的服务,用来定位服务,进行中间层服务器的负载均
衡和故障转移;
Eureka 是 Netflix 公司开发的,Spring Cloud 封装了 Netflix 公司开发的
Eureka 模块来实现服务注册和发现,也就是说 Spring Cloud 对 Netflix Eureka
做了二次封装;
Eureka的设计架构
Eureka 采用了 C-S(客户端/服务端)的设计架构,也就是 Eureka 由两个组件
组成:Eureka 服务端和 Eureka 客户端。Eureka Server 作为服务注册的服务
端,它是服务注册中心,而系统中的其他微服务,使用 Eureka 的客户端连接
到 Eureka Server 服务端,并维持心跳连接,Eureka 客户端是一个 Java 客户
端,用来简化与服务器的交互、负载均衡,服务的故障切换等;
有了 Eureka 注册中心,系统的维护人员就可以通过 Eureka Server 来监控系
统中各个微服务是否正常运行。
Eureka 与 Zookeeper 的比较
著名的 CAP 理论指出,一个分布式系统不可能同时满足 C(一致性)、A(可用性)
和 P(分区容错性)。
由于分区容错性在是分布式系统中必须要保证的,因此我们只能在 A 和 C 之间
进行权衡,在此 Zookeeper 保证的是 CP, 而 Eureka 则是 AP。
Zookeeper 保证 CP
在 ZooKeeper 中,当 master 节点因为网络故障与其他节点失去联系时,剩余
节点会重新进行 leader 选举,但是问题在于,选举 leader 需要一定时间, 且选
举期间整个 ZooKeeper 集群都是不可用的,这就导致在选举期间注册服务瘫痪。
在云部署的环境下,因网络问题使得 ZooKeeper 集群失去 master 节点是大概
率事件,虽然服务最终能够恢复,但是在选举时间内导致服务注册长期不可用是
难以容忍的。
Eureka 保证 AP
Eureka 优先保证可用性,Eureka 各个节点是平等的,某几个节点挂掉不会影响
正常节点的工作,剩余的节点依然可以提供注册和查询服务。而 Eureka 的客户
端在向某个 Eureka 注册或时如果发现连接失败,则会自动切换至其它节点,只
要有一台 Eureka 还在,就能保证注册服务可用(保证可用性),只不过查到的信
息可能不是最新的(不保证强一致性)。
所以 Eureka 在网络故障导致部分节点失去联系的情况下,只要有一个节点可用,
那么注册和查询服务就可以正常使用,而不会像 zookeeper 那样使整个注册服
务瘫痪,Eureka 优先保证了可用性。