天天看点

服务发现系统之consul入门

一、什么是consul?

  Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,是由HashiCorp公司用Go语言开发的,基于Mozilla Public License 2.0的协议开源的。具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。

  与Consul同类的产品有:Zookeeper、Doozer、Etcd。

二、特性

  1.服务注册:通过HTTP API或DNS,告诉服务注册中心有新的服务加入。

  2.服务发现:通过HTTP API或DNS,可以知道目标服务的地址和端口。

  3.健康检查:支持多种方式,HTTP、TCP、Docker、Shell脚本定制化监控。

  4.配置模板:Consul Template负责定期从服务注册中心获取信息,如果有变化自动更新配置文件并重新加载。

  5.可视化Web界面

  6.支持多数据中心

补充:

  什么是服务注册?

  答:一个服务将其位置信息在“中心注册节点”注册的过程。该服务一般会将它的主机IP地址以及端口号进行注册,有时也会有服务访问的认证信息,使用协议,版本号,以及关于环境的一些细节信息。

  什么是服务发现?

  答:服务发现可以让一个应用或者组件发现其运行环境以及其他应用或组件的信息。用户配置一个服务发现工具就可以将实际容器跟运行配置分离开。常见配置信息包括:ip、端口号、名称等。

三、应用场景

  1.docker、CoreOS实例的注册于配置共享

  2.Vitess集群

  3.SaaS应用的配置共享

  4.与confd服务集成,动态生成nginx与haproxy配置文件

四、优势

  1.使用Raft算法来保持一致性,比paxos算法更直接,zookeeper采用的是paxos算法

  2.支持多数据中心,内外网的服务采用不同的端口进行监听,可以避免单点故障;zookeeper等不支持多数据中心

  3.支持健康监测

  4.支持http协议与dns协议接口 

  5.提供web界面

五、系统架构

服务发现系统之consul入门

    这是Consul官网提供的一个典型的系统结构图。

  Consul建议每个DataCenter的Server的节点最好在3-5个,主要是方便在失败以及数据复制的性能;Client的数量是任意的。

  DataCenter的所有节点都会参与到Gossip协议;Client到Server会通过LAN Gossip。所有的节点都在Gossip pool中,通过消息层来实现节点之间的通信以达到故障检测的目的,并且不需要给Client配置Server的地址。

  Server节点还会参与到WAN Gossip池中,通过Server节点就可以让DataCenter之间做简单的服务发现。比如增加一个Datacenter就只需要让Server节点参与到Gossip Pool中。并且,DataCneter之间的通信和服务请求就可以通过WAN Gossip 来随机请求另外一个DataCenter的Server节点,然后被请求的Server 会再把请求foword到本DataCenter的leader节点。

  Server leader的选举是通过Consul的Raft算法实现的,leader节点需要负责所有的请求和处理,并且这些请求必须复制给所有的其他非leader的server节点。非leader节点接收到RPC请求的时候也会forward到leader节点。