[服务注册和发现]consul

363 阅读2分钟

图片.png

0/consul介绍

consul是Hashcorp公司推出的开源软件,用于实现分布式系统的服务注册、服务发现和服务配置。

与其他的分布式系统服务注册、发现和配置的方案相比,consul的方案更‘一站式’。

为什么说consul更加的一站式呢?

因为consul内置了服务注册与发现框架、分布一致性协议实现、健康检查、key/value存储、多数据中心方案。

不再依赖其他工具(比如zookeeper等)。

使用起来很简单。

consul是go语言开发的,因此具有天然的可移植性,支持linux windows, macos等

安装包仅包含一个二进制文件,方便部署,与docker等轻量级容器可以无缝衔接。

1/consul的优势

使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft。

支持多数据中心datacenter,内外网的服务采用不同的端口进行监听。

多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟,分片等情况等。

zookeeper 和 etcd 均不提供多数据中心功能的支持。

支持健康检查。 etcd 不提供此功能。

支持 http 和 dns 协议接口。 zookeeper 的集成较为复杂, etcd 只支持 http 协议。

官方提供 web 管理界面, etcd 无此功能。

综合比较, Consul 作为服务注册和配置管理的新星, 比较值得关注和研究。

2/consul的特性

-   服务发现
-   健康检查
-   Key/Value 存储
-   多数据中心

3/consul的角色

-   client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。
-   server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯。 每个数据中心的 server 数量推荐为 3 个或是 5 个。

图片.png

4/consul的工作原理

图片.png

<1>当Producer启动的时候,会向Consul发送一个post请求,告诉Consul自己的IP和Port.

<2>Consul接收到Producer的注册后,每隔10s(默认)会向Producer发送一个健康检查的请求,检验Producer是否健康

<3>当Consumer发送GET方式请求 /api/address 到Producer时,会先从Consul中拿到一个存储服务IP 和 Port的临时表,从表中拿到Producer的IP和Port后再发送GET方式请求/api/address

<4>该临时表每隔10s会更新,只包含有通过了健康检查的Producer