📜  领事-建筑

📅  最后修改于: 2020-11-01 03:03:44             🧑  作者: Mango


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

建筑

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

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

筏算法

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

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

下图描述了筏算法可用于的工作流程模型-

筏算法

关键值数据

从Consul的0.7.1版本开始,引入了单独的键值数据。 KV命令用于通过命令行与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名称。例如–网站/ 1 /域。

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

  • ModifyIndex-上次更新密钥时分配的索引号。

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

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

  • -这是最大512kb的字节数组。

  • 会话-可以在创建会话对象后进行设置。

协议类型

领事中有两种类型的协议,称为-

  • 共识协议和
  • 八卦协议

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

共识协议

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

八卦协议

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

  • teknek-gossip-它与UDP一起使用,并且用Java编写。

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

  • 涂抹-用Go语言编写,使用UDP交换状态信息。

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

远程过程调用

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

在Consul中使用RPC的真正好处是,它可以帮助我们避免大多数发现服务工具在一段时间前确实存在的延迟问题。在RPC之前,Consul以前仅具有基于TCPUDP的连接,这对大多数系统来说都很好,但对于分布式系统则不然。 RPC通过减少将数据包信息从一个位置传输到另一个位置的时间来解决此类问题。在这一领域,Google的GRPC是一个很好的工具,可以期待人们观察基准并比较性能。