Spring Cloud: 注册中心Consul使用

什么是Consul

Consul是HashiCorp公司推出的开源工具,提供了分布式系统的服务注册和发现、配置等功能。与其他分布式服务注册与发现的方案相比,Consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案。这些功能每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。

基本术语

  • 代理(Agent):是一直运行在Consul集群中每个节点上的守护进程,通过运行consul agent命令来启动。代理可以以客户端或服务端模式运行。无论是客户端节点,还是服务端节点,都必须运行代理,因此将节点称为客户端或服务器更容易理解。所有代理都可以通过DNS或HTTP接口来检查服务,并保持服务同步。
  • 客户端(Client):客户端是所有RPC转发到服务端的代理。这个客户端是相对无状态的。客户端唯一执行的后台活动是加入LAN gossip池,资源开销很小。
  • 服务端(Server):服务端是具有扩展责任的代理,包括参与Raft选举、维护集群状态、响应RPC查询、与其他数据中心交换WAN,以及将查询转发给领导者(Leader)或远程数据中心。考虑到容错和收敛,一般部署 3 ~ 5 个比较合适。
  • 数据中心(Data Center):是一个私有的、低延迟且高带宽的网络环境,由多个客户端和服务端构成。
  • 共识(Consensus):在文档中,我们使用共识来表示对当选领导者的协议以及交易顺序的协议。由于这些事务应用于有限状态机,因此我们对共识的定义意味着复制状态机的一致性。
  • Gossip:Consul建立在Serf的基础上,它提供了一个完整的Gossip协议
  • LAN Gossip:是指局域网Gossip,包含位于同一个数据中心的所有节点。
  • WAN Gossip:是指仅包含服务端的WAN Gossip池。这些服务端位于不同的数据中心,通常通过互联网或广域网进行通信。
  • 远程调用(RPC):是一个允许客户端请求服务端的请求-响应机制。RPC解释

Consul的功能

  • 服务发现:有了consul,服务可以通过DNS或者HTTP直接找到它所依赖的服务。
  • 健康检查:consul提供了健康检查的机制,从简单的服务端是否返回200的响应代码到较为复杂的内存使用率是否低于90%。
  • K/V存储:应用程序可以根据需要使用consul的Key/Value存储。Consul提供了简单易用的http接口来满足用户的动态配置、特征标记、协调、leader选举等需求,使Consul有称为配置中心的可能。
  • 多数据中心:Consul原生支持多数据中心。这意味着用户不用为了多数据中心自己做抽象。

Consul的基本架构

在这里插入图片描述

上图为Consul的基本架构,包含两个datacenter,每一个datacenter中客户端和服务端都是共存的,建议在数据中心中使用奇数个服务端,如3或5个。在出现故障的情况下,可用性和性能之间取得了平衡,因为随着添加更多计算机,共识逐渐变慢。但是,客户数量没有限制,他们可以轻松扩展到成千上万。

数据中心了的所有代理都加入到Lan Gossip协议中,也就是说Gossip协议池中包含数据中心的所有节点,这要有几个目的:

  • 不需要在客户端上配置服务端地址,服务发现都是自动完成
  • 检测节点故障的工作没有放到服务端,而是分布式的,这种故障监测比心跳机制有更高的可扩展性,而且还为节点提供故障检测,代理不可用说明节点发生故障
  • 数据中心可用作数据传递呈,用来通知重要事件的发生,如重新选举Leader

数据中心中的每个服务端节点都是Raft节点集合的一部分。它们共同选举一个领导者,即一个具有额外职责的选定服务端。领导者负责处理所有查询和事务,作为共识协议的一部分,还必须将事务复制到所有对等体。因此当非领导者的服务端收到RPC请求时,它会将请求转发给群集的领导者。

服务端节点也作为WAN Gossip协议池的一部分,不同于LAN Gossip协议池的是,它对较高的网络延迟进行了优化,并且只包含其他Consul服务端节点。这个协议池的作用是允许数据中心能够以低接触的方式发现彼此,使得一个新数据中心可以很容易地加入现存的WAN Gossip协议池。因为服务端都运行在这个协议池中,支持跨数据中心请求。当一个服务端收到来自另一个数据中心的请求时,它会将其转发到正确数据中心的随机服务端。该服务端再转发给本地领导者。

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

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

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

Consul的注册流程

由于Eureka 2.0 闭源,consul多用来作为注册中心替换Eureka。

在这里插入图片描述

Consul作为注册中心,类似于中介的作用,接收服务提供者的注册后,定期检查注册成员状态,是否可以提供服务

Provider 服务提供者:在启动的时候会向注册中心发起注册请求并将其节点信息以及检查元数据发送给注册中心,于注册中心建立联系,等待注册中心介绍工作

Consumer 服务消费者:从注册中心中获取服务注册列表,根据服务提供者名称获得具体服务者提供者信息,在通过负载均衡调用服务,完成消费过程。

Consul的使用

可以到官网下载需要版本https://www.consul.io/downloads.html,下载后不需要安装直接运行即可。

这里演示使用docker启动,单机使用dev模式即可:

docker run -p 8500:8500 consul agent -dev -bind=0.0.0.0 -client=0.0.0.0

在这里插入图片描述

这时访问http://localhost:8500/ui可以看到如下操作界面:

在这里插入图片描述

为了方便启动docker,这里编写一个使用docker-compose启动文件:

version: '3'
services:           
    consul:
        image: consul
        restart: always
        networks:
          - spring
        volumes:
          - ./consul/data:/consul/data
          - ./consul/config:/consul/config
        ports
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值