李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
Consul简介
Leefs
2020-03-14 PM
2134℃
0条
# Consul简介 ### 一、什么是服务发现 微服务的框架体系中,服务发现是不可或缺的一个模块,下面我们通过一张图来简单进行理解: ![Consul简介01.png][1] 图中,客户端的一个接口,需要调用服务A-N。客户端必须要知道所有服务的网络位置,以往的做法是配置在配置文件中,或者有些配置在数据库中。这里就带出这几个问题: > + 1.需要配置N个服务的网络位置,加大配置的复杂性 > + 2.服务的网络位置变化,都需要改变每个调用者的配置 > + 3.集群的情况下,难以做负载(反向代理的方式除外) **总结起来一句话:服务多了,配置就很麻烦** 既然有这些问题,那么服务发现就是解决这些问题的。话说,怎么解决呢?我们再看一张图 ![Consul简介02.png][2] 与之前一张不同的是,加了个服务发现模块。图比较简单,这边文字描述下。服务A-N把当前自己的网络位置注册到服务发现模块(这里注册的意思就是告诉),服务发现就以K-V的方式记录下,K一般是服务名,V就是IP:PORT。服务发现模块定时的轮询查看这些服务能不能访问的了(这就是健康检查)。客户端在调用服务A-N的时候,就跑去服务发现模块问下它们的网络位置,然后再调用它们的服务。这样的方式是不是就可以解决上面的问题了呢?客户端完全不需要记录这些服务网络位置,客户端和服务端完全解耦! ### 二、Consul简介 Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等特性。Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。 ### 三、Consul基本功能 + 1.服务发现:Consul client可以提供服务,例如Api或MySQL,也可以使用Consul client来发现指定服务的提供者。使用DNS或HTTP,应用程序可以轻松找到他们所依赖的服务。 + 2.健康检查:Consul client可以提供任何数量的健康检查,或者与给定的服务(“Web服务器是否返回200 OK”),或与本地节点(“内存利用率是否低于90%”)相关联。可以使用此信息来监控集群运行状况,服务发现组件使用此信息将流量从有问题的主机中移除出去。 + 3.KV Store:应用程序可以使用Consul的分层键/值存储,包括动态配置,功能标记,协调,leader选举等等。简单的HTTP API使其易于使用。 + 4.多数据中心:Consul支持多个数据中心。这意味着Consul的用户不必担心构建额外的抽象层以扩展到多个区域。 ### 四、Consul基本架构 Consul是一个分布式,高可用的系统。 向Consul提供服务的每一个节点都运行一个Consul代理。发现其他服务或获取/设置键/值数据不需要运行代理。代理负责健康检查节点上的服务以及节点本身。 代理与一个或多个Consul服务器通信。Consul服务器是数据存储和复制的地方。服务器自己选出一个leader。虽然Consul可以在一台服务器上运行,但推荐使用3到5台来避免数据丢失的情况。 每个数据中心都建议使用一组Consul服务器。 需要发现其他服务或节点的基础架构组件可以查询任何Consul服务器或任何Consul代理。代理自动将查询转发到服务器。 每个数据中心都运行Consul服务器集群。当跨数据中心服务发现或配置请求时,本地Consul服务器将请求转发到远程数据中心并返回结果。 ### 五、Consul工作模式 ![Consul简介03.png][3] 从上图可以看到,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 *附:参考文章链接* *https://www.jianshu.com/p/32dc52f28a14* *https://www.cnblogs.com/xiaohanlin/p/8016803.html* [1]: https://lilinchao.com/usr/uploads/2020/03/338558068.png [2]: https://lilinchao.com/usr/uploads/2020/03/2093503413.png [3]: https://lilinchao.com/usr/uploads/2020/03/3565939286.png
标签:
微服务
,
高并发
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/728.html
上一篇
Zookeeper简介
下一篇
Ribbon简介
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Typora
Docker
Livy
Zookeeper
GET和POST
JavaScript
Spark SQL
Sentinel
Golang
Hadoop
Hive
Java阻塞队列
gorm
NIO
Spark Core
Kafka
nginx
设计模式
并发线程
算法
Flink
BurpSuite
稀疏数组
JavaWeb
排序
链表
高并发
Thymeleaf
数据结构
Elasticsearch
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