前言

服务注册、服务发现作为构建微服务架构得基础设施环节,重要性不言而喻。在当下,比较热门用于做服务注册和发现的开源项目包括zookeeper、etcd、euerka和consul。今天在这里对近期学习consul的一些知识继续浓缩和汇总,作为自己学习过程中的一个总结。

Consul简介

Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等特性。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。

高级特性

1.HTTP API
2.ACL

Consul工作模式

 
Consul工作模式

从上图可以看到,Consul中包括的3种不同的角色:Client、Server、Server-Leader。还有一个在图上没有标出来的角色Agent,一共4个角色,下面会逐一介绍它们的作用。

  • Agent
    1.是一个守护线程
    2.跟随Consul应用启动而启动
    3.负责检查、维护节点同步

  • Client
    1.转发所有请求给Server
    2.无状态,不持久化数据
    3.参与LAN Gossip的健康检查

  • Server
    1.持久化数据
    2.转发请求给Server-Leader
    3.参与Server-Leader选举
    4.通过WAN Gossip,与其他数据中心交换数据

  • Server-Leader
    1.响应RPC请求
    2.服务列表数据同步给Server

Consul工作原理

服务注册的方式

Consul服务注册有两种方式:HTTP API & JSON配置文件
方式一:HTTP API

http://{ip}:8500/v1/agent/service/register/:service

方式二:JSON 配置文件

{
"services": [
{
"id": "serverId",
"name": "serverName",
"tags": [
"primary"
],
"address": "127.0.0.1",
"port": 9003,
"checks": [
{
"id": "api-servie",
"name": "Service 'xx' check",
"http": "http://127.0.0.1:9003/public/health",
"method": "GET",
"interval": "10s",
"timeout": "1s"
}
]
}
]

}

启动Consul增加启动参数-config-dir

nohup ./consul agent -dev -config-dir=/consul-conf/service.json &

服务发现的方式

服务发现的方式同时有两种:HTTP API & DNS Agent
方式一:HTTP API

获取某个service下健康的服务列表信息
http://{ip}:8500/v1/health/service/:service

方式二:DNS Agent

工作流程
 

作者:masterFan
链接:https://www.jianshu.com/p/32dc52f28a14
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

服务发现--初识Consul的更多相关文章

  1. 初识服务发现及Consul框架的简单使用

    初识服务发现及Consul框架的简单使用   1.什么是服务发现? 服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务. DNS 就是一个简单的例子. 当然, ...

  2. ASP.NET Core 微服务初探[1]:服务发现之Consul

    ASP.NET Core 微服务初探[1]:服务发现之Consul   在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件 ...

  3. 服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka

    原文:https://blog.csdn.net/dengyisheng/article/details/71215234 服务发现比较:Consul vs Zookeeper vs Etcd vs ...

  4. 服务发现(consul)搭建

    服务发现(consul)搭建 下载最新版 consul 本人使用的版本为1.5.1,操作系统:window server 2008 consul部署的时候分为客户端和服务端,本次操作服务器2台,客户端 ...

  5. .Net微服务实践(五)[服务发现]:Consul介绍和环境搭建

    目录 介绍 服务发现 健康检查.键值存储和数据中心 架构 Consul模式 环境安装 HTTP API 和Command CLI 示例API介绍 最后 在上篇.Net微服务实践(四)[网关]:Ocel ...

  6. 服务发现之consul的介绍、部署和使用

    什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片:     图中 ...

  7. 服务注册发现consul之三:服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka

    这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...

  8. docker容器的服务发现:consul

    官网:https://www.consul.io 官网文档:https://www.consul.io/docs简介 consul是一个服务发现的组件,在docker世界中他比较流行,主要是consu ...

  9. 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例

    目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...

随机推荐

  1. YAML_17 Playbook 综合

    Playbook1.语法特性如下:(1)"---"首行顶格开始(2)#号注释(3)缩进统一,不同的缩进代表不同的级别,缩进要对齐,空格和tab不能混用(4)区别大小写,键值对k/v ...

  2. 使用echarts生成海友网企业全国分布地图

    不分类别的效果 不同分类的分布效果图 从海友网获取各个企业名单保存进mysql cmfishhelper.py 从下列网址得到各个企业名片的网址保存进表cmfish cds = get_cds() h ...

  3. learning java Runtime 类 获取内存及处理器核数信息

    var rt = Runtime.getRuntime(); System.*)); System.*)); System.*)); System.out.println(rt.availablePr ...

  4. php.exe文件

    一.正常情况PHP文件的访问需要通过浏览器,访问Apache,才能运行一个php文件 php文件在Apache文件夹的站点根目录里 浏览器通过域名文件的形式访问 二.通过浏览器在不需要Apache服务 ...

  5. c语言数组的概念和指针的加减使用

    //数组变量名:就是一个地址:就是数组首元素的地址#include <stdio.h> int main(void) { int age[5] = {10,50,100,22,44}; / ...

  6. 面对对大体量矢量数据ArcGIS的优化方法

    大数据量矢量数据的可视化需要解决的问题,就是如何在可接受的短时间内,能展示大数据量的矢量地图. 解决方案一:采用预先渲染的切片进行展示 切片是预先渲染的数据集,也是响应最快的展示方式.目前ArcGIS ...

  7. subcode

    在思考.查阅subcode时,我发现Magma,Sage Math软件都提供了具体的命令和例子,对subcode的认识比较具象. 例如:Sage Math中有如下命令: C1 = codes.Hamm ...

  8. SiamRPN: High Performance Visual Tracking with Siamese Region Proposal Network

    High Performance Visual Tracking with Siamese Region Proposal Network 2018-11-26 18:32:02 Paper:http ...

  9. HandlerThread: HandlerThread的理解

    Android为了方便对Thread和Handler进行封装,也就是HandlerThread.HandlerThread继承自Thread,说白了就是Thread加上一个Looper.源码: 可以看 ...

  10. Linux下不借助工具实现远程linux服务器上传下载文件

    # Linux下不借助工具实现远程linux服务器上传下载文件 ## 简介 - Linux下自带ssh工具,可以实现远程Linux服务器的功能- Linux下自带scp工具,可以实现文件传输功能 ## ...