tnblog
首页
视频
资源
登录

consul 架构分析

5339人阅读 2021/10/8 17:02 总访问:430308 评论:0 收藏:0 手机
分类: 微服务


本篇文章翻译自:https://www.consul.io/docs/architecture

Consul 架构


Consul是一个复杂的系统,它有许多不同的活动部件。为了帮助Consul的用户和开发人员形成一个关于它如何工作的思维模型,本页介绍下Consul系统架构。

在描述架构之前,我们建议阅读术语表,以帮助大家更好的了解讨论的内容。

在生产中部署Consul时,本文档中的架构概念可以与参考架构指南一起使用。

整体架构

从宏观角度看, Consul架构是这样的。


我们来分析一下这张图,并描述一下每一个部分。首先,我们可以看到有两个数据中心,分别标注为 "DATACENTER1"和 “DATACENTER2”。Consul对多个数据中心有天然非常好的支持,并希望这是常见的情况。

在每个数据中心内,我们有Client和Server的混合。预计会有3到5台Server。这是在权衡故障场景下可用性和性能之间取得平衡的结果,因为随着机器的增加,共识的速度会逐渐变慢。然而,Client的数量没有限制,它们可以轻松地扩展到数千或数万。

所有在数据中心的代理都会参与一个Gossip协议。这意味着有一个Gossip池,其中包含了某个数据中心的所有Agent。这有几个目的:

  • 第一,客户端不需要配置Server的地址,发现工作是自动完成的。

  • 第二,检测代理故障的工作不放在Server上,而是分布式的。这使得故障检测的扩展性比原生的心跳方案要强得多。同时,它还为节点提供了故障检测,如果代理无法到达,那么该节点可能已经发生了故障。

  • 第三,它被用作消息层,当发生重要事件(如Leader 选举)时进行通知。


每个数据中心的Server都是单一Raft对等集的一部分。这意味着它们共同选出一个单一的Leader,一个被选中的Server,它有额外的职责。Leader负责处理所有查询和事务。事务也必须复制到所有参与共识协议的分片。由于这一要求,当None-Leader Server收到RPC请求时,它会将其转发给集群Leader。


Server Agent还作为WAN(广域网) Gossip Pool的一部分进行操作。这个池子与**LAN(局域网)**池不同,因为它是针对互联网的较高延迟进行优化的,WAN池只包含其他Consul 数据中心的Sever Agent。这个池的目的是让数据中心以低接触的方式发现彼此。让一个新的数据中心上线就像加入现有的WAN Gossip 池一样简单。因为服务器都在这个池中运行,所以还可以实现跨数据中心的请求。当一台Server收到一个不同数据中心的请求时,它会将其转发到正确数据中心的随机Server。然后该Servevr可能会转发到本地Leader。


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


一般情况下,不同的Consul数据中心之间不会复制数据。当对另一个数据中心的资源进行请求时,本地Consul服务器会将该资源的RPC请求转发给远程Consul服务器,并返回结果。如果远程数据中心不可用,那么这些资源也将不可用,但这不会以其他方式影响本地数据中心。


在一些特殊情况下,可以复制有限的数据子集,比如使用Consul内置的ACL复制功能,或者使用consul-replicate等外部工具。 在某些地方,Client Agent可能会从Server上缓存数据,使其在本地可用,以提高性能和可靠性。例如, 包括连接证书和它允许Client代理对入站连接请求做出本地决定,而无需往返Server的场景。一些API端点还支持可选的结果缓存。这有助于可靠性,因为即使与服务器的连接中断或服务器暂时不可用,本地Agent仍然可以继续从缓存中响应一些查询,如服务发现或Connect授权。



深入了解

在这一点上,我们已经涵盖了Consul的高层架构,但每个子系统还有很多细节。共识协议和Gossip协议一样,都有详细的文档。安全模型和使用的协议的文档也有。

其他细节,可以查阅代码,在IRC中询问,或者联系邮件列表。


参考文档

Consul中文文档:
https://yushuai-w.gitbook.io/consul/


转载:https://blog.csdn.net/shuai_wy/article/details/109287318


评价

.netCore3.1 consul服务集群

前言Consul是一种服务网络解决方案,可跨任何运行时平台以及公共或私有云连接和保护服务简而言之:集群下载地址环境版本:v...

.netCore3.1 Ocelot 与 consul 熔断限流与缓存

目录与前言目录链接:.net core Ocelot 简单网关集群熔断架构整合目录基于上一篇文章展开 Ocelot 与 Consul 进行合并创建一...

consul

Consulagent-dev1、-dev发开模式,数据都在内存2、-server生产模式,数据会持久化

Windows下安装consul与简单介绍

Consul 是一个用来实现分布式系统服务发现与配置的开源工具。它内置了服务注册与发现框架、分布一致性协议实现、健康检查、...

net core服务注入到consul简单调用

下雨又停电,听说下雨天奶茶和代码最配了,找个奶茶店写代码吧 在奶茶店看到有几个小妹妹耍王者好想和她们一起打两把,我...

consul实现简单的服务集群,负载均衡调用

接上一篇,consul要实现简单的服务集群,其实也很简单,只需要把多个服务使用统一个名字注入即可,然后调用的时候通过服务...

consul 无法通过ip访问

consul agent -dev 只能本地可以访问要想通过ip可以访问,使用下面的使用即可consul agent -dev -client 0.0.0.0 -ui 指定...

consul 本机可以访问,客户端无法访问

是因为默认的启动方式consul agent -dev 只能本机才可以访问如果要外网也可以访问加一个-client 0.0.0.0即可consul agent ...

consulAPI接口

/v1/agent/checks : 返回本地agent注册的所有检查(包括配置文件和HTTP接口) /v1/agent/services : 返回本地agent注册的所...

consul常用API接口地址

agent本地注册 curl http://127.0.0.1:8500/v1/agent/checks 本地代理注册服务的健康状态check curl http://1...

NetCore加consul实现简单服务实例负载

今天,总结一下之前学习的Consul基础(后续如果有时间的话,再加上Ocelot部分):新建一个WebApi项目:模拟服务创建一个Web...

consul删除不需要的服务

调用consul的api接口就行了put请求:">http://consul服务地址/v1/agent/service/deregister/<serviceid>serviceid可...

consul http api与consul-Template

consul的主要接口是RESTful HTTP API,该API可以用来增删查改nodes、services、checks、configguration。所有的endpoints主...

自己实现一个consul的服务管理,功能持续完善

因为自带的consul服务管理功能还是比较有限,比如想要移除一个consul中不要的服务,服务集群管理,consul作为配置中心管理等...

.net core3.1使用API网关Ocelot五:配合consul实现动态路由

真正的项目中我们的服务会很多,如果一一地配置到配置文件,将会是一个巨大的工程,这个时候我们就可以让Ocelot与我们的服...

consul外网访问

consul agent -dev 只能本地可以访问要想通过ip可以访问,使用下面的使用即可consul agent -dev -client 0.0.0.0 -ui 指定...
吃亏决不亏,惜福才有福
排名
12
文章
74
粉丝
4
评论
15
ASP.NET中webform中的几个生命周期函数
修心 : 什么周期除了这些还有什么呢
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
不会去爱,那就别爱,天有注定,缘也会散。