此文章主要讲解 springcloud 中注册中心 Eureka 替代方案 Consul 的相关知识。
Eureka 闭源的影响
Eureka 闭源
- 在 Eureka 的 GitHub 上,宣布 Eureka 2.x 闭源。这意味着如果开发者继续使用 2.x 分支上现有工作 repo 的一部分发布的代码库和组件,则自负风险。
Eureka 的替换方案
Zookeeper
- Zookeeper 是一个分布式的,开放源代码的分布式应用程序协调服务,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
Consul
Consul 是近几年比较流行的服务发现工具。
Consul 的三个主要应用场景:服务发现、服务隔离、服务配置。
Nacos
- Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据以及流量管理。Nacos 帮助您更敏捷和容易的构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
Consul 简介
概述
- Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现和配置。和其他分布式服务注册和发现的方案,Consul 的方案更“一站式”,内置了服务注册和发现框架、分布式一致性协议实现、健康检查、key/value 存储、多数据中心方案,不再需要依赖其他工具(比如 Zookeeper 等)。使用起来也比较简单。Consul 使用 Go 语言编写,因此具有天然移植性(支持 Linux、Windows 和 Mac OS X),安装包仅包含一个可执行的文件,方便部署,和 Docker 等轻量级容器可以无缝配合。
Consul 的优势
采用 Raft 算法来保证一致性,比服务的 Paxos 算法更直接。Zookeeper 采用的是 Paxos 算法,而 Consul 以及 etcd 采用的是 Raft 算法。
支持多数据中心,内外网的服务采用不同的端口进行监听。多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟、分片等情况。Zookeeper 和 etcd 均不提供多数据中心功能的支持。
支持健康检查。etcd 不提供此功能。
支持 http 和 dns 协议接口。Zookeeper 的集成较为复杂,etcd 只支持 http 协议。
官方提供 web 管理界面。etcd 无此功能。
Consul 的特性
服务发现。
健康检查。
key/value 存储。
多数据中心。
Consul 和 Eureka 的区别
一致性
Consul:强一致性(CP):
服务注册相比 Eureka 会稍慢一些。因为 Consul 的 Raft 协议要求必须过半的节点都写入成功才认为注册成功。
Leader 挂掉后,重新选举期间整个 Consul 不可用。保证了强一致性,但牺牲了可用性。
Eureka:高可用性和最终一致性(AP):
服务注册相对要快,因为不需要等注册信息复制到其他节点,也不保证注册信息是否复制成功。
当数据出现不一致的时候,虽然 A,B 上的注册信息不完全相同,但是每个 Eureka 节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求 A 查不到,但请求 B 就能查到。如果保证了可用性但牺牲了一致性。
开发语言和使用
Eureka 是 Servlet 程序,跑在 Servlet 容器中。
Consul 是 Go 语言编写而言的,安装启动即可。
官网
官网地址: https://www.consul.io/intro
中文地址: https://www.springcloud.cc/spring-cloud-consul.html
consul 也是服务注册中心的一个实现,是由 go 语言写的。
功能:

Consul 的下载和安装
官网下载
Consul 不同于 Eureka 需要单独安装,访问官网可以下载 Consul 的最新版本,目前使用的是 Consul 1.8.3。根据不同的操作系统类型选择不同的安装包,Consul 支持所有主流操作系统。
官网安装说明
官方视频安装教程:https://learn.hashicorp.com/tutorials/consul/get-started-install
Windows 系统安装
下载地址:https://www.consul.io/downloads.html
下载解压后,只有一个 exe 文件,实际上是不用安装的,在 exe 文件所在目录打开 dos 窗口使用即可。
使用开发模式启动:consul agent -dev
到浏览器去访问:http://localhost:8500
这样就安装配置完成了。
Linux 系统安装
下载 Consul
1 | # 从官网下载consul |
启动 Consul
1 | # 以开发者模式快速启动,-client指定客户端可以访问的IP地址 |
启动之后,自测访问 http://localhost:8500 即可以看到 Consul 的管理界面
docker 安装 consul
可以使用容器技术 docker 安装,拉取镜像,具体自行查询百度,网上教程很多。
Consul 的基本使用
Consul 支持健康检查,并提供了 HTTP 和 DNS 调用的API 接口来完成服务的注册,服务发现以及 KV 存储这些功能。
例如在 VMWare 中的 Linux 的 IP 地址是 192.168.32.100。
服务注册和发现
注册服务
通过 postman 发送 PUT 请求到 http://192.168.32.100:8500/v1/catalog/register 地址可以完成服务注册。
1 | { |
服务查询
通过 postman 发送 GET 请求到 http://192.168.32.100:8500/v1/catalog/services 地址获取所有的服务列表。
通过 postman 发送 GET 请求到 http://192.168.32.100:8500/v1/catalog/service/mysql 获取具体的服务。
服务删除
通过 postman 发送 PUT 请求到 http://192.168.32.100:8500/v1/catalog/deregister 删除服务。
Consul 的 KV 存储
- 可以参照 Consul 提供的 KV 存储的 API 完成基于 Consul 的数据存储。
含义 | 请求路径 | 请求方式 |
---|---|---|
查看 key | v1/kv/:key | GET |
保存或更新 | v1/kv/:key | put |
删除 | /v1/kv/:key | DELETE |
key 值中可以带/,可以看做是不同的目录结构。
value 的值经过了 base64 编码,获取到数据后需要经过 base64 解码才能获取到原始值。数据不能大于 521kb。
不同的数据中心的 kv 存储系统是独立的,使用 dc=?参数指定。
工程搭建
提供者
新建模块
cloud-providerconsul-payment8006
POM 文件
1 |
|
YML 文件
1 | # 端口号 |
主启动类
1 |
|
Controller
1 |
|
验证测试
首先保证 consul 是启动的,再启动 8006
访问 http://localhost:8500 查看,注册成功!
消费者
新建模块
cloud-consumerconsul-order80
POM 文件
1 |
|
YML 文件
1 | server: |
主启动类
1 |
|
配置类
1 |
|
Controller
1 |
|
验证测试
- 启动 consul
- 启动提供者 8006
- 启动消费者 80
- 访问测试
访问 http://localhost:8500 ,可以看到消费者成功注册进来。
消费者访问 http://localhost/consumer/payment/consul,测试成功!
总结
三个注册中心的异同点
组件名 | 语言 | CAP | 服务健康检查 | 对外暴露接口 | Spring Cloud 集成 |
---|---|---|---|---|---|
Eureka | Java | AP | 可配支持 | HTTP | 已集成 |
Consul | Go | CP | 支持 | HTTP/DNS | 已集成 |
Zookeeper | Java | CP | 支持 | 客户端 | 已集成 |
AP:
当网络分区出现后,为了保证可用性,系统 B可以返回旧值
,保证系统的可用性。
结论:违背了一致性C的要求,只满足可用性和分区容错,即AP
CP:
当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性
结论:违背了可用性A的要求,只满足一致性和分区容错,即CP
Consul 搭建集群
详情见文章:https://www.yuque.com/sunxiaping/yg511q/ruo5uv#904e5ea1
发布时间: 2021-01-16
最后更新: 2024-06-24
本文标题: SpringCloud Alibaba入门到精通(四)- 服务注册中心之Eureka替代方案Consul(不推荐)
本文链接: https://blog-yilia.xiaojingge.com/posts/6d5ce0ee.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
