接上一章节搭建和配置一个服务消费者,这里讲讲服务注册中心 Eureka
服务注册与发现
在微服务架构中,服务注册与发现是核心组件之一,手动指定每个服务是很低效的,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 优先保证了可用性。