在 Spring Cloud 体系中,几乎每个角色都会有两个以上的产品提供选择,比如在注册中心有:Eureka、Consul、zookeeper、etcd 等;网关的产品有 Zuul、Spring Cloud Gateway 等。在注册中心产品中,最常使用的是 Eureka 和 Consul,两者各有特点,企业可以根据自述项目情况来选择。

前面给大家详细介绍了 Eureka ,本节给大家介绍 Consul 的使用。

什么是Consul

Consul 是 HashiCorp 公司推出的开源产品,用于实现分布式系统的服务发现、服务隔离、服务配置,这些功能中的每一个都可以根据需要单独使用,也可以同时使用所有功能。Consul 官网目前主要推 Consul 在服务网格中的使用。

与其它分布式服务注册与发现的方案相比,Consul 的方案更“一站式”——内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具。Consul 本身使用 go 语言开发,具有跨平台、运行高效等特点,也非常方便和 Docker 配合使用。

Consul 的主要特点有:
Service Discovery : 服务注册与发现,Consul 的客户端可以做为一个服务注册到 Consul,也可以通过 Consul 来查找特定的服务提供者,并且根据提供的信息进行调用。

Health Checking: Consul 客户端会定期发送一些健康检查数据和服务端进行通讯,判断客户端的状态、内存使用情况是否正常,用来监控整个集群的状态,防止服务转发到故障的服务上面。

KV Store: Consul 还提供了一个容易使用的键值存储。这可以用来保持动态配置,协助服务协调、建立 Leader 选举,以及开发者想构造的其它一些事务。

Secure Service Communication: Consul 可以为服务生成分布式的 TLS 证书,以建立相互的 TLS 连接。 可以使用 intentions 定义允许哪些服务进行通信。 可以使用 intentions 轻松管理服务隔离,而不是使用复杂的网络拓扑和静态防火墙规则。

Multi Datacenter: Consul 支持开箱即用的多数据中心,这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

Consul 角色
Server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其它数据中心通讯。 每个数据中心的 Server 数量推荐为 3 个或是 5 个。

Client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。

Consul 旨在对 DevOps 社区和应用程序开发人员友好,使其成为现代、弹性基础架构的理想选择。

使用Consul 的优势

使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接。相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft。

支持多数据中心,内外网的服务采用不同的端口进行监听。多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持。

支持健康检查。 etcd 不提供此功能。

支持 http 和 dns 协议接口。 zookeeper 的集成较为复杂, etcd 只支持 http 协议。

官方提供 Web 管理界面, etcd 无此功能。

Consul 保持了 CAP 中的 CP,保持了强一致性和分区容错性。

Consul 支持 Http\gRPC\DNS 多种访问方式。

Consul 的调用过程

首先我们根据一张图来了解一下 Consul 服务调用过程:

1、当 Producer 启动的时候,会向 Consul 发送一个 post 请求,告诉 Consul 自己的 IP 和 Port;

2、Consul 接收到 Producer 的注册后,每隔 10s(默认)会向 Producer 发送一个健康检查的请求,检验 Producer 是否健康;

3、当 Consumer 发送 GET 方式请求 /api/address 到 Producer 时,会先从 Consul 中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到 Producer 的 IP 和 Port 后再发送 GET 方式请求 /api/address;

4、该临时表每隔 10s 会更新,只包含有通过了健康检查的 Producer。

Spring Cloud Consul 项目是针对 Consul 的服务治理实现。Consul 是一个分布式高可用的系统,它包含多个组件,但是作为一个整体,在微服务架构中,为我们的基础设施提供服务发现和服务配置的工具。

Consul 和 eureka的对比

我们先来通过一个表格做简单对比

Feature Euerka Consul
服务健康检查 可配支持 服务状态,内存,硬盘等
多数据中心 支持
kv 存储服务 支持
一致性 raft
cap ap cp
使用接口(多语言能力) http(sidecar) 支持 http 和 dns
watch 支持 支持 long polling/大部分增量 全量/支持long polling
自身监控 metrics metrics
安全 acl /https
编程语言 Java go
Spring Cloud 集成 已支持 已支持

通过对比可以得知, Consul 功能更强大,Euerka 更容易使用。

Consul 强一致性©带来的是:

服务注册相比 Eureka 会稍慢一些。因为 Consul 的 raft 协议要求必须过半数的节点都写入成功才认为注册成功,。Leader 挂掉时,重新选举期间整个 Consul 不可用。保证了强一致性但牺牲了可用性。

Consul 强烈的一致性意味着它可以作为领导选举和集群协调的锁定服务。

Eureka 保证高可用(A)和最终一致性:

服务注册相对要快,因为不需要等注册信息 replicate 到其它节点,也不保证注册信息是否 replicate 成功。当数据出现不一致时,虽然 A, B 上的注册信息不完全相同,但每个 Eureka 节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求 A 查不到,但请求 B 就能查到。如此保证了可用性但牺牲了一致性。

安装Consul

Consul 不同于 Eureka 是由 go 语言开发而成,因此需要我们单独来安装。

打开 Consul官网根据不同的操作系统选择最新的 Consul 版本,我们这里以 Windows 64 操作系统为例,可以看出 Consul 目前的最新版本为 1.4.4


下载下来是一个 consul_1.4.4_windows_amd64.zip 的压缩包,解压是一个 consul.exe 的执行文件。

cd 到对应的目录下,使用 cmd 启动 Consul:

cd D:\Common Files\consul
#cmd启动: consul agent -dev # -dev表示开发模式运行,另外还有-server表示服务模式运行

为了方便启动,可以在同级目录下创建一个 run.bat 脚本来启动,脚本内容如下:

consul agent -dev pause

