Consul系列:什么是Consul?

news2024/11/25 18:36:21

引言

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案, consu1 的方案更“一站式”,内置了服务注册 与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等。使用起来也较为简单。Consul 用 Golang 实现,因此具有天然可移植性(支持 Linux、windows 和 Mac Os X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。其一致 性协议采用 Raft 算法,用来保证服务的高可用。使用 GOSSIP 协议管理成员和广播消息,并且支持ACL 访问控制。

值得一提的是,命令行超级好用的虚拟机管理软件 grant 也是 HashiCorp 公司开发的产品

Consul 的使用场景

  • 服务通信地址域名化,动态迁移服务
  • SaaS 应用的服务发现与配置共享
  • 与 consul-template 服务集成,动态生成 nginx 和 haproxy 配置文件

Consul 的优势

  • 使用 Raft 算法来保证一致性,比复杂的 Paxos 算法更直接
  • 支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障而其部署则需要考虑网络延迟,分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持
  • 支持健康检查,Etcd 不提供此功能
  • 支持 HTTP 和 DNS 协议接口,Zookeeper 的集成较为复杂,Etcd 只支持 HTTP 协议
  • 官方提供 Web 管理界面,Etcd 无此功能

相关术语

  • agent**:运行在 consul集群所有节点上的核心服务,其可运行在 client 或 server 模式,通过consul agent 命令来启动。由于所有节点必须运行 agent,指定节 点运行于 client 或者server 模式是很简单地,除非有其它的 agent 实例。所有的 agent 都能运行 DNS 或者HTTP 接口,并负责运行时检查和保持服务同步。
  • client:一个 client 是一个转发所有 RPC到 server 的 agent 。这个 client 是相对无状态的。client 唯一执行的后台活动是加入 LAN gossip 池。这有一个最低的 资源开销并且仅消耗少量的网络带宽。
  • server:一个 server 是一个有一组扩展功能的 agent,这些功能包括 参与 Raft 选举,维护集群状态,响应 RPC 查询,与其他数据中心交互 WAN gossip 和转发 查询给 leader 或者远程数据中心。每个数据中心至少有一个 agent 运行在 server 模式,推荐为 3 个或 5个
  • DataCenter:虽然数据中心的定义是显而易见的,但是有一些细微的细节必须考虑。例如,在EC2 中,多个可用区域被认为组成一个数据中心?我们定义数据中心 为一个私有的,低延迟和高带宽的一个网络环境。这不包括访问公共网络,但是对于我们而言,同一个 EC2 中的多个可用区域可以被认为是一个数据中心的一部分。
  • Consensus:在我们的文档中,我们使用 Consensus 来表明就 leader 选举和事务的顺序达成一致。由于这些事务都被应用到有限状态机上,Consensus 暗示 复制 状态机的一致性。
  • Gossip:Consul 建立在 Serf 的基础之上,它提供了一个用于多播目的的完整的 gossip 协议Serf 提供 成员关系,故障检测和事件广播。更多的信息在 gossip 文档中描述。这足以知道gossip 使用基于 UDP 的随机的点到点通信
  • LAN Gossip:它包含所有位于同一个局域网或者数据中心的所有节点
  • WAN Gossip:它只包含 Server。这些 server 主要分布在不同的数据中心并且通常通过因特网或者广域网通信。
  • RPC:远程过程调用。这是一个允许 client 请求 server 的请求/响应机制。

Consul 的架构

上图中我们能看到有两个数据中心,标记为“DATACENTER1”和“DATACENTER2”。Consul对多数据中心有一流的支持并且希望这是一个常见的情况。

在每个数据中心,client 和 server 是混合的。一般建议有 3-5 台 server。这是基于有故障情况下的可用性和性能之间的权衡结果,因为越多的机器加入达成共识越慢。然而,并不限制client 的数量,它们可以很容易的扩展到数千或者数万台。

同一个数据中心的所有节点都必须加入 gossip 协议。这意味着 gossip 协议包含一个给定数据中心的所有节点。这服务有几个目的:

  • 第一:不需要在 client 上配置 server 地址。发现都是自动完成的
  • 第二:检测节点故障的工作不是放在 server上,而是分布式的。这是的故障检测相比心跳机制有更高的可扩展性
  • 第三:它用来作为一个消息 层来通知事件,比如 leader 选举发生时。

每个数据中心的 server 都是 Raft 节点集合的一部分。这意味着它们一起工作并选出一个 leader,一个有额外工作的 server。leader 负责处理所有的查询和事务。作为一 致性协议的一部分,事务也必须被复制到所有其他的节点。因为这一要求,当一个非 leader 的 server 收到一个 RPC 请求时,它将请求转发给集群 leader。

server 节点也作为 WAN gossip Pool 的一部分。这个 Pool不同于 LAN Pool,因为 它是为了优化互联网更高的延迟,并且它只包含其他 Consul server 节点。 这个 Po 的的是为了允许数据中心能够以 low-touch 的方式发现彼此。这使得一个新的数据中心可以很容易的加入现存的 WAN gossip。因为server 都运行在这个 pool 中,它 也支持跨数据中心请求。当一个 server 收到来自另一个数据中心的请求时,它随即转发给正确数据中心的一个 server。该 server 再转发给本地 leader。

这使得数据中心之间只有一个很低的合,但是由于故障检测,连接缓存和复用,跨数据中心的请求都是相对快速和可靠的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多区域综合能源系统热网建模及系统运行优化(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

(转载)从0开始学matlab(第4天)—子数组

你可以选择和使用一个 MATLAB 函数的子集,好像他们是独立的数组一样。在数组名后面加括号,括号里面是所有要选择的元素的下标,这样就能选择这个函数的子集了。例如,假设定义了一个数组 arr1 如下 arr1[1.1 -2.2 3.3 -4.4 5.5] 那…

EMI超标问题排查

基于场外EMC测试反馈,EMI测试超标,测试结果如下图; 通过图形我们 可以看出,主要EMI超标频率集中在1GHz(大约700M的时候最差)附近。 使用RS频谱仪结合近场探头,进行复测: 复测情况确实存在EMI问题集中在700MHz左右。 去掉时钟输出接口时; 效果明显 通过试验,可以得出…

Java进阶-文件操作

1.File类 1.1File类概述和构造方法 File类介绍 它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已.它可以是存在的,也可以是不存在的.将来是要通过具体的操作把这个路径的内容转换为具…

6.Redis事务

6.Redis事务 是什么:Redis事务VS数据库事务怎么玩Errors inside a transactionWatch监控:Optimistic locking using check-and-set 是什么: Redis Transactions allow the execution of a group of commands in a single step, they are cen…

系列二、Vue脚手架的基本语法

一、基于3.x版本脚手架创建vue项目的方式 1.1、基于交互式命令行的方式,创建vue项目 vue create project-name 1.2、基于图形化界面的方式,创建vue项目 vue ui 1.2.1、创建新项目 -详情 1.2.2、创建新项目-预设 1.2.3、创建新项目-功能 1.2.4、创建新…

千万不要告诉别人自己的绩效!某面试官觉得求职者表现不错,找熟人打听他离职原因,听说因为绩效低被劝退,决定不要他了!...

自己的绩效可以告诉别人吗? 一位网友提示: 告诉别人自己的绩效很恐怖!在电梯里听到面试官说某求职者表现还不错,找熟人问了一下他上家公司的离职原因,听说是因为绩效低被劝退,所以不准备要他了。 网友说&am…

要不要和我们一起看看音视频技术未来的模样?

▲扫描图中二维码或点击“阅读原文” ▲ 直通LiveVideoStackCon 2023上海站九折优惠 2023年5月11日,Google I/O年度开发者大会完美落幕。随着PaLM2模型发布、Bard的自由访问,技术彻底迎来了“AI 时代”。 但今天我们想聊的并不是AI,而是一直支…

运用多输入模型优化不同维度特征

运用多输入模型优化不同维度特征 背景介绍 使用神经网络模型做用户付费金额预测,一种常见的特征工程场景,是把某个特定付费区间,比如付费金额大于10小于等于12的付费用户信息处理成特征,既可以将这部分用户的付费人数作为特征&a…

自助迁移工具升级!如何从 Confluence 切换至 ONES Wiki?

近日,ONES 升级了 Confluence 自助迁移工具,对迁移数据类型、迁移范围、迁移模式等多个维度的能力进行了提升,帮助企业更高效率、更低成本地将 Confluence 中的数据完整、准确地迁移至 ONES Wiki 中。 在 Confluence 与 ONES 服务资源充足的前…

国民游戏王者荣耀的真实地图开发之路

👉腾小云导读 相信很多人都玩过王者荣耀,大家在欣赏其华丽的游戏界面以及炫酷的游戏技能时,是否好奇过王者荣耀的地图是怎样开发出来的?在开发的历程中,都有哪些问题?是怎样解决的?本文将从其地…

飞桨+文心一言的“动力装置”,藏着百度财报的增长密码

我们习以为常的科技世界,正在以肉眼可见的速度被大模型所改变甚至重构。不想错失机遇的科技企业,都怀揣着造AI重器的梦想,各种大模型纷至沓来。 发布大模型只是开始,如同火箭发射,升空是第一步,后续能否顺利…

【运维知识进阶篇】集群架构-Nginx反向代理详解

在互联网请求中,客户端通常无法直接向服务端发起请求,就需要用代理服务,来实现客户端和的交互,起到一个中介的作用。 Nginx代理服务常见模式 Nginx代理按照应用场景模式可以分为正向代理和反向代理。 正向代理是内部上网过程中&a…

将矩阵按指定对角线转化为一个下三角矩阵numpy.tril()方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将矩阵按指定对角线转化为一个下三角矩阵 numpy.tril() 选择题 关于以下代码说法错误的一项是? import numpy as np a np.array([[1,2],[3,4]]) print("【显示】a\n",a) print(&…

Nevron Open Vision for .NET 2023.1 Crack

Nevron Open Vision for .NET 2023.1 添加对 .NET Core 7.0 的支持以及用于图表控件的新 3D 渲染引擎。 2023 年 5 月 17 日 - 14:09 新版本 特征 一般改进 添加了对 Microsoft .NET 7.0 的支持- NOV 现在完全支持 .NET Core 7.0,此外还支持 Microsoft .NET Framewo…

chatgpt赋能Python-pycharm降低numpy版本

Pycharm中降低Numpy版本的步骤 如果你在使用Pycharm进行Python编程时遇到了Numpy版本不兼容的问题,你可能需要降低Numpy的版本。在这篇文章中,我们将介绍如何在Pycharm中降低Numpy版本,以便Python程序能够正常运行。 什么是Numpy&#xff1…

测试入门篇

软件测试入门 1.啥是软件测试?2.测试和开发的区别3.测试和调试的区别4.软件测试人员需具备的素质5.测试入门5.1 需求介绍/从测试人员的角度看需求5.2 测试用例5.3 bug介绍5.4 软件的生命周期 6.开发模型6.1 瀑布模型6.2 螺旋模型6.3 增量、迭代模型6.4 敏捷模型(scr…

【贪吃蛇小游戏】宝塔面板快速搭建贪吃蛇小游戏Web网站 - 无需云服务器

文章目录 前言视频教程1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自远程内网穿透的文章:Linux使用宝塔面板搭建网站,并内网穿透实现公网访问 前言 宝塔面板作为简单好用的服务器运维管理面…

【深度学习】Yolov8追踪从0到1, 这要是做计数啥的,简单的一批

文章目录 前言用了将近2年的yolov5了,之前主要做目标检测后面,还做了yolov5的分割任务和模型转换,现在又有了新任务了。是时间玩玩新模型了。 最好的方式是看文档:https://docs.ultralytics.com/ ![在这里插入图片描述](https://i…

Jmeter的提取值存入csv或excel中,BeanShell PostProcessor后置处理器可满足

实际用户场景:用户登录小游戏,可进行各种操作,例如查看排行榜,玩游戏,进行留言等,现在需要对三个接口查看排行榜/玩游戏/留言进行压测,有两种压测方案: 方案一:将登录接…