芋道 Consul 极简入门
总阅读量:2570次
摘要: 原创出处 http://www.iocoder.cn/Consul/install/ 「芋道源码」欢迎转载,保留摘要,谢谢!
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 整体架构
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 控制台噢。
# 打印一下,可以忽略 |
③ 启动完成后,我们使用浏览器访问 http://127.0.0.1:8500 地址,可以进入 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 集成 | 已支持(维护阶段) | 已支持 | 已支持 | 已支持(版本过老) |