Consul 建筑


consul工作在一个数据中心的架构图最好如下图所示:

Architecture

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

每个服务器都使用 RPC 的概念与自己的客户端进行交互。客户端之间的通信是可能的,因为 八卦协议 如下所述。可以使用 TCP 或 gossip 通信方法使与 Internet 设施的通信可用。此通信与三个服务器中的任何一个直接联系。

筏算法


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

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

下图描述了 raft 算法工作的工作流模型:

Raft Algorithm

键值数据


从 Consul 的 0.7.1 版本开始,引入了单独的键值数据。 KV 命令用于通过命令行与 Consul 的键值存储进行交互。它公开了顶级命令 插入、更新、读取 and Deleting 从商店。要获取 Key/Value 对象存储,我们调用 consul 客户端可用的 KV 方法:

kv := consul.KV()

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

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

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

  • Key : 是斜杠 URL 名称。例如 – 站点/1/域。

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

  • 修改索引 : 上次更新密钥时分配的索引号。

  • 锁定索引 : 在 key/value 条目上获取新锁时创建的索引号

  • Flags : 可以被app用来设置自定义值。

  • Value :是一个最大512kb的字节数组。

  • Session : 可以在创建会话对象后设置。

协议类型


Consul 中有两种协议,分别称为:

  • 共识协议和
  • 八卦协议

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

共识协议

Consul 使用共识协议来提供 CAP 定理所描述的一致性。该协议基于 Raft 算法。在实现 Consensus 协议时,使用 Raft 算法,其中 raft 节点始终处于以下三种状态中的任何一种:Follower、Candidate 或 Leader。

八卦协议

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

  • 技术八卦 : 它与UDP一起工作,是用Java编写的。

  • 八卦Python : 利用 TCP 栈,也可以通过构建的网络共享数据。

  • Smudge : 用 Go 编写,使用 UDP 交换状态信息。

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

远程过程调用

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

在 Consul 中使用 RPC 的真正美妙之处在于,它可以帮助我们避免大多数发现服务工具之前确实存在的延迟问题。在 RPC 之前,Consul 曾经只有 TCP and UDP 基于连接,这对大多数系统都很好,但不适用于分布式系统。 RPC 通过减少数据包信息从一个地方到另一个地方的传输时间来解决这些问题。在这个区域, GRPC 如果你希望观察基准并比较性能,Google by Google 是一个很好的工具。