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 端部署为多数据中心,如上图,DATACENTER1DATACENTER2是相互独立的,他们之间通过 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 的架构。

posted @ 2021-08-22 14:17  Zioyi  阅读(343)  评论(0编辑  收藏  举报