《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Consul/install/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1. 概述

Consul 是由 HashiCorp 基于 Go 语言实现的开源项目,可用于分布式系统的注册中心配置中心的功能。

旁白君:Consul 目前已经提供完整的 Service Mesh 服务网格的能力,不过我们可以暂时先忽略。更多的关注,将 Consul 作为注册中心和配置中心。

1.1 核心功能

对应官方文档地址:https://www.consul.io/intro

Consul 的核心功能如下:

服务发现(Service Discovery) :Consul 提供了通过 DNS 或者 HTT P接口的方式,来注册服务和发现服务。一些外部的服务通过 Consul,很容易的找到它所依赖的服务。

健康检测(Health Checking) :Consul 的 Client 提供了健康检查的机制,可以避免流量被转发到有故障的服务上。

注册中心 = ① + ②

Key/Value 存储(KV Store) :应用程序可以根据自己的需要使用 Consul 提供的 Key/Value 存储。Consul 提供了简单易用的 HTTP 接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能。

配置中心 = ③

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

1.2 整体架构

对应官方文档地址:https://www.consul.io/docs/internals/architecture

Consul 有两种角色

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

    友情提示:简单来说,Client 扮演的是代理的角色,例如说 Java 应用请求 Consul Client,然后 Consul Client 转发请求给 Consul Server。

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

一个多数据中心的 Consul Cluster 集群如下图所示:

多数据中心

注意,Consul Cluster 集群由部署和运行了 Consul Agent 的节点组成。而 Server 和 Client 只是 Agent 的两种角色,即上图中的每一个 Server 或是 Client 都是一个 Agent。

2. 单机部署

① 本小节,我们来参考《Consul 官方文档 —— Install》文章,来最小化部署一个 Consul 服务,适合演示学习测试环境之用。Consul 目前提供三种安装方式,如下图所示:

安装方式

这里,我们将采用方式一,使用官方已经编译好的二进制程序。我们可以点击页面上的 download 连接,进入 Consul 二进制程序的下载页。如下图所示:

下载

选择胖友的操作系统,然后点击「Download」按钮进行下载。

友情提示:艿艿本地使用的是 MacOS 操作系统。因为 Consul 是 Go 语言编译后的二进制文件,所以下面的使用过程基本是没有任何差别的噢!

② 下载完成,我们会获得一个压缩包。如下图所示:

压缩包

双击进行解压,会获得 Consul 的二进制程序。操作如下命令,进行启动:

友情提示:如果是 Windows 操作系统,记得使用 cmd 控制台噢。

# 打印一下,可以忽略
$ ls -ls
MacBook-Pro-8:Consul yunai$ ls -lh
-rwxr-xr-x@ 1 yunai staff 103M Jun 11 04:08 consul

# 开发者模式启动一个 Consul Agent
$ ./consul agent -dev

启动过程

③ 启动完成后,我们使用浏览器访问 http://127.0.0.1:8500 地址,可以进入 Consul 的运维界面。如下图所示:

Consul 运维界面

颜值还是不错的,跟艿艿有的一拼哈!

3. 集群部署

在生产环境下,我们需要部署 Consul Cluster 集群,以保证其的可用性。具体的部署方法,胖友可以参考《Consul 入门指南 —— 建立集群》文章。

默默偷懒的艿艿,重点先去写应用如何接入 Consul 实现注册发现、分布式配置等等功能哈!

4. 应用接入

Spring Cloud Consul 项目,将 Consul 接入 Spring Cloud 体系中。

① 通过 spring-cloud-consul-discovery 项目,实现服务的注册于发现,可见 《芋道 Spring Cloud 注册中心 Consul 入门》 对应 labx-27

② 通过 spring-cloud-consul-config 项目,实现分布式配置,可见 《芋道 Spring Cloud 配置中心 Consul 入门》 对应 labx-28

③ 通过 spring-cloud-consul-binder 项目,实现消息总线,可见 《芋道 Spring Cloud 事件总线 Bus Consul 入门》 对应 labx-29-spring-cloud-consul-bus

666. 彩蛋

至此,我们已经完成了对 Consul 的基本学习。在《Consul 官网文档 —— Consul vs. Other Software》文章中,详细对比了 Consul 与 ZooKeeper、Etcd、Eureka 等等组件的差异点。

如下是它们集成到 Spring Cloud 生态体系中的对比情况:

Feature Eureka Consul Zookeeper Etcd
服务健康检查 心跳检测 服务状态,内存,硬盘等 (弱)长连接,keepalive 连接心跳
多数据中心 支持
kv 存储服务 支持 支持 支持
一致性 raft paxos raft
cap ap cp cp cp
使用接口(多语言能力) http 支持 http 和 dns tcp http/grpc
watch 支持 支持 long polling/大部分增量 全量/支持long polling 支持 支持 long polling
自身监控 metrics metrics metrics
安全 acl /https acl https 支持(弱)
spring cloud 集成 已支持(维护阶段) 已支持 已支持 已支持(版本过老)
文章目录
  1. 1. 1. 概述
    1. 1.1. 1.1 核心功能
    2. 1.2. 1.2 整体架构
  2. 2. 2. 单机部署
  3. 3. 3. 集群部署
  4. 4. 4. 应用接入
  5. 5. 666. 彩蛋