(精华)2020年8月22日 微服务 Consul的介绍

举报
愚公搬代码 发表于 2021/10/19 00:32:39 2021/10/19
【摘要】 Consul简介 Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/V...

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

  
 
  • 1

方式二: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"
                           }
                   ]
           }
   ]
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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

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

  
 
  • 1

服务发现的方式

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

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

  
 
  • 1
  • 2

方式二:DNS Agent

工作流程
在这里插入图片描述

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/108135927

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。