微服务分布式架构基础与实战:基于Spring Boot + Spring Cloud
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 注册中心

分布式服务框架Dubbo用Zookeeper进行注册服务,负责提供互相调用的地址。ZooKeeper是一个分布式的、开放源码的应用程序协调服务,是Google Chubby的一个开源实现,也是Hadoop和Hbase的重要组件。ZooKeeper是一个为分布式应用提供一致性服务的软件,提供的功能包括配置维护、域名服务、分布式同步、组服务、分布式独享锁等。

只要两个服务注册在一个注册中心上,就已经可以看成初步的分布式。通过注册中心可以获得其他项目提供的服务,并从分布式获得其他项目目前是否良好运行的状态等信息,然后逐渐从注册中心辅助架构整套程序。注册中心相当于“通信录”,虽然无法直接拨打电话(调用服务),但会提供其他服务的地址和状态等相关信息。

2.1.1 Eureka与Consul的区别

常见的服务注册中心有Eureka、Consul、Zookeeper、Etcd、SmartStack、Serf、SkyDNS等,下面详细介绍Eureka与Consul的区别。

1.Eureka

微服务分布式刚发布时,官方推荐使用Spring Cloud Eureka集成Eureka作为微服务的注册中心使用。Eureka是Netflix公司开发的服务发现框架,其本身是一个基于REST的服务,Eureka可以达到负载均衡和中间层服务故障转移的目的。Spring Cloud将Eureka集成在其子项目spring-cloud-netflix中来实现Spring Cloud的服务发现功能。在应用启动后,将会向Eureka Server发送心跳,默认周期为30s,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,将会从服务注册表中把服务节点移除(默认90s),Eureka用心跳方式对项目进行健康检查,确保注册在Eureka注册中心上的服务都是健康可用的。但后来Eureka 2.0停产了。

虽然Eureka 2.0停产了,但Eureka 1.0的项目依旧被积极维护。Eureka 1.0因为Netflix旗下其他项目还在使用,所以会一直更新下去。目前Eureka 1.0所提供的各种特殊功能虽然不多,但运行状况十分稳定。在Eureka 2.0停产后开始推荐使用Consul作为注册中心。注册中心Eureka、ZooKeeper、Consul并无较大差别。

Eureka主要功能如下。

(1)Eureka是一个服务发现工具。该体系结构主要是Client/Server,通常每个客户端都使用嵌入式SDK进行注册和发现服务。

(2)Eureka的健康检查主要依靠HTTP进行。服务在注册时有一个缓冲时间,在刚注册到Eureka时是无法使用的(虽然时间非常短暂)。

(3)Eureka提供了一个弱一致性的服务方案。当客户端向服务器注册时,该服务器将尝试复制服务到其他服务器,但又不提供任何保证。可能有很短暂的一瞬间Eureka用过去版本的陈旧代码提供服务。弱一致性架构模式使Eureka具备高度可伸缩性的集群管理能力。

2.Consul

Consul是一个服务网格(service mesh)解决方案,是一个分布式高可用的服务系统发现与配置工具、中间件,由HashiCorp公司研发。Consul以Go语言编写,用HTTP方式对外提供服务,支持多数据中心,支持K/V键值对存储,可以构建完整的服务网格。

Consul主要功能如下。

(1)服务发现:服务可以通过HTTP方式找到其他依赖Consul的服务。

(2)健康检查:检查服务是否正在正常响应。

(3)K/V存储:提供了简易的HTTP接口满足用户的动态配置。

(4)安全业务通信:生成和分发服务的TLS证书,以建立相互的TLS连接,允许服务相互通信。

(5)多数据中心:支持多数据中心。不用构建额外的抽象层就能扩展到多个区域。

Consul主要特点如下。

(1)Consul提供了健康检查能力、K/V存储和多数据中心意识。Consul要求每个数据中心都有一组服务器,以及每个客户端上的一个代理,类似Sideecar。Consul代理允许大多数应用程序在不知情的情况下,通过配置文件执行服务注册,并通过DNS或负载均衡进行发现。

(2)Consul提供了一致性保证,服务器使用RAFT协议,Consul提供的健康检查能力包括TCP、HTTP、Nagios/Sensu(网络监视工具)。

(3)Consul的客户端节点依靠Gossip Based节点采样技术,即Gossip协议,通过采样技术进行健康检查。Consul主动发现并发送请求给当前的Consul Leader,即非集中式心跳,而集中性心跳将会成为可伸缩架构的障碍。

(4)Consul提供了支持面向服务体系结构所需的工具包,包括服务发现、健康检查、服务锁定、K/V、多数据联合、事件系统和ACL。Consul试图将应用程序更改的内容降到最少,以避免通过SDK与本机进行集成。

(5)Consul使用Raft算法保证一致性,比复杂的Paxos算法更直接。Zookeeper采用Paxos,而Etcd采用Raft。

2.1.2 Consul的相关术语

node:节点,需要Consul注册发现或配置管理的服务器。

agent:Consul中的核心程序,以守护进程的方式在各节点运行,分为client和server两种启动模式。每个agent维护一套服务和注册发现及健康信息。

client:agent以client模式启动的节点。在该模式下,节点会采集相关信息,通过RPC方式向server发送。

server:agent以server模式启动的节点。一个数据中心至少包含1个server节点。也可以使用3个或5个server节点组建成集群,以保证高可用且不失效率。server节点参与Raft、维护成员信息、注册服务、健康检查等。

Consensus:共识协议,Consul用其协商选出leader。

Gossip:去中心化、容错并保证最终一致性的协议。因为Consul建立在Serf注册中心上,所以提供完整的Gossip协议。

members:成员,即对Consul成员的称呼。提供会员资格、故障检测和事件广播。

datacenter:数据中心,相当于整个Consul集群的名称,可以通过启动Consul server端来设置其名称。

2.1.3 Consul的安装

下载Consul的二进制文件,将其放到Linux系统中进行解压缩后即可直接运行。在Linux系统中执行consul命令可看到以下内容输出,用来验证该文件是否正常可用。