Consul 是什么?

Consul 官方站点:https://www.consul.io/

首先,官方介绍是:Consul 是一种服务网格的解决方案,在 Consul 中,提供了服务发现、配置、分段等控制管理平台,Consul 中的每项功能都可以单独使用,也可以一起使用来构建完整的服务网格;在 Consul 内部,有一个简单的代理服务,所以在安装 Consul 后,马上就可以开始使用 Consul ;当然,Consul 也支持集成第三方代理,比如 Envoy。

以上,是官方的介绍,我第一次看的时候也是非常的懵逼,因为这里面涉及了太多的专业词汇,下面就说说自己的理解。

Consul 是一个服务组件,在用户下载 Consul 的安装包后,可以立即运行它,或者通过其它托管程序运行它,Consul 只有一个程序包,无需另行安装;当运行 Consul 的时候,需要为其指定一些必须的参数,以供 Consul 在运行时使用;
比如参数 -data-dir 表示指定 Consul 存放数据的目录。

服务注册

Consul 内部侦听 8500 端口,提供给 Consul 的客户端注册服务,比如张三开发了一个购物车程序,该购物车程序包含了“加入购物车”、“清空购物车” 两个接口,张三在开发购物车程序的时候,使用了 Consul 的客户端包组件,在程序运行起来以后,购物车程序就自动的连接到 Consul 的 8500 端口,注册了一个服务,该服务被命名为“购物车程序”,此时,Consul 并不知道 “购物车程序”有多少个接口,Consul 只知道 “购物车程序”的服务地址、端口。

服务发现

在“购物车程序”注册到 Consul 后,Consul 也仅仅知道有这么一个服务注册进来了,并且还配置了健康检查, Consul 会定时的去连接 “购物车程序”,确保其还处于可提供服务的状态,任何人(程序)都可以通过 Consul 的外部地址访问 Consul 内部的已注册的服务列表,从而获得真实的服务地址,然后调用该真实地址,获得结果。

集群

Consul 是一个分布式的解决方案,可以部署多个 Consul 实例,确保数据中心的持续稳定,在 Consul 集群中,内部采用投票的方式选举出 leader,然后才开始运行整个集群,只有正确选举出 leader 后,集群才开始工作,当一个服务注册到 Consul 后,集群将该服务进行同步,确保 Consul 集群内的每个节点都存储了该服务的信息;然后,Consul 集群将对该服务进行健康检查和投票,超过半数通过,即认为该服务为正常(或者异常);一旦被投票认定为异常的服务,该服务将不会被外部发现(不可访问),在此过程中,Consul 将持续的对该异常的服务进行检查,一旦服务恢复,Consul 即刻将其加入正常服务。

服务器和客户端

Consul 支持两种运行的方式,即 server 和 client 模式,当一个 Consul 节点以 server 模式运行的时候,就表示该 Consul 节点会存储服务和配置等相关信息,并且参与到健康检查、leader 选举等服务器事务中,与之相反的是,client 模式不会存储服务信息。

数据中心

每个 Consul 节点都需要加入一个命名的数据中心(DataCenter),一个节点上,可以运行多个数据中心,数据中心的作用在于应用隔离,相当于服务分组

键值存储

在 Consul 内部,提供了简单的数据存储,也就是 key/value 系统,kv 系统非常强大,它的作用包括允许节点动态修改配置、执行 leader 选举、服务发现、集成健康检查、或者其它你想要存储到 Consul 中的内容

Consul 的架构

好了,现在可以来看一下官方的这张架构图了

上图有两个数据中心,这两个数据中心内部的数据是不会同步的,他们是独立运行的,包括其内部的健康检查、leader 选举等等都是独立的,结合上面的介绍,应该可以很容易的读懂这张图。

Consul 能做什么?

通过上面的介绍,我们了解到了 Consul 其实就是一个分布式的服务管理平台,Consul 本身不具备网关的能力,所以,在一般的业务系统中,如果要应用 Consul ,通常的做法是在 Consul 的 server 节点上安装一个 nginx,在 Consul 的服务注册完成后,生成 nginx 的配置文件并重新加载它;此时,Consul 看上去好像是通过 nginx 具有了网关的能力,实际上,他们直接毫无关系;Consul 生成的 nginx 配置文件和我们手写的 nginx 配置文件没有太多的不同,都是一样的,其实就是把手写 nginx 这种体力活给自动化了。

如果不想这么麻烦的话怎么办呢?这就引入了服务网关的概念,以 .NETCore 为例子,目前比较火热的就是 ocelot+consul 的搭配,通过在服务中嵌入 ocelot 和 consul 的客户端,自动的完成服务注册到(Consul)和服务发现(ocelot读取Consul中的服务);当用户访问某个 url 的时候,ocelot 将会根据路由将用户请求转发到从 Consul 拉取到的真正的服务中;对于 ocelot ,篇幅较长,这里不作展开。

结束语

