Consul 基本概念、内部原理

article/2025/9/20 15:25:51

1.什么是Consul?

Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。 这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格。 Consul需要数据平面并支持代理和本机集成模型。 Consul附带一个简单的内置代理,因此一切都可以开箱即用,但也支持第三方代理集成,如Envoy。
Consul 提供的关键功能:

  • 服务发现:Consul的客户端可以注册服务,例如api或mysql,其他客户端可以使用Consul来发现给定服务的提供者。使用DNS或HTTP,应用程序可以轻松找到它们所依赖的服务。
  • 运行状况检查:Consul客户端可以提供任意数量的运行状况检查,这些检查与给定服务(“是Web服务器返回200 OK”)或本地节点(“内存利用率低于90%”)相关联。运营人员可以使用此信息来监控群集运行状况,服务发现组件使用此信息将流量路由到远离不健康主机的地方。
  • KV 存储:应用程序可以将Consul的层级键/值存储用于任何目的,包括动态配置,功能标记,协调,领导者选举等。简单的HTTP API使其易于使用。
  • 安全服务通信:Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。Intentions(意图)可用于定义允许哪些服务进行通信。可以使用可以实时更改的意图轻松管理服务分段,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心:Consul支持多个数据中心。这意味着Consul的用户不必担心构建额外的抽象层以扩展到多个区域。

2. Consul 的架构

2.1 Consul 中的术语
在描述架构之前,我们提供术语表以帮助澄清正在讨论的内容:

  • 代理(agent) - 代理是Consul集群的每个成员上长时间运行的守护程序。它是通过运行consul agent 命令来启动的。代理能够以客户端或服务器模式运行。由于所有节点都必须运行代理,因此将节点称为客户端或服务器更简单,但代理还有其他实例。所有代理都可以运行DNS或HTTP接口,并负责运行检查并保持服务同步。
  • 客户端模式(client agent) - 客户端是将所有RPC调用转发到服务器的代理。客户端是相对无状态的。客户端执行的唯一后台活动是参与LAN gossip pool(局域网 Gossip池)。这会花费非常非常小的资源并且仅消耗少量的网络带宽。
  • 服务器模式(server agent) - 服务器是具有扩展责任的代理,包括参与Raft仲裁,维护群集状态,响应RPC查询,与其他数据中心交换WAN Gossip(广域网Gossip)以及将查询转发给领导者或远程数据中心。
  • 数据中心 (datacenter)- 虽然数据中心的定义似乎很明显,但必须考虑细微的细节。例如,在EC2中,多个可用区域是否被视为包含单个数据中心?我们将数据中心定义为专用,低延迟和高带宽的网络环境。这排除了通过公共互联网的通信,但出于我们的目的,单个EC2区域内的多个可用区域将被视为单个数据中心的一部分。
  • 共识 (consensus)- 在我们的文档中使用时,我们使用共识来表示对当选领导者的协议以及对交易顺序的协议。由于这些事务应用于有限状态机,因此我们对共识的定义意味着复制状态机的一致性。维基百科上更详细地描述了共识,此处描述了我们的实现。
  • Gossip - Consul建立在Serf之上,它提供了一个完整的gossip 协议(八卦协议Gossip协议),用于多种用途。 Serf提供成员维护,故障检测和事件广播。我们对这些的使用在八卦文档中有更多描述。Gossip参与随机的节点到节点的通信,主要是通过UDP。
  • LAN Gossip - 指局域网八卦池,其中包含位于同一局域网或数据中心的节点。
  • WAN Gossip - 指仅包含服务器(servers)的WAN八卦池。这些服务器主要位于不同的数据中心,通常通过互联网或广域网进行通信。
  • RPC - 远程过程调用。这是一种允许客户端发出服务器请求的请求/响应机制。

2.2 一万英尺看Consul

在这里插入图片描述
让我们分解这个图像并描述每一块。首先,我们可以看到有两个数据中心,标记为“one”和“two”。 Consul为多个数据中心提供一流的支持,并期望这是常见的情况。

在每个数据中心内,我们都有客户端和服务端的混合体。预计有三到五台服务端。这在失败和性能的可用性之间取得平衡,因为随着更多机器的添加,共识逐渐变慢。但是,客户端数量没有限制,可以轻松扩展到数千或数万。

数据中心中的所有节点都参与八卦协议。这意味着有一个八卦池,其中包含给定数据中心的所有节点。这有几个目的:首先,不需要为客户端配置服务器的地址;发现是自动完成的。其次,检测节点故障的工作不是放在服务器上,而是分布式的。这使得故障检测比天真的心跳方案更具可扩展性。第三,它被用作消息传递层,用于在诸如领导者选举等重要事件发生时进行通知。

