Consul架构介绍

Consul是由HashiCorp基于Go语言开发的支持多数据中心分布式高可用的服务发布和注册服务软件,采用Raft算法保证服务的一致性,且支持健康检查。

Consul架构

只有一个数据中心的Consul的架构图如下:


我们可以看到,有三个不同的服务器由Consul管理。整个架构通过使用Raft算法工作,这有助于我们从三个不同的服务器中选出一个领导者。然后根据诸如Follower和Leader之类的标签标记这些服务器。顾名思义,Follower有责任遵循Leader的决定。这三个服务器之间进一步相互连接以进行通信。

每个服务器使用RPC与其自己的客户端进行交互。客户端之间的通信是使用Gossip协议。可以使用TCP或Gossip来提供与互联网设施的通信。

Raft算法

Raft是提供一致性的算法。它依赖于CAP定理的原理,该定理指出,在存在网络分区的情况下,必须在一致性和可用性之间进行选择。并非CAP定理的所有三个基本原理:Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),都可以在任何给定的时间点实现。人们必须在最好的情况下权衡其中任何两个。

一个Raft集群包含多个服务器,通常是奇数的。例如,如果我们有五台服务器,它将允许系统容忍两个故障。在任何给定时间,每个服务器都处于以下三种状态之一:Leader,Follower或Candidate。在正常操作中,只有一个领导者,所有其他服务器都是Follower。这些Follower处于被动状态,即他们自己不发出请求,而只是响应Leader和Candidate的请求。

下图描述了使用Raft算法工作的工作流模型

协议类型

Consul中有两种类型的协议,称为

Consensus协议
Gossip协议

现在让我们详细了解它们。

Consensus Protocol
Consul使用Consensus protocol来提供CAP定理所描述的一致性。该协议基于Raft算法,其中Raft节点始终处于三种状态中的任何一种:Follower, Candidate or Leader。

Leader,负责Client交互和log复制,同一时刻系统中最多存在1个
Follower,被动响应请求RPC,从不主动发起请求RPC
Candidate,由Follower向Leader转换的中间状态
初始时所有节点都是以Follower启动。一个最小的 Raft 集群需要三个参与者,这样才可能投出多数票。当发起选举时,如果每方都投给了自己,结果没有任何一方获得多数票。之后每个参与方随机休息一阵(Election Timeout)重新发起投票直到一方获得多数票。这里的关键就是随机 timeout,最先从timeout中恢复发起投票的一方向还在 timeout 中的另外两方请求投票,这时它们就只能投给对方了,这样很快就能达成一致。

Gossip Protocol
Gossip协议可用于管理成员资格,跨群集发送和接收消息。在Consul中,Gossip协议的使用以两种方式发生,WAN(无线区域网络)和LAN(局域网)。有三个已知的库,可以实现Gossip算法来发现对等网络中的节点 :

teknek-gossip - 它与UDP一起使用,用Java编写。
gossip-python - 它利用TCP堆栈,也可以通过构建的网络共享数据。
Smudge - 它是用Go编写的,使用UDP来交换状态信息。
Gossip协议也被用于实现和维护分布式数据库一致性或与一致状态的其他类型数据,计算未知大小的网络中的节点数量,稳健地传播消息,组织节点等。

Remote Procedure Calls

RPC可以表示为远程过程调用的简写形式。它是一个程序用于从另一个程序请求服务的协议。此协议可以位于网络上的另一台计算机中,而无需确认网络详细信息。

在Consul中使用RPC的真正用处在于,它可以帮助我们避免大多数发现服务工具在一段时间之前所遇到的延迟问题。在RPC之前,Consul过去只使用基于TCP和UDP的连接,这对大多数系统都很好,但对于分布式系统则不行。RPC通过减少从一个地方到另一个地方的分组信息传输的时间段来解决这些问题。

转载来源:https://blog.csdn.net/peterwanghao/article/details/84980264 原作者:peterwanghao

