Consul - 架构

在一个数据中心工作的领事的体系结构图可以最好地描述如下所示 :

Architecture

正如我们所看到的,有三种不同的服务器,由Consul管理.工作架构通过使用筏算法工作,这有助于我们从三个不同的服务器中选出一个领导者.然后根据追随者领导者等标签标记这些服务器.顾名思义,追随者有责任遵循领导者的决定.所有这三个服务器进一步相互连接以进行任何通信.

每个服务器使用RPC的概念与其自己的客户端进行交互.由于 Gossip Protocol ,客户之间的沟通是可能的,如下所述.可以使用TCP或八卦通信方法提供与互联网设施的通信.此通信与三台服务器中的任何一台直接联系.

Raft算法

Raft是用于管理复制日志的一致性算法.它依赖于 CAP定理的原理,该原理指出在存在网络分区时,必须在一致性和可用性之间进行选择.并非CAP定理的所有三个基本原理都可以在任何给定的时间点实现.必须在最好的情况下权衡其中任何两个.

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

下图描述了使用筏子的工作流模型算法工作 : 去;

筏算法

键值数据

自领事版本0.7.1以来,已经引入了单独的键值数据. KV命令用于通过命令行与Consul的键值存储进行交互.它公开了商店中插入,更新,阅读删除的顶级命令.为了获得Key/Value对象存储,我们为consul客户端调用KV方法 :

 
 kv:= consul.KV()

KVPair结构用于表示单个键/值条目.我们可以在以下程序中查看Consul KV Pair的结构.

type KVPair struct {
   Key string
   CreateIndex uint64
   ModifyIndex uint64
   LockIndex uint64
   Flags uint64
   Value []byte
   Session string
}

这里,上面代码中提到的各种结构可以定义如下 :

  • : 它是一个斜杠URL名称.例如 -  sites/1/domain.

  • CreateIndex : 首次创建密钥时分配的索引号.

  • ModifyIndex : 上次更新密钥时分配的索引号.

  • LockIndex : 在键/值条目上获得新锁时创建的索引号

  • 标志 : 应用程序可以使用它来设置自定义值.

  • : 它是一个最大512kb的字节数组.

  • 会话 : 它可以在创建会话对象后设置.

协议类型

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

  • 共识协议和

  • 八卦协议

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

共识协议

Consul使用共识协议来提供CAP定理所描述的一致性.该协议基于Raft算法.在实施共识协议时,使用筏算法,其中筏节点始终处于以下三种状态中的任何一种:跟随者,候选者或领导者.

Gossip Protocol

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

  • teknek-gossip : 它适用于UDP,用Java编写.

  • gossip-python : 它利用TCP堆栈,也可以通过构建的网络共享数据.

  • Smudge : 它是用Go编写的,并使用UDP来交换状态信息.

Gossip协议也被用于实现和维护分布式数据库的一致性或者处于一致状态的其他类型的数据,计算未知大小的网络中的节点数量,稳健地传播新闻,组织节点等.

远程过程调用

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

在Consul中使用RPC的真正好处在于,它可以帮助我们避免大多数延迟问题发现服务工具确实有一段时间了.在RPC之前,Consul过去只有 TCP 基于UDP 的连接,这对大多数系统都很好,但对于分布式系统则不行. RPC通过减少从一个地方到另一个地方的分组信息传输的时间段来解决这些问题.在这方面,谷歌的 GRPC 是一个很好的工具,如果有人希望观察基准并比较性能.