服务注册与发现

服务注册与发现 - 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三种网口的区别

原文地址:https://www.cnblogs.com/wangwangfei/p/14390181.html