每个数据中心中的服务器都是单个Raft对等集的一部分。这意味着他们共同选举一个leader,一个具有额外职责的选定服务器。领导者负责处理所有查询和交易。作为共识协议的一部分,还必须将事务复制到所有对等体。由于此要求,当非领导者服务器收到RPC请求时,它会将其转发给群集leader。

服务器节点作为WAN八卦池的一部分运行。此池与LAN池不同,因为它针对较高的Internet延迟进行了优化,并且预计仅包含其他Consul服务器节点。此池的目的是允许数据中心以低触摸方式(low-touch manner)发现彼此。在线创建新的数据中心就像加入现有的WAN八卦池一样简单。由于服务器都在此池中运行,因此它还支持跨数据中心请求。当服务器收到对不同数据中心的请求时,它会将其转发到正确数据中心的随机服务器。然后该服务器可以转发给本地领导者。

这导致数据中心之间的耦合非常低,但由于故障检测,连接缓存和多路复用,跨数据中心请求相对快速且可靠。

通常,不会在不同的Consul数据中心之间复制数据。当对另一个数据中心中的资源发出请求时,本地Consul服务器会将RPC请求转发给该资源的远程Consul服务器并返回结果。如果远程数据中心不可用,那么这些资源也将不可用,但这不会影响本地数据中心。在某些特殊情况下,可以复制有限的数据子集,例如使用Consul的内置ACL复制功能,或者像consul-replicate这样的外部工具。

在某些地方,客户端代理可以缓存来自服务器的数据,以使其在本地可用,以提高性能和可靠性。示例包括连接证书Connect certificates和意图intentions ,允许客户端代理在没有往返服务器的情况下做出有关入站连接请求的本地决策。某些API端点还支持可选的结果缓存。这有助于提高可靠性,因为本地代理可以继续响应某些查询,例如服务发现或从缓存连接授权,即使与服务器的连接中断或服务器暂时不可用。

3. Gossip协议和Raft协议

要想理解Consul的原理,你是绕不过Gossip协议和Raft协议的。

3.1 八卦协议Gossip Protocol

3.1.1 什么是Gossip 协议
Gossip算法如其名,灵感来自办公室八卦,只要一个人八卦一下,在有限的时间内所有的人都会知道该八卦的信息,这种方式也与病毒传播类似,因此Gossip有众多的别名“闲话算法”、“疫情传播算法”、“病毒感染算法”、“谣言传播算法”。更多,可参见这篇博文

3.1.2 Consul中的八卦协议
Consul使用两个不同的八卦池。我们将每个池分别称为LAN或WAN池。

每个数据中心Consul都有一个LAN八卦池,包含数据中心的所有成员,包括客户端和服务器。 LAN池用于一些目的。成员资格信息允许客户端自动发现服务器,减少所需的配置量。分布式故障检测允许整个集群共享故障检测工作,而不是集中在少数服务器上。最后,八卦池允许为领导者选举等事件提供可靠和快速的事件广播。

WAN池是全局唯一的,因为无论数据中心如何,所有服务器都应该参与WAN池。 WAN池提供的成员资格信息允许服务器执行跨数据中心请求。集成故障检测允许Consul优雅地处理丢失连接的整个数据中心,或者只处理远程数据中心中的单个服务器。

所有这些功能都是通过利用Serf提供的。它用作嵌入式库以提供这些功能。从用户的角度来看,这并不重要,因为抽象应该由Consul掩盖。但是,作为开发人员,了解如何利用此库非常有用。

3.2 Raft协议
Raft 协议,主要负责leader选举和日志同步。
推荐你看一下这篇博客,
你也可以到这个网站通过动画的方式,像玩游戏一样在线体验raft协议的原理。

4.和Eureka的比较
Eureka因为是Netflix OSS套件的一部分,2.x停止维护,不过1.x仍然是活跃的。

这里重点说下consul与Eureka的区别。和其他系统的比较,可点击此网址自行查看。

Eureka是一种服务发现工具。该体系结构主要是客户端/服务器,每个数据中心有一组Eureka服务器,通常每个可用区域一个。通常,Eureka的客户使用嵌入式SDK来注册和发现服务。对于非本地集成的客户端,使用Ribbon等边车通过Eureka透明地发现服务。

