一文彻底搞懂微服务Consul

1. 什么是Consul

Consul是HashiCorp公司推出的开源软件,提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

2. Consul特性

  • 服务发现(Service Discovery):Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些外部的服务通过Consul很容易的找到它所依赖的服务。
  • 健康检查(Health Checking):Consul的Client可以提供任意数量的健康检查,既可以与给定的服务相关联(“webserver是否返回200 OK”),也可以与本地节点相关联(“内存利用率是否低于90%”)。操作员可以使用这些信息来监视集群的健康状况,服务发现组件可以使用这些信息将流量从不健康的主机路由出去。
  • Key/Value存储:应用程序可以根据自己的需要使用Consul提供的Key/Value存储。 Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能。
  • 安全服务通信:Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。意图可用于定义允许哪些服务通信。服务分割可以很容易地进行管理,其目的是可以实时更改的,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心:Consul支持开箱即用的多数据中心,这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

3. Consul使用场景

Consul的应用场景包括服务发现、服务隔离、服务配置

  • 服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
  • 服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
  • 服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,通过工具consul-template可以更方便地实时渲染配置文件。

4. Consul架构图

在这里插入图片描述

  • 代理(agent): 代理是Consul集群的每个成员上长时间运行的守护程序。它是通过运行consul agent 命令来启动的。代理能够以客户端或服务器模式运行。由于所有节点都必须运行代理,因此将节点称为客户端或服务器更简单,但代理还有其他实例。所有代理都可以运行DNS或HTTP接口,并负责运行检查并保持服务同步。
  • 客户端模式(client agent):客户端是将所有RPC调用转发到服务器的代理。客户端是相对无状态的。客户端执行的唯一后台活动是参与LAN gossip pool(局域网 Gossip池)。这会花费非常非常小的资源并且仅消耗少量的网络带宽。
  • 服务器模式(server agent):服务器是具有扩展责任的代理,包括参与Raft仲裁,维护群集状态,响应RPC查询,与其他数据中心交换WAN Gossip(广域网Gossip)以及将查询转发给领导者或远程数据中心。
  • 数据中心 (datacenter):虽然数据中心的定义似乎很明显,但必须考虑细微的细节。例如,在EC2中,多个可用区域是否被视为包含单个数据中心?我们将数据中心定义为专用,低延迟和高带宽的网络环境。这排除了通过公共互联网的通信,但出于我们的目的,单个EC2区域内的多个可用区域将被视为单个数据中心的一部分。
  • 共识 (consensus):在我们的文档中使用时,我们使用共识来表示对当选领导者的协议以及对交易顺序的协议。由于这些事务应用于有限状态机,因此我们对共识的定义意味着复制状态机的一致性。维基百科上更详细地描述了共识,此处描述了我们的实现。
  • Gossip - Consul建立在Serf之上,它提供了一个完整的gossip 协议(八卦协议Gossip协议),用于多种用途。 Serf提供成员维护,故障检测和事件广播。我们对这些的使用在八卦文档中有更多描述。Gossip参与随机的节点到节点的通信,主要是通过UDP。
  • LAN Gossip:指局域网八卦池,其中包含位于同一局域网或数据中心的节点。
  • WAN Gossip:指仅包含服务器(servers)的WAN八卦池。这些服务器主要位于不同的数据中心,通常通过互联网或广域网进行通信。
  • RPC:远程过程调用。这是一种允许客户端发出服务器请求的请求/响应机制。

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

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

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

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

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

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

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

5. Consul的优势

  • Consul使用Raft算法来保证一致性,比复杂的Paxos算法更直接,相比较而言zookeeper采用的是Paxos,而etcd使用的则是Raft。
  • Consul支持多数据中心,内外网的服务采用不同的端口进行监听,多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟、分片等情况等。zookeeper和etcd均不提供多数据中心功能的支持。
  • Consul支持健康检查,etcd不提供此功能。
  • Consul支持http和dns协议接口,zookeeper的集成较为复杂,etcd只支持http协议。
  • Consul官方提供web管理界面,etcd无此功能。
  • 32
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值