开篇纯理论了,下一篇再上点实战的干活,就当学习记录吧

Consul初探-在深交之前先认识的更多相关文章

  1. Consul初探-集成ocelot

    前言 由于 Consul 的高可用性.丰富的API.友好的 Web 控制台界面等特点,Consul 的发展非常迅猛,得益于 .NETCore 社区的快速发展和社区成员的贡献,我们现在可以非常方便快速的 ...

  2. Consul初探-服务注册和发现

    前言 经过上一篇的学习,现在已经来到了服务注册发现环节:Consul 的核心功能就是服务注册和发现,Consul 客户端通过将自己注册到 Consul 服务器集群,然后等待调用方去发现服务,实现代理转 ...

  3. Consul初探-从安装到运行

    前言 伟大领袖毛主席说过:实践是检验真理的唯一标准!经过上一篇的学习,我基本掌握了 Consul 的基本原理,接下来就是动手实践了:Consul 的部署方式分为两种,分别是二进制包和docker方式, ...

  4. Consul-template+nginx实现自动负载均衡

    前言 consul-template 是 Consul 的一个守护程序,使用 consul-template 可以方便快速的实现对 Consul Key/Value 存储系统的访问,可以从 KV 系统 ...

  5. 来,Consul 服务发现入个门(一看就会的那种)

    前言 在微服务架构中,对于一个系统,会划分出多个微服务,而且都是独立开发.独立部署,最后聚合在一起形成一个系统提供服务.当服务数量增多时,这些小服务怎么管理?调用方又怎么能确定服务的IP和端口?服务挂 ...

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

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

  7. ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览

    在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...

  8. 服务网格Istio初探

    1. 服务网格Istio初探 1.1. 什么是Istio 它是一个完全开源的服务网格.什么是服务网格? 这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互.随着规模和复杂性的增长,服务 ...

  9. Consul 服务注册与服务发现

    上一篇:Mac OS.Ubuntu 安装及使用 Consul 1. 服务注册 对 Consul 进行服务注册之前,需要先部署一个服务站点,我们可以使用 ASP.NET Core 创建 Web 应用程序 ...

随机推荐

  1. NAT的三种类型

    一.静态NAT 内部本地地址一对一转换成内部全局地址,相当内部本地的每一台PC都绑定了一个全局地址,即使这个地址没有被使用,其他的电脑也不能拿来转换使用,这样容易造成IP地址的资源浪费,一般是用于在内 ...

  2. 联万物,+智能,为行业,华为云升级OceanConnect IoT全栈云服务

    [中国,上海,2019年9月19日] 9月18日,在HUAWEI CONNECT 2019期间,华为云CTO张宇昕在华为云峰会上升级OceanConnect IoT全栈云服务,发布包括端.边.管.云. ...

  3. 转:<context:component-scan>使用说明

    在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类 ...

  4. Windows下创建Python虚拟环境的两种方法:

    在实际的项目开发中,我们会根据自己的需求去下载各种相应的框架库,但是每个项目可能使用的库不一样,或者版本不一样等等等.为了避免这些因素对我们的项目造成一些不必要的影响,我们可能需要来回的切换或者装卸等 ...

  5. luogu P2135 方块消除 |dp

    题目描述 Jimmy最近迷上了一款叫做方块消除的游戏.游戏规则如下:n个带颜色方格排成一列,相同颜色的方块连成一个区域(如果两个相邻方块颜色相同,则这两个方块属于同一区域).为简化题目,将连起来的同一 ...

  6. 使用ASP.NET Core 3.x 构建 RESTful API - 3.3 状态码、错误/故障、ProblemDetails

    HTTP状态码 HTTP状态码会告诉API的消费者以下事情: 请求是否执行成功了 如果请求失败了,那么谁为它负责 HTTP的状态码有很多,但是Web API不一定需要支持所有的状态码.HTTP状态码一 ...

  7. 移动开发在路上-- IOS移动开发系列 多线程三

    这一次说一点概念性的东西,也是为后边做一些基础 HTTP协议的基本概念 http协议的基本概念 全称“超文本传输协议”,浏览器和服务器之间的通信规则 HTTp协议永远都是客户端发起的请求,服务器回送响 ...

  8. [TimLinux] HTTP cookie与session技术

    1. HTTP特点 基于TCP/IP协议实现,上层应用协议 版本:HTTP/1.0, HTTP/1.1 HTTP/1.0默认短连接,HTTP/1.1默认长连接 HTTP请求与响应的无状态性 无状态性与 ...

  9. 第4节:Java基础 - 必知必会(中)

    第4节:Java基础 - 必知必会(中) 本小节是Java基础篇章的第二小节,主要讲述抽象类与接口的区别,注解以及反射等知识点. 一.抽象类和接口有什么区别 抽象类和接口的主要区别可以总结如下: 抽象 ...

  10. BZOJ [ZJOI2007]矩阵游戏(二分图匹配)

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6390  Solved: 3133[Submit][Stat ...