Eureka使用尽力而为的复制提供弱一致的服务视图。当客户端向服务器注册时,该服务器将尝试复制到其他服务器但不提供保证。服务注册的生存时间(TTL)很短,要求客户端对服务器进行心跳检测。不健康的服务或节点停止心跳后,导致它们超时并从注册表中删除。发现请求可以路由到任何服务,由于尽力复制,这些服务可以提供过时或丢失的数据。这种简化的模型可以实现轻松的集群管理和高可扩展性。

Consul提供了一系列超级功能,包括更丰富的健康检查,键/值存储和多数据中心感知。 Consul需要每个数据中心中的一组服务器,以及每个客户端上的代理,类似于使用像Ribbon这样的边车。 Consul代理允许大多数应用程序不知道Consul,通过配置文件执行服务注册以及通过DNS或负载平衡器sidecars进行发现。

Consul提供强一致性保证,因为服务器使用Raft协议复制状态。 Consul支持丰富的运行状况检查,包括TCP,HTTP,Nagios / Sensu兼容脚本或基于Ture的Eureka。客户端节点参与基于八卦的健康检查,该检查分发健康检查的工作,而不像集中式心跳,这成为可扩展性挑战。发现请求被路由到当选的领事领导者,这允许他们默认情况下是强烈一致的。允许过时读取的客户端允许任何服务器处理其请求,从而允许像Eureka一样的线性可伸缩性。

Consul的强一致性意味着它可以用作领导者选举和集群协调的锁服务。 Eureka不提供类似的保证,并且通常需要为需要执行协调或具有更强一致性需求的服务运行ZooKeeper。

Consul提供了支持面向服务的体系结构所需的功能工具包。这包括服务发现,还包括丰富的运行状况检查,锁定,键/值,多数据中心联合,事件系统和ACL。 Consul和consul-template和envconsul等生态系统工具都试图最大限度地减少集成所需的应用程序更改,以避免需要通过SDK进行本机集成。 Eureka是更大的Netflix OSS套件的一部分,该套件期望应用程序相对同质且紧密集成。因此,Eureka只解决了有限的一部分问题,期望其他工具如ZooKeeper可以同时使用。


http://chatgpt.dhexx.cn/article/JrA2uCn0.shtml

相关文章

Consul的介绍和基本使用

一、Consul的简单介绍 Consul是一套开源的分布式服务发现和配置管理系统,由HasiCorp公司用go语言开发的。提供了微服务系统中服务助理、配置中心、控制总线等功能,这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构造全方位的服…

Consul 注册中心介绍以及搭建

本篇重点介绍 Consul 是什么,它可以解决什么问题,它与现有软件的比较,以及如何开始使用它。 目录 1、常见的注册中心2、Consul 介绍3、Consul 特性4、Consul的基本架构5、Consul单节点安装与启动6、Consul启动命令详解7、了解Consul启动输出8…

jQuery删除元素或内容

删除元素/内容 remove():删除被选元素 empty():删除被选元素中子元素

JQuery 数组获取和删除元素