Consul架构介绍相关推荐

  1. MindSpore Lite整体架构介绍

    MindSpore Lite整体架构介绍 MindSpore Lite框架的总体架构如下所示: • 前端(Frontend): 负责模型生成,用户可以通过模型构建接口构建模型,将第三方模型和MindS ...

  2. MindSpore整体架构介绍

    MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. • MindSpore前端表示层(Mi ...

  3. 微服务架构介绍和RPC框架对比

    微服务架构介绍和RPC框架对比 1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中 ...

  4. 伍哥原创之豆荚商城商品搜索架构介绍

    为什么80%的码农都做不了架构师?>>>    豆荚商城(www.dou55.com)商品搜索架构介绍 1,需求分析 伍哥所在的豆荚商城是一个家电行业的B2C网上零售平台.作为这样一 ...

  5. 12.1 LNMP架构介绍;12.2 MySQL安装;12.3-2.4 PHP安装(上下);12.5

    扩展: Nginx为什么比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html apache和ng ...

  6. Kafka系列一之架构介绍和安装

    Kafka架构介绍和安装 写在前面 还是那句话,当你学习一个新的东西之前,你总得知道这个东西是什么?这个东西可以用来做什么?然后你才会去学习它,使用它.简单来说,kafka既是一个消息队列,如今,它也 ...

  7. LAMP架构介绍、MySQL和MariaDB介绍、MySQL安装

    2019独角兽企业重金招聘Python工程师标准>>> LAMP架构介绍 Linux+Apache+MySQL+PHP 就是在linux系统上安装httpd. mysql .PHP, ...

  8. 互联网直播云计算架构介绍

    互联网直播云计算架构介绍 原文:互联网直播云计算架构介绍 思想 拆分 URL分层 模块化 云服务结构 ECS 云计算的优势 -------------------------------------- ...

  9. LNMP基础架构介绍与安装

    1.LNMP架构介绍 LNMP==Linux+Nginx+Mysql+PHP  nginx:省资源,省cpu,所以在高并发时能够处理更多的请求,高端能达到3万到5万的并发量.  nginx和LAMP不 ...

最新文章

  1. 来讲讲Cortex-M、 ARM、和Linux
  2. python 查看 nvida 驱动、 cuda、pytorch、tensorflow的版本
  3. linux常用指令_Linux系统常用指令总结
  4. nodejs 实践:express 最佳实践(五) connect解析
  5. n条线分平面问题解决方法总结
  6. 别人家的孩子!高校博士实现Nature、Science双发!
  7. System.arraycopy()和 Arrays.copyOf()的区别联系(源码深度解析copyOf扩容原理)
  8. 循环尝试,不释放CPU
  9. Hangfire入门(任务调度)
  10. vivo X30系列发布会邀请函曝光:名副其实的“望远镜”
  11. 如何在 JavaScript 面试中过五关斩六将?
  12. Ubuntu 12.10 添加 node 应用为自启动服务
  13. 《东周列国志》第五十三回 楚庄王纳谏复陈 晋景公出师救郑
  14. Python基础 - 20210425 - 基础(命名规范,注解,基础语法)
  15. Win10家庭中文版如何更改Users下的中文用户名
  16. 四川省工程技术研究中心申报解读(条件认定流程各市奖励政策)
  17. 最近超火的公司前端面试题
  18. Android之原始的QQ好友分组实现
  19. 苹果电脑MacBook插入移动硬盘没有反应/不显示
  20. 设计模式七大设计原则

热门文章

  1. 音乐无界限,听见好时光—网易云音乐Linux版震撼来袭!
  2. 手机firebug查看网页代码 How to View Website Source Codes on iPad / iPhone
  3. jquery在线预览PDF文件,打开PDF文件
  4. UITableView 系列五 :自定义UITableViewCell (实例)
  5. Google 地图 google map api / 地图有关
  6. 【转载】Linux free 查询可用内存和判断是否有内存泄漏
  7. 【matplotlib】绘制动态图像
  8. Java—一篇读懂java集合(Collection/Map)及Lambda表达式
  9. Kubernetes-DaemonSet(六)
  10. 第一条Pulsar消息发送