Golang 语言微服务的服务发现组件 Consul 的系统架构介绍

简介: Golang 语言微服务的服务发现组件 Consul 的系统架构介绍

介绍

在上篇文章「Golang 语言微服务的服务注册与发现组件 Consul」中,我们已经介绍服务注册与发现是什么,Golang 语言微服务架构为什么需要使用服务注册与发现组件,Golang 语言开发的服务注册与发现组件 Consul 的主要特性和基本介绍。

本文我们介绍 Consul 的系统架构,读者朋友们阅读完本文可以了解 Consul 的工作原理。

02

Consul 术语

在介绍 Consul 系统架构之前,我准备先介绍几个 Consul 术语,目的是让读者朋友们更容易理解 Consul 系统架构的介绍内容。

  • Datacenter 数据中心
  • Cluster 集群
  • Server 服务器
  • Client 客户端
  • Agent 代理

Consul 原生支持多数据中心,数据中心中包含 Consul 集群,集群由客户端、服务器或客户端和服务器混合体的节点组成。

多个部署和运行 Agent 的节点组成 Consul Cluster,集群中包含 Client、Server 或 Client 和 Server 的混合体。

如果节点运行的 Agent 开启 Server 模式,那么该节点为 Server。

如果节点运行的 Agent 未开启 Server 模式,那么该节点为 Client。

Agent 是 Consul 集群中所有节点都运行的一个守护进程,负责维护成员身份信息、注册服务、运行健康检查、响应查询等。

03

Consul 系统架构

Consul 官方为我们提供了一张 Consul 系统架构图,在这张图中,我们可以看到包含两个数据中心,分别标记为 DATACENTER 1 和 DATACENTER 2。由此可见,Consul 原生支持多数据中心。

在每个数据中心中都包含一个 Consul 集群,DATACENTER 1 中的集群由 6 个部署并运行 Agent 的节点组成,其中三个是以 Server 模式运行的,另外三个是以 Client 模式运行的。

而 DATACENTER 2 中的集群由 3 个部署并运行 Agent 的节点组成,并且这三个节点都是以 Server 模式运行的。

由此可以得出一个结论,DATACENTER 中的集群可以是包含 Client 和 Server 的混合体,也可以是仅包含 Server 节点。

需要注意的是,每个 Consul 数据中心中的集群,官方建议 Server 模式运行的节点控制在 3 至 5 个,因为 3 至 5 个 Server 节点发生故障时,就可以提供一致性和可用性,并且 Server 节点是以 Raft 协议选举 Leader,Server 节点越多,Leader 选举越慢。而 Client 节点的数量没有限制,它是轻量级进程,我们甚至可以创建成千上万个 Client 节点。

Server 负责基于 Raft 协议选举 Leader,维护集群状态,响应 RPC 查询,与其他 DATACENTER 交换 WAN Gossip,将查询请求转发给 Leader 或远程 DATACENTER。

Client 是无状态的,负责将所有查询请求转发给 Server,而且 Client 不需要与其他 DATACENTER 交换 WAN Gossip,只需参与 LAN Gossip,资源开销很小,只消耗少量网络带宽。

04

总结

本文我们介绍 Consul 的系统架构,我们先从宏观上了解 Consul 的工作原理,也就是先抓住纲,然后再详细学习 Consul 的各个组件。

推荐阅读:

参考资料:

https://www.consul.io/docs/architecture 


目录
相关文章
|
1月前
|
监控 网络协议 Go
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
109646 118
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架(十六)Spring Boot及Dubbo zipkin 链路追踪组件埋点
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文第一部分为调用链、OpenTracing、Zipkin和Jeager的简述;第二部分为Spring Boot及Dubbo zipkin 链路追踪组件埋点
|
5月前
|
Cloud Native Go 微服务
golang 微服务中的断路器 hystrix
golang 微服务中的断路器 hystrix
|
5月前
|
负载均衡 算法 网络协议
golang 微服务的负载均衡
golang 微服务的负载均衡
|
5月前
|
Cloud Native 安全 Go
golang 微服务容错处理是如何做的?
golang 微服务容错处理是如何做的?
|
1月前
|
微服务
三个微服务注册中心eureka、consul、zookeeper之间的异同点以及CAP理论图
三个微服务注册中心eureka、consul、zookeeper之间的异同点以及CAP理论图
18 0
|
3月前
|
负载均衡 前端开发 Java
字节后端面试题(前端发送请求到后端的过程(MVC),网关gateway作用,怎么解决跨域,各微服务组件作用)
字节后端面试题(前端发送请求到后端的过程(MVC),网关gateway作用,怎么解决跨域,各微服务组件作用)
130 0
|
4月前
|
存储 JSON API
微服务框架 go-zero logx 日志组件剖析
微服务框架 go-zero logx 日志组件剖析
|
5月前
|
Cloud Native 测试技术 Go
golang 微服务中的断路器 hystrix 小案例
golang 微服务中的断路器 hystrix 小案例
|
7天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。