<script>var target []; target [0] "aaa000"; target [1] "bbb111"; target [2] "ccc222"; target [3] "ddd333"; target [4] "eee444"; target [5] "fff555";console.log("使用push()添加元素…

jQuery添加元素

今天教大家来通过jQuery来很容易地添加与删除元素以及内容。我们主要学习的方法有添加的方法四个。首先我们来通过append()和prepend()方法来添加若干新元素&#xff0c;老样子&#xff0c;我们先来看效果展示&#xff1a;一个段落标签和一个button标签组成简易页面&#xff1b…

Jquery添加与移除元素

显示隐藏 siblings() addclass() 给元素添加class&#xff0c;如果元素上已经有其他的classname&#xff0c;那么新的会追加到现有classname后面 用法&#xff1a;$("li").addClass("bigger") removerClass() removerClass():可以将元素的某个class移…

jquery的DOM节点操作(删除元素节点)

1.删除元素节点 在操作页面时&#xff0c;删除多余或者指定的页面元素是非常必要的。 jquery中提供了remove&#xff08;&#xff09;方法来删除元素。 其语法格式如下&#xff1a; 删除元素节点示例代码&#xff1a; <!DOCTYPE html> <html><head><met…

jQuery 创建元素、添加元素、删除元素 【一篇文章轻松拿下】

&#x1f451; 原生 JS 中&#xff0c;我们学习了一整套元素创建添加删除的操作&#xff0c;其中创建元素&#xff0c;我们用了 creatElement&#xff0c;添加元素有两种&#xff0c;分别是后面追加 apprndChild&#xff0c;和指定元素前插入 insertBefore&#xff0c;在 jQuer…

jQuery-删除元素

删除元素有两种方法 remove()&#xff1a;删除被选元素&#xff08;及其子元素&#xff09; empty()&#xff1a;从被选元素中删除子元素 remove&#xff08;&#xff09;代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><met…

“浅”谈容灾和双活数据中心(下)

本文接续前文&#xff1a;“浅”谈容灾和双活数据中心&#xff08;上&#xff09;&#xff0c;上 篇发布之后&#xff0c;瓜哥粉丝量暴涨了好几百&#xff0c;感谢大家关注&#xff01; 第三部分&#xff1a;双活&#xff0c;看上去很美。 3.1 装逼是要付出代价的 看…

存储数据保护技术——双活

目录 基本概念&#xff1a; 双活部署方式&#xff1a; 当数据中心A和数据中心B同时写入数据&#xff0c;怎么区分&#xff1f;怎样保证数据一致性&#xff1a; 分布式锁互斥&#xff1a;来保证数据的一致性 互斥&#xff1a; 分布式锁&#xff1a; 注意&#xff1a; 仲裁…

【精华】 数据中心双活该如何构建

ICT架构师技术交流(微信号ICT_Architect) 介绍分析和交流ICT行业最前沿技术&#xff0c;分享云计算、存储、服务器、数据中心、网络、软件定义和虚拟化等相关知识&#xff0c;旨在知识交流、开放共享和共同进步。 因为最近经常看到大家在讨论数据中心双活解决方案&#xff0c;…

双活数据中心概念及优缺点介绍

主备数据中心之间一般有热备、冷备、双活三种备份方式。 热备 热备的情况下&#xff0c;只有主数据中心承担用户的业务&#xff0c;此时备数据中心对主数据中心进行实时的备份&#xff0c;当主数据中心挂掉以后&#xff0c;备数据中心可以自动接管主数据中心的业务&#xff0c;…

阿里超大数据中心“异地双活”实践

灾备系统和应急管理体系建设是数据中心永不变更的热点话题。从“两地三中心”、“同城双活”到“异地双活”&#xff0c;业内的讨论层出不穷。即使在容灾备份领域较早入手的金融行业&#xff0c;在灾备切换时也是谨慎再谨慎的&#xff0c;在历年“真实切换”演练时“手软”的例…

深入剖析Vplex双活数据中心存储方案

EMC上一代存储双活方案是通过vPlex网关产品实现&#xff0c;具备异构其他厂商存储的能力&#xff0c;将各厂商存储虚拟化为统一的存储池&#xff0c;为上层服务器提供存储资源。从2010年vPlex发布以来其的硬件已经更新了VS1、VS2和VS6三代。2016年推出的VS6硬件引擎间通过40Gb …

04|同城双活:如何实现机房之间的数据同步?

04&#xff5c;同城双活&#xff1a;如何实现机房之间的数据同步&#xff1f; 你好&#xff0c;我是徐长龙。今天我们来看看用户中心改造的另一个阶段&#xff1a;构建多机房。 在业务初期&#xff0c;考虑到投入成本&#xff0c;很多公司通常只用一个机房提供服务。但随着业…

数据中心的双活与灾备方案设计

灾备建设的最终目的就是要保护业务的连续性运行&#xff0c;除了技术层面的支撑外&#xff0c;还有人员、规划和流程等非技术决策层面支撑。养兵千日&#xff0c;用在一时。只有技术和规划通力配合&#xff0c;才能在真正发生灾难时保证业务连续性。 因此&#xff0c;业务连续性…

多数据中心多活相关知识

Cell&#xff1a;业务可封闭收敛最小执行分片&#xff1b;业务对请求空间按一定维度&#xff08;比如会员、门店等&#xff09;划分分片。 LDC&#xff1a;逻辑数据中心&#xff0c;是由多个业务可封闭 cell 组成的集合单元&#xff0c;拥有独立的基础中间件系统&#xff08;包…

第三讲:如何构建双活数据中心方案

针对数据中心双活解决方案如何构建,笔者把大家常见的疑问和问题进行汇总,加上我个人的见解写成一篇比较全面的文章,分享出来供大家参考。由于工作原因,可能今后近一个月的时间不能给及时大家写文章了,但是过了这段时间过后会尽快呈现给大家。 双活本身其实有广义和狭义之…

数字孪生数据中心机房,智能 IDC 高阶运维

随着“东数西算”工程和新基建的加速落地&#xff0c;数智化技术正逐渐渗透到各领域。但随着数据中心建设规模的逐步扩大&#xff0c;必然带来能耗的大幅增长和机房设备数量的不断扩充&#xff0c;传统机房的监控和管理模式已无法满足数据中心“集中监控、统一管理”的需求。 …