下次启动的时候直接双击 run.bat 文件即可;当然也可以把 consul 的 exe 文件路径加入到本机的 path 路径下,这样后期只需要在 cmd 命令行下运行

执行命令后,命令行会输出如下信息:

启动成功之后访问:localhost:8500,就可以看到Consul的管理界面

Consul 的 Web 管理界面有一些菜单,我们这里做一下简单的介绍:

Services,管理界面的默认页面,用来展示注册到 Consul 的服务,启动后默认会有一个 consul 服务,也就是它本身。

Nodes,在 Services 界面双击服务名就会来到 Services 对于的 Nodes 界面,Services 是按照服务的抽象来展示的,Nodes 展示的是此服务的具体节点信息。比如启动了两个订单服务实例,Services 界面会出现一个订单服务,Nodes 界面会展示两个订单服务的节点。

Key/Value ,如果有用到 Key/Value 存储,可以在界面进行配置、查询。

ACL,全称 Access Control List,为访问控制列表的展示信息。

Intentions,可以在页面配置请求权限。

当我们看到这个页面后,也就意味着 Consul 已经安装成功了。

总结

本节为大家介绍了注册中心的另外一个产品:Consul。介绍了 Consul 的特点、优势,以及和 Eureka 对比有什么不同的特性,最后为大家展示了如何在 Windows 下安装一个 Consul 服务。下节为大家介绍 Consul 的架构原理和实践。

Consul 注册中心介绍相关推荐

  1. SpringCloud Consul注册中心介绍及配置使用

    概述:Consul 是HashiCorp 公司推出的一款基于Go语言编写的用于实现分布式系统服务发现与配置的一款开源工具.Consul主要功能包含服务注册与发现.分布式一致性协议(Raft算法)实现. ...

  2. 容器注册到consul_Spring Cloud 系列之 Consul 注册中心(一)

    Netflix Eureka 2.X https://github.com/Netflix/eureka/wiki 官方宣告停止开发,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka ...

  3. consul java 注册中心_Spring Cloud微服务架构实战之Consul注册中心02:consul入门案例...

    获取springcloud实战项目详细视频教程,请留言联系. 1.创建项目 我们创建聚合项目来讲解 Consul,首先创建一个 pom 父工程. 2.添加依赖 pom.xml 4.0.0 com.ex ...

  4. Consul注册中心注册的服务总是红叉 (All service checks failing)

    Consul注册中心注册的服务总是红叉 (All service checks failing) Consul注册中心注册的服务总是红叉 (All service checks failing) 因为 ...

  5. 【五】、Consul注册中心

    1.什么是Consul? Consul是一个服务网格(微服务间的TCP/IP,负责服务之间的网络调用.限流.熔断和监控)解决方案,它是一个个分布式,高度可用的系统,而且开发使用都很简单.它提供了一个功 ...

  6. SpringCloud(三) Eureka注册中心介绍以及单机版搭建

    一.Eureka 介绍 Spring Cloud Eureka 是 Spring Cloud Netfix微服务套件中的一部分,它基于 Netfix Eureka 做了二次封装,主要负责完成微服务架构 ...

  7. Nacos注册中心介绍

    Nacos 基本概念 Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了 ...

  8. dubbo注册中心介绍

    作者:微子Lee链接:https://www.jianshu.com/p/2f4cfb6ed048 Dubbo的注册中心有好多种,包括Multicast.Zookeeper.Redis.Simple等 ...

  9. 【学习笔记】consul注册中心,服务注册、服务发现、服务监控笔记

    consul api kv - Key/Value存储 agent - Agent控制,一般用来服务注册和检查注册 catalog - 管理nodes和services health - 管理健康监测 ...

最新文章

  1. 二极管7种应用电路详解之六
  2. We PE U盘安装win7系统
  3. 学了python 以后能干啥-学python语言以后能干嘛?
  4. Java基本语法——(用于日后复习)
  5. 【POJ - 2762】Going from u to v or from v to u?(Tarjan缩点,树形dp 或 拓扑排序,欧拉图相关)
  6. 高性能滚动 scroll 及页面渲染优化
  7. 《linux核心应用命令速查》连载十二:top:显示进程
  8. 微分方程和差分方程的区别与联系
  9. 不能连接Formula One控件,请检查系统是否已安装或已注册该控件!
  10. COLOR_CODE
  11. android如何使用代码截屏,android实现截屏功能代码
  12. linux下cpp文件,linux怎么编译cpp文件?
  13. PyQt4转PyQt5心得
  14. 软文营销如何自我激励创造巨大价值
  15. SpringMVC工作原理 侵立删
  16. 33省市出台区块链专项政策,有地方拿户口、百万奖金抢人
  17. table标签的介绍
  18. Win10打开图片需要使用新应用以打开此ms-paint链接是什么意思?
  19. 虚拟机中Ubuntu设置共享文件夹
  20. SE2431L-R高性能 完全集成的RF前端模块 ZigBee 低功耗 蓝牙1.0

热门文章

  1. Python 多线程 threading.Thread 同时最多有 n 个线程
  2. Mathematica绘制图形
  3. openCV图片倾斜矫正(java版)
  4. MySQL数据库id主键或密码使用MD5加密
  5. 程序退出,段错误segment default问题定位
  6. 战火与秩序迁城显示服务器忙,战火与秩序怎么玩(战火与秩序怎么迁城到联盟攻略解读)...
  7. onload和DOMContentLoaded事件
  8. 上班假装很忙,下班装逼唬妹子的几个神器,人人都能用
  9. C盘满了,如何清理?
  10. 刺激战场灵敏度怎么调压枪最稳:花了4个小时调的灵敏度,适合所有段位