服务发现--初识Consul
前言
服务注册、服务发现作为构建微服务架构得基础设施环节,重要性不言而喻。在当下,比较热门用于做服务注册和发现的开源项目包括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中包括的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的更多相关文章
- 初识服务发现及Consul框架的简单使用
初识服务发现及Consul框架的简单使用 1.什么是服务发现? 服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务. DNS 就是一个简单的例子. 当然, ...
- ASP.NET Core 微服务初探[1]:服务发现之Consul
ASP.NET Core 微服务初探[1]:服务发现之Consul 在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件 ...
- 服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
原文:https://blog.csdn.net/dengyisheng/article/details/71215234 服务发现比较:Consul vs Zookeeper vs Etcd vs ...
- 服务发现(consul)搭建
服务发现(consul)搭建 下载最新版 consul 本人使用的版本为1.5.1,操作系统:window server 2008 consul部署的时候分为客户端和服务端,本次操作服务器2台,客户端 ...
- .Net微服务实践(五)[服务发现]:Consul介绍和环境搭建
目录 介绍 服务发现 健康检查.键值存储和数据中心 架构 Consul模式 环境安装 HTTP API 和Command CLI 示例API介绍 最后 在上篇.Net微服务实践(四)[网关]:Ocel ...
- 服务发现之consul的介绍、部署和使用
什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片: 图中 ...
- 服务注册发现consul之三:服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...
- docker容器的服务发现:consul
官网:https://www.consul.io 官网文档:https://www.consul.io/docs简介 consul是一个服务发现的组件,在docker世界中他比较流行,主要是consu ...
- 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例
目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...
随机推荐
- 结构化异常SEH处理机制详细介绍(二)
本文将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型.SEH实际包含两个主要功能:结束处理(termin ...
- 细说 call、apply 以及 bind 的区别和用法
call 和 apply 的共同点 它们的共同点是,都能够改变函数执行时的上下文,将一个对象的方法交给另一个对象来执行,并且是立即执行的. 为何要改变执行上下文?举一个生活中的小例子:平时没时间做饭的 ...
- 【概率论】5-8:Beta分布(The Beta Distributions)
title: [概率论]5-8:Beta分布(The Beta Distributions) categories: - Mathematic - Probability keywords: - Th ...
- bee api new
bee api appcode -conn="root:root@tcp(127.0.0.1:3306)/test"
- 坑:jmeter代理服务器录制脚本出现target controller is configured to "use recording Controller" but no such controller exists...
配置好代理服务器后,运行代理服务器 run 报错: target controller is configured to "use recording Controller" bu ...
- java连数据库和数据库连接池踩坑日记(一)-------oracle连接的一些问题
最近接触oracle有点多,同时也在配置数据库连接池,坑也就踩多了,记录下. 事情还没有结束,没时间记录问题,很多事情都忘了,过了国庆再写的话可能就真的全忘了吧……而且不单单是数据库问题,还有一些数据 ...
- FCS省选模拟赛 Day3
Description Solution T1 game 咕咕咕 T2 string fail树各个节点的深度之和怎么求? 我们考虑每个前缀的深度是什么 发现这个值就相当于有多少个前缀等于它的后缀 ...
- Python中单引号和双引号的作用
一.单引号和双引号 在Python中我们都知道单引号和双引号都可以用来表示一个字符串,比如 str1 = 'python' str2 = "python" str1和str2是没有 ...
- windows 共享文件夹,和共享打印机
达成的情形,目标主机上登陆用户设置密码,其他pc上需要目标主机的用户和密码才能访问其共享文件夹 步骤:1.目标主机,设置文件夹共享 在文件夹上右键-属性,点击共享选项卡,然后点击共享按钮,继续点 ...
- 响应面分析 | response surface analysis | R代码
先开题,慢慢补充. 参考: 什么是响应面(RSM)分析 Response-Surface Methods in R, Using rsm In-class Examples with R Code R ...