• 关于Consul


    一.Consul是什么

    Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。

    Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等特性。

    Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。

    Consul是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。Consul 是分布式的、高可用的、 可横向扩展的。

    二.Consul能做什么

    1、服务注册/发现

    为什么微服务架构下就需要做服务注册和服务发现呢?微服务的目标就是要将原来大一统的系统架构,拆分成细粒度的按功能职责分成的小系统,

    这样就会出现很多小的系统,部署的节点也会随之增加。试想一下,如果没有一个统一的服务组件来管理各系统间的列表,微服务架构是很难落地实现的。

    Consul提供的服务注册/发现功能在数据强一致性和分区容错性上都有非常好的保证,但在集群可用性下就会稍微差一些(相比Euerka来说)。

    2、数据强一致性保证

    Consul采用了一致性算法Raft来保证服务列表数据在数据中心中各Server下的强一致性,这样能保证同一个数据中心下不管某一台Server Down了,

    请求从其他Server中同样也能获取的最新的服务列表数据。数据强一致性带来的副作用是当数据在同步或者Server在选举Leader过程中,会出现集群不可用。

    3、多数据中心

    Consul支持多数据中心(Data Center),多个数据中心之间通过Gossip协议进行数据同步。多数据中心的好处是当某个数据中心出现故障时,其他数据中心可以继续提供服务,提升了可用性。

    4、健康检查

    Consul支持基本硬件资源方面的检查,如:CPU、内存、硬盘等

    5、Key/Value存储

    Consul支持Key/Value存储功能,可以将Consul作为配置中心使用,可以将一些公共配置信息配置到Consul,然后通过Consul提供的 HTTP API来获取对应Key的Value。

    6、Consul 的使用场景

    (1)docker 实例的注册与配置共享;

    (2)coreos 实例的注册与配置共享;

    (3)vitess 集群

    (4)SaaS 应用的配置共享

    (5)与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件

    三.Consul原理

    架构图:

    Agent:

    (1)是一个守护线程;

    (2)跟随Consul应用启动而启动;

    (3)负责检查、维护节点同步;

    Client

    (1)转发所有请求给Server;

    (2)无状态,不持久化数据;

    (3)参与LAN Gossip的健康检查;

    Server

    (1)持久化数据;

    (2)转发请求给Server-Leader;

    (3)参与Server-Leader选举;

    (3)通过WAN Gossip,与其他数据中心交换数据;

    Server-Leader

    (1)响应RPC请求;

    (2)服务列表数据同步给Server;

     

    1、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 算法来保证一致性。

    2、consul 去中心化思想实现

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

    Serf提供成员关系,纠错检查,广播等功能。gossip协议主要是基于UDP,实现任意node-to-node间的通信。

    Consul正是使用serf 提供的gossip协议来管理成员和广播消息到集群。

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

    其中节点间的交互方式主要以下有三种:

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

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

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

    3、consul与其他框架差异

  • 相关阅读:
    JPA与Hibernate的关系
    EJB里的问题解答
    EJB与JPA的关系
    EJB的魅惑来源
    EJB简介
    MyEclipse如何恢复删掉的文件
    EasyUI的功能树之扁平化
    EasyUI的功能树之异步树
    Spring AOP的日志记录
    简单理解IoC与DI
  • 原文地址:https://www.cnblogs.com/ZJOE80/p/13026563.html
Copyright © 2020-2023  润新知