分布式存储服务注册中心Consul

Consul 基本概念,同类比较和内部原理

2019-06-07  本文已影响0人  YellowStar5_

这个文章我们主要来说一下Consul的基本概念,以及其实现的内部原理,和Eureka的比较。

1.什么是Consul?

Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。 这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格。 Consul需要数据平面并支持代理和本机集成模型。 Consul附带一个简单的内置代理,因此一切都可以开箱即用,但也支持第三方代理集成,如Envoy。
Consul 提供的关键功能:

2. Consul 的架构

2.1 Consul 中的术语

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

2.2 一万英尺看Consul

Consul 架构图

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

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

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

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

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

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

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

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

3. Gossip协议和Raft协议

要想理解Consul的原理,你是绕不过Gossip协议和Raft协议的。

3.1 八卦协议Gossip Protocol

3.1.1 什么是Gossip 协议

Gossip算法如其名,灵感来自办公室八卦,只要一个人八卦一下,在有限的时间内所有的人都会知道该八卦的信息,这种方式也与病毒传播类似,因此Gossip有众多的别名“闲话算法”、“疫情传播算法”、“病毒感染算法”、“谣言传播算法”。更多,可参见这篇博文

3.1.2 Consul中的八卦协议

Consul使用两个不同的八卦池。我们将每个池分别称为LAN或WAN池。

每个数据中心Consul都有一个LAN八卦池,包含数据中心的所有成员,包括客户端和服务器。 LAN池用于一些目的。成员资格信息允许客户端自动发现服务器,减少所需的配置量。分布式故障检测允许整个集群共享故障检测工作,而不是集中在少数服务器上。最后,八卦池允许为领导者选举等事件提供可靠和快速的事件广播。

WAN池是全局唯一的,因为无论数据中心如何,所有服务器都应该参与WAN池。 WAN池提供的成员资格信息允许服务器执行跨数据中心请求。集成故障检测允许Consul优雅地处理丢失连接的整个数据中心,或者只处理远程数据中心中的单个服务器。

所有这些功能都是通过利用Serf提供的。它用作嵌入式库以提供这些功能。从用户的角度来看,这并不重要,因为抽象应该由Consul掩盖。但是,作为开发人员,了解如何利用此库非常有用。

3.2 Raft协议

Raft 协议,主要负责leader选举和日志同步。
推荐你看一下这篇博客
你也可以到这个网站通过动画的方式,像玩游戏一样在线体验raft协议的原理。

4.和Eureka的比较

Eureka因为是Netflix OSS套件的一部分,2.x停止维护,不过1.x仍然是活跃的。

在这里插入图片描述
这里重点说下consul与Eureka的区别。和其他系统的比较,可点击此网址自行查看。

Eureka是一种服务发现工具。该体系结构主要是客户端/服务器,每个数据中心有一组Eureka服务器,通常每个可用区域一个。通常,Eureka的客户使用嵌入式SDK来注册和发现服务。对于非本地集成的客户端,使用Ribbon等边车通过Eureka透明地发现服务。

Eureka使用尽力而为的复制提供弱一致的服务视图。当客户端向服务器注册时,该服务器将尝试复制到其他服务器但不提供保证。服务注册的生存时间(TTL)很短,要求客户端对服务器进行心跳检测。不健康的服务或节点停止心跳后,导致它们超时并从注册表中删除。发现请求可以路由到任何服务,由于尽力复制,这些服务可以提供过时或丢失的数据。这种简化的模型可以实现轻松的集群管理和高可扩展性。

Consul提供了一系列超级功能,包括更丰富的健康检查,键/值存储和多数据中心感知。 Consul需要每个数据中心中的一组服务器,以及每个客户端上的代理,类似于使用像Ribbon这样的边车。 Consul代理允许大多数应用程序不知道Consul,通过配置文件执行服务注册以及通过DNS或负载平衡器sidecars进行发现。

Consul提供强一致性保证,因为服务器使用Raft协议复制状态。 Consul支持丰富的运行状况检查,包括TCP,HTTP,Nagios / Sensu兼容脚本或基于Ture的Eureka。客户端节点参与基于八卦的健康检查,该检查分发健康检查的工作,而不像集中式心跳,这成为可扩展性挑战。发现请求被路由到当选的领事领导者,这允许他们默认情况下是强烈一致的。允许过时读取的客户端允许任何服务器处理其请求,从而允许像Eureka一样的线性可伸缩性。

Consul的强一致性意味着它可以用作领导者选举和集群协调的锁服务。 Eureka不提供类似的保证,并且通常需要为需要执行协调或具有更强一致性需求的服务运行ZooKeeper。

Consul提供了支持面向服务的体系结构所需的功能工具包。这包括服务发现,还包括丰富的运行状况检查,锁定,键/值,多数据中心联合,事件系统和ACL。 Consul和consul-template和envconsul等生态系统工具都试图最大限度地减少集成所需的应用程序更改,以避免需要通过SDK进行本机集成。 Eureka是更大的Netflix OSS套件的一部分,该套件期望应用程序相对同质且紧密集成。因此,Eureka只解决了有限的一部分问题,期望其他工具如ZooKeeper可以同时使用。

总结一下上面的几段话:

另外,Spring Cloud官方提供对Consul的支持,网址是https://spring.io/projects/spring-cloud-consul,后面我会写文章具体的使用。

5.参考:

https://www.consul.io/intro/index.html
https://www.consul.io/intro/vs/eureka.html
https://www.consul.io/docs/internals/architecture.html
https://www.consul.io/docs/internals/consensus.html
https://www.consul.io/docs/internals/gossip.html
https://www.cnblogs.com/xingzc/p/6165084.html
https://www.cnblogs.com/xybaby/p/10124083.html

文章之后会第一时间发于微信, 欢迎关注我的微信公众号,大家一起交流学习


在这里插入图片描述
上一篇 下一篇

猜你喜欢

热点阅读