Consul Architecture

Consul Architecture(Consul架构)

Consul是一个复杂的系统,有许多不同的运动部件。为了帮助Consul的用户和开发人员形成其工作原理的心理模型,该页面记录了系统架构。

Glossary(词汇表)
在描述架构之前,我们提供术语表以帮助澄清正在讨论的内容:

Agent - 代理是Consul集群的每个成员上长时间运行的守护程序。它是通过运行consul agent来启动的。代理能够以客户端或服务器模式运行。由于所有节点必须运行代理,因此将节点称为客户端或服务器更简单,但代理的其他实例也是如此。所有代理都可以运行DNS或HTTP接口,并负责运行检查并保持服务同步。

Client - 客户端是将所有RPC转发到服务器的代理。客户是相对无国籍的。客户端执行的唯一后台活动是参与LAN Gossip池。这具有最小的资源开销并且仅消耗少量的网络带宽。

Server - 服务器是具有扩展责任的代理,包括参与Raft仲裁,维护群集状态,响应RPC查询,与其他数据中心交换WAN Gossip以及将查询转发给领导者或远程数据中心。

Datacenter - 虽然数据中心的定义似乎很明显,但必须考虑细微的细节。例如,在EC2中,多个可用区域是否被视为包含单个数据中心?我们将数据中心定义为专用,低延迟和高带宽的网络环境。这排除了通过公共互联网的通信,但出于我们的目的,单个EC2区域内的多个可用区域将被视为单个数据中心的一部分。

Consistency - 在我们的文档中使用时,我们使用共识来表示对当选领导者的协议以及对交易顺序的协议。由于这些事务应用于有限状态机,因此我们对共识的定义意味着复制状态机的一致性。维基百科上更详细地描述了共识,此处描述了我们的实现。

Gossip  -  Consul建立在Serf之上,它提供了一个完整的gossip协议,可用于多种用途。 Serf提供会员资格,故障检测和事件广播。我们对这些的使用在gossip文档中有更多描述。足以知道gossip涉及随机节点到节点的通信,主要是通过UDP。

LAN Gossip  - 指局域网gossip池,其中包含位于同一局域网或数据中心的节点。

WAN Gossip  - 指仅包含服务器的WAN gossip池。这些服务器主要位于不同的数据中心,通常通过互联网或广域网进行通信。

RPC  - 远程过程调用。这是一种允许客户端发出服务器请求的请求/响应机制。

10,000 foot view(一万英尺视角观看)

从10,000英尺的高度,Consul的架构看起来像这样:

让我们分解这个图像并描述每一块。首先,我们可以看到有两个数据中心,标记为“一个”和“两个”。 Consul为多个数据中心提供一流的支持,并期望这是常见的情况。

在每个数据中心内,我们都有客户端和服务器的混合体。预计有三到五台服务器。这在失败和性能的可用性之间取得平衡,因为随着更多机器的添加,共识逐渐变慢。但是,客户端数量没有限制,可以轻松扩展到数千或数万。

数据中心中的所有节点都参与了八卦协议。这意味着有一个八卦池,其中包含给定数据中心的所有节点。这有几个目的:首先,不需要为客户端配置服务器的地址;发现是自动完成的。其次,检测节点故障的工作不是放在服务器上,而是分布式的。这使得故障检测比天真的心跳方案更具可扩展性。第三,它被用作消息传递层,用于在诸如领导者选举等重要事件发生时通知。

每个数据中心中的服务器都是单个Raft对等集的一部分。这意味着他们共同选举一个领导者,一个具有额外职责的选定服务器。领导者负责处理所有查询和交易。作为共识协议的一部分,还必须将事务复制到所有对等体。由于此要求,当非领导者服务器收到RPC请求时,它会将其转发给群集负责人。

服务器节点也作为WAN八卦池的一部分运行。此池与LAN池不同,因为它针对较高的Internet延迟进行了优化,并且预计仅包含其他Consul服务器节点。此池的目的是允许数据中心以低触摸方式发现彼此。在线创建新的数据中心就像加入现有的WAN八卦池一样简单。由于服务器都在此池中运行,因此它还支持跨数据中心请求。当服务器收到对不同数据中心的请求时,它会将其转发到正确数据中心的随机服务器。然后该服务器可以转发给本地领导者。

这导致数据中心之间的耦合非常低,但由于故障检测,连接缓存和多路复用,跨数据中心请求相对快速且可靠。

通常,不会在不同的Consul数据中心之间复制数据。当对另一个数据中心中的资源发出请求时,本地Consul服务器会将RPC请求转发给该资源的远程Consul服务器并返回结果。如果远程数据中心不可用,那么这些资源也将不可用,但这不会影响本地数据中心。在某些特殊情况下,可以复制有限的数据子集,例如使用Consul的内置ACL复制功能,或者像consul-replicate这样的外部工具。

在某些地方,客户端代理可以缓存来自服务器的数据,以使其在本地可用,以提高性能和可靠性。示例包括连接证书和意图,允许客户端代理在没有往返服务器的情况下做出有关入站连接请求的本地决策。某些API端点还支持可选的结果缓存。这有助于提高可靠性,因为本地代理可以继续响应某些查询,例如服务发现或从缓存连接授权,即使与服务器的连接中断或服务器暂时不可用也是如此。

猜你喜欢

转载自blog.csdn.net/longgeqiaojie304/article/details/85230479