Consul 入门-初识
背景
现状:单体架构逐渐被微服务架构所替代,原本两个功能模被拆分成了两个服务。原本两个模块块间的通信只需要函数调用
就能够实现,现在却做不到了,因为它们不在同一个进程中,甚至两个服务都可能部署到不同的机房。
通信成为了迈向微服务大门的第一道难关:
- ServiceA 如何知道 ServiceB 在哪里
- ServiceB 可能会有多个副本提供服务,其中有些可能会挂掉,如何避免访问到“不健康的”的 ServiceB
- 如何控制只有 ServiceA 可以访问到 ServiceB
Consul 是什么
Consul 是一种服务网格解决方案,提供具有服务发现、配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。Consul 提供的核心功能:
-
服务发现:服务启动时将服务相关信息(地址、端口、配置、tag等)注册到 Consul 中,由它统一管理,当需要访问其他服务时向 Consul 查询所依赖服务的相关信息。查询方式支持 HTTP、RPC、DNS等。
-
健康检查:在将服务注册到 Consule 时可以配置健康检查,Consul 会对其定期进行检查,如果检查失败,就会认为该服务不可用,当有其他服务过来查询这个服务的地址时,返回时可以把不可用的地址剔除(注:同一个服务一般会有多个服务/地址)。
-
安全服务通信:Consul 可以为服务生成和分发 TLS 证书,以建立相互的 TLS 连接。Intentions 可用于定义允许哪些服务进行通信。通过实时地更改Intentions 来管理服务服务分段,控制服务间的是非否可访问。
-
KV存储:Cousul 可以用来做简单的键值存储场景,比如:动态配置、功能标记、协调、领导者选举等。提供简单的 HTTP API。
-
多数据中心:Consul 支持开箱即用的多个数据中心,用以支持高可用的场景需要。
Consul 架构
一般会将 Server 端部署为多数据中心,如上图,DATACENTER1
和DATACENTER2
是相互独立的,他们之间通过 WAN GOSSIP 进行报文交互。单个 datacenter 中, 节点被划分成两种颜色, 红色的 server, 紫色的 client, 他们之间通过 RPC 进行通信(业务数据), 除此之外, Client 和 Server 之间通过还有一条 LAN Gosssip 进行通信,比如,当 Server 节点增加,或者 down 机后,Client 可以获取对应的 Server列表,去除或者增加 Server 列表。
Consul 是 Client/Server 架构,由同一套代码运行, 启动时通过参数-server=false
来决定运行 Server 模式还是 Agent 模式。
Server 模式能力
- 处理查询
- 存储注册信息
- 参与共识仲裁、选取领导人
- 维护周边(LAN/WAN) 节点之间的关系
Client 模式负责
- 通过该节点注册到 Consul 微服务的健康检查
- 将客户端的注册请求和查询转换为 server 的 RPC 请求
- 维护周边各节点(LAN/WAN) 的关系
- 缓存来自服务器的数据,以提高性能和可靠性
结束语
本文对 Consul 进行了理论层面的介绍,Consul 出现的背景、Consul 支持的功能以及 Consul 的架构。