• 服务注册与发现


    服务注册与发现 - Consul - 基础

    一、简介

    Consul是HashiCorp公司推出的开源工具,用于实现分布式下的服务发现与配置,

    与其他分布式服务发现方案相比,Consul内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key/Value Store存储,多数据中心方案、

    不再续约依赖于其他工具(比如Zookeeper),使用起来也较为简单,

    Consul使用Go语言编写,支持(Linux/Ubuntu/MacOS/Windows),安装包仅包含一个文件,方便与Docker无缝集成。

    二、consule 核心 agent组件

      Agent是一个独立的程序,通过守护进程的方式,运行在consul集群中的每个节点上。

    每个Consul agent维护它自己的服务集合以及检查注册和健康信息。

    agent负责执行自己的健康检查和更新本地状态 其中,Agent 根据节点的性质,分为: Agent Server 和 Agent Client

    • Agent Client

      client将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。

    • Agent Server

      server 保存client的注册信息,集群的配置信息, 维护集群高可用, 在局域网内与本地客户端通讯, 通过广域网与其它数据中心通讯。

      每个数据中心的 server 数量推荐为 3 个或是 5 个,通过 Raft 算法来保证一致性。

    三、agent 模式

    • CLIENT表示consul的client模式,就是客户端模式。

    是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。

    简单的说,client 处理健康检查,注册服务等,但是这个注册只是转发到server中,如果有成千上万的服务,分别启动多个client,可以减少server 压力。

    • SERVER表示consul的server模式,表明这个consul是个server。

    这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。

    SERVER-LEADER 和其它 SERVER-FOLLOWER 不一样的一点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。

    四、consul 通信接口

    • RPC

      用于内部通讯Gossip/日志分发/选主等

    • HTTP API

      服务发现/健康检查/KV存储等几乎所有功能, 默认端口为8500

    • Consul Commands (CLI)

      consul命令行工具可以与consul agent进行连接,提供部分consul的功能。

      实际上Consul CLI 默认就是调用的HTTP API来与consul集群进行通讯。

    • DNS

      仅用于服务查询

      例如: dig @127.0.0.1 -p 8600 web.service.consul

      我们可以通过cosul提供的DNS接口来获取当前的服务“web”对应的可用节点。

    五、consul 内部端口使用汇总

    六、consul 请求调用链路

    七、consul 去中心化思想实现

      consul 使用了基于gossip协议的Serf实现,Serf是一个服务发现,编配工具,它去中心化,不像集中式结构那样统一分配管理;

    Serf提供成员关系,纠错检查,广播等功能。gossip协议主要是基于UDP,实现任意node-to-node间的通信。Consul正是使用serf 提供的gossip协议来管理成员和广播消息到集群。

    gossip 协议(gossip protocol)是基于流行病传播方式的节点或者进程之间信息交换的协议,来确保网络中所有节点的数据一样。其中节点间的交互方式主要以下有三种:

    Push:发起信息的节点 A 随机选择联系节点 B,并向B发送自己的信息,节点 B 在收到信息后,更新比自己新的数据,一般拥有新信息的节点才会作为发起节点。

    Pull:发起信息的节点 A 随机选择联系节点 B,并从对方获取信息。一般无新信息的节点才会作为发起节点。

    Push&Pull:发起信息的节点 A 向选择的节点 B 发送信息,同时从对方获取数据,用于更新自己的本地数据。

    八、consul内部原理


    1、服务器 Server1、Server2、Server3 上分别部署了 Consul Server, 组成了Consule集群,通过raft选举算法, server2成为leader节点。

    2、服务器 Server4 和 Server5 上通过 Consul Client 分别注册 Service A、B、C,(服务A,B,C注册到 Consul 可以通过 HTTP API(8500 端口)的方式,

      也可以通过 Consul 配置文件的方式。)

    3、Consul Client将注册信息通过 RPC 转发到 Consul Server,服务信息保存在 Server 的各个节点中,并且通过 Raft 实现了强一致性。

    4、服务器 Server6 中 Program D 要访问 Service B,此时 Program D 先访问本机 Consul Client 提供的 HTTP API,Consul Client 会将请求转发到 Consul Server。

    Consul Server 查询到 Service B 并返回,最终 Program D 拿到了 Service B 的所有部署的 IP 和端口,根据负载均衡策略,选择Service B 的其中一个并向其发起请求。

    如果服务发现采用的是 DNS 方式,则 Program D 中使用 Service B 的服务发现域名,域名解析请求首先到达本机 DNS 代理,

    然后转发到本机 Consul Client,consul Client 会将请求转发到 Consul Server。随后的流程和上述一直。

    九、其他

    WAN:Wide Area Network,广域网。

    LAN:Local Area Network,局域网。

    参考资料

    官网

    github

    consul 服务治理原理简介和环境搭建

    P2P 网络核心技术:Gossip 协议

    通过 Consul-Template 实现动态配置服务

    WAN、LAN、WLAN三种网口的区别

  • 相关阅读:
    收藏随笔
    Jquery根据元素ID判断该元素是否存在
    DIV+CSS布局中IE与FF浏览器之间重要的兼容性差异
    css3 boxsizing属性
    常见CSS属性及值
    Pycharm学习记录注释
    python之reload用法
    python之sorted用法
    android studio目录结构浅析
    纪念开通博客
  • 原文地址:https://www.cnblogs.com/wangwangfei/p/14390181.html
Copyright © 2020-2023  润新知