我们知道 Eureka 2.X 遇到困难停止开发了,所以我们需要寻找其他的替代技术替代Eureka,这一小 节我们就讲解一个新的组件Consul。
一、Consul介绍
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实 现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。 使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和 Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。
我们来对比下当前服务注册与发现的主流技术:
对比项 | euerka | Consul | zookeeper | etcd |
服务健康检查 | 可配支持 | 服务状态,内 存,硬盘等 | (弱)长连接, keepalive | 连接心跳 |
多数据中心 | — | 支持 | — | — |
kv 存储服务 | — | 支持 | 支持 | 支持 |
一致性 | — | raft | paxos | raft |
cap | ap | cp | cp | cp |
使用接口(多语 言能力) | http | 支持 http 和 dns | 客户端 | http/grpc |
watch 支持 | 支持 long polling/ 大部分增量 | 全量/支持long polling | 支持 | 支持 long polling |
自身监控 | metrics | metrics | — | metrics |
安全 | — | acl /https | acl | https 支持 (弱) |
spring cloud 集成 | 已支持 | 已支持 | 已支持 | 已支持 |
1.1 consul特性
- 服务发现
- 健康检查
- key-value存储
- 多数据中心
- 社区活跃
1.2consul的优势
-
使用 Raft算法来保证一致性,比复杂的 Paxos算法更直接.相比较而言,zookeeper采用的是 Paxos, 而 etcd 使用的则是 Raft。
-
支持多数据中心,内外网的服务采用不同的端口进行监听。多数据中心集群可以避免单数据中心 的单点故障,而其部署则需要考虑网络延迟,分片等情况等。 zookeeper和 etcd 均不提供多数据中 心功能的支持。
-
支持健康检查。 etcd 不提供此功能
-
支持http和 dns协议接口。 zookeeper的集成较为复杂,etcd 只支持 http协议。
-
官方提供 web 管理界面,etcd 无此功能。
-
综合比较,Consul作为服务注册和配置管理的新星,比较值得关注和研究。
1.3 consul的角色
- client 客户端,无状态,将 HTTP和 DNS 接口请求转发给局域网内的服务端集群。
-
server: 服务端,保存配置信息,高可用集群,在局域网内与本地客户端通讯,通过广域网与其它数据中心通讯。每个数据中心的 server数量推荐为3个或是5个。
二、Consul工作原理
Consul在项目中发挥服务注册与发现的功能,我们讲解下它的工作原理:
1.当Producer启动的时候,会向Consu1发送一个post请求,并向Consu1传输自己的IP和Port。
2.Consul接收到Producer的注册后,每隔10s(默认)会向Producer发送一个健康检查的请求,检验 Producer是否健康。
3.当Consumer以Http的方式向Producer发起请求,会先从Consu1中拿到一个存储服务IP和Port的临时表,从表中拿到Producer的IP和Port后再发送请求。
4.该临时表每隔10s会更新,只包含有通过了健康检查的Producer。
-
2.1 consul的安装
- Consul 不同于Eureka需要单独安装,访问Consul 官网下载 Consul 的最新版本,当前最新版本是 1.9.0,我们使用consu] 1.9.0 windows amd64 版本。
- 下载地址:Install | Consul | HashiCorp Developer
- 历史下载版本: Consul Versions | HashiCorp Releases
- 下载地址:Install | Consul | HashiCorp Developer
- Consul 不同于Eureka需要单独安装,访问Consul 官网下载 Consul 的最新版本,当前最新版本是 1.9.0,我们使用consu] 1.9.0 windows amd64 版本。
下载后的文件是consul1_1.9.0_windows_amd64.zip, 我们解压这个文件,里面有个文件 consul.exe, 我们将该文件所在目录添加到环境变量path 中。
启动consul :dos 命令行执行如下命令:
consul agent -dev
控制台访问 :http://localhost:8500/
- Services: 服务信息。
-
Nodes: 节点信息, Consul 支持集群。
-
Key/Value: 存储的动态配置信息。
-
ACL:权限信息。
-
Intentions ; 通过命令的方式对consul进行管理。
三、在项目中使用consul
项目中要想使用Consul作为服务注册中心,只需要引入如下依赖包,在启动类上添加
@EnableDiscoveryclient 注解,并在application.yml 中添加Consul 服务地址即可:
3.1添加依赖
在项目中添加依赖包:
<!--consul-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId><version>2.2.1.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.2.10.RELEASE</version>
</dependency>
3.2在启动类中添加 @EnableDiscoveryclient 注解
3.3在applacation.yaml中添加consul的配置信息
配置如下:
spring:cloud:#Consul配置consul:host: 127.0.0.1port: 8500discovery:#注册到Consul中的服务名字service-name: ${spring.application.name}prefer-ip-address: true
项目启动后,consul服务数据如下: