Consul 学习记录1——架构,通信协议,服务发现原理

295 阅读2分钟

学习自以下文章:

consul 架构

image.png 目前consul 架构全部为client-server模式,服务不再自己向server进行注册,而是先向同台机器的consul client 注册,client 再向server进行注册。

server :

分为三种:

  • 领导者:就是主从架构的主,负责处理全部请求,生产日志,保证大多数从都同步;
  • 跟随者:就是主从架构的从,负责接受主发过来的日志进行同步;
  • 竞争者:当领导者挂了,或者从长时间未收到领导者的消息,就会转为竞争者 ,竞争成为领导者,详细过程后续会说。 主要工作:
  • 参与raft,保证一致性
  • 存储集群机器状态(日志)
  • 处理查询(领导者)
  • 维护周边(通过lan/wan)节点之间的关系

client 主要的工作:

  • 负责进行同台机器向自己注册的微服务的健康检查;
  • 将微服务的注册请求和查询请求,请求server,做一次转发
  • 维护周边各节点(通过LAN/WAN)的关系

为啥这样设计(使用client-server模式)?

这样设计有以下好处:

  • 由于consul的server 数量都是受控的,一般就是3个或者5个,这样在面对大量微服务实例时,肯定需要定时收到或者发送大量的心跳请求,毫无疑问的大量增加server的无意义负载,而使用client-server模式就可以避免这个问题。
  • server数量有限,client维护了和各个节点的关系,当一个server挂掉后,会选择还能用的server,避免服务不能调用;

consul 之间的通信协议

  • client - server 使用 tcp 8300 端口
  • client - client 使用tcp/udp LAN GOSSIP 8301 端口
  • server - server 使用 tcp 8300 端口

consul 服务发现原理:

    1. consul集群正常运行,选举一台server节点为leader;
    1. 服务提供者通过consul client 将服务注册到server,服务信息保存在server 各节点,通过raft保证强一致性;
    1. 服务调用者需要访问服务,首先访问本机的client,client 将请求发送给server,server拿到要调用的服务提供者的ip和host,并保存在缓存中,如果缓存有,直接从缓存中拿,缓存是懒加载模式,默认过期时间35s
  • 通过负载均衡策略,选择一个ip+host进行调用。