啥是佩奇之啥是Consul

简介: 啥是佩奇?不,啥是Consul?本文中小马力求以通俗的语言来讲述一下分布式架构中作为服务注册和服务发现环节极其重要的基础设施之一Consul,是什么、为什么、怎么做。作为入门是个不错的参考。

使用别名的生活场景

别的不说,咱们先来看一个场景。假设你开了一家小型服装公司。那么你的公司在全国铺点代理商,比如福州,南京,杭州等等,你清晰地记着福州站由张三负责,南京站由李四负责,杭州站由王五负责等等,通讯录是这样的:张三159xxx,李四137xxxx,王五xxxx。起初,你的所有通信还是针对于人,比如这批货明日发给张三,那批货下周要发给李四。日复一日,你的公司逐渐壮大,你的代理商遍布全国各地,你早已记不清谁是负责福州站谁是负责南京站的了,而且各个地方的代理商因各种因素时常变更负责人,你经常被这些具体人名和对应的地点搞得焦头烂额。

这个时候你灵机一动,为啥不只以站点名称代替直接联系负责人呢。于是你的通讯录是这样的福州站159xxxx,南京站137xxxx,这样省去了联系时直接记忆对应人名的麻烦,而且你不用关心,哪个站是不是又换人了,又得更改通讯录名称和记名字了。这其实就是一个别名的作用。你只需要知道发给福州站就可以了,不用知道具体是发给谁。

这个生活中的道理被运用到了系统架构中(其实这个有点像域名解析的原理,一个域名可以解析到不同的IP,用户只需要认识域名就行了不需要知道IP也不需要管是否变更了IP,对于用户是透明的)。分布式系统架构中由于各自依赖大量的服务,服务之间的通讯如果使用IP直接通讯,那么在扩容和变更机器的时候将非常麻烦。比如扩容,线上秒杀活动进行了一半,你发现性能达到瓶颈了你说你要暂停下系统,更改下配置文件增加几台机器的IP配置,然后重启一下再进行,这是不可能的。因此,当服务之间的通讯采用别名来进行的时候,如果更换机器IP就无须暂停活动了,因为有中间别名和IP的映射,彼此间只需要知道服务别名就可以了。这就是分布式中的服务注册和服务发现环节。

image.png

未使用服务发现时,用IP和端口通信

服务发现

在大中型分布式系统中,通常都是集群,一个应用系统由多个功能服务组成,且一个功能服务可能多台服务器组成。弹性伸缩服务器数量(增删改机器IP),服务器功能异常无缝切换等显然只通过更改配置文件来处理是无法满足的。如何解决呢?我们引入注册中心,服务治理的概念。实现的方法就是:服务注册,服务发现(核心其实就是键值存储也就是共享数据中心)。

服务发现是指使用一个注册中心来记录分布式系统中的全部服务的信息,以便其他服务能够快速地找到这些已注册的服务。服务发现组件有:Eureka、Consul、etcd、Zookeeper等。接下来小马就带大家一起来看看啥是Consul。

Consul

Consul是由HashiCorp基于Go语言开发的支持多数据中心分布式高可用的服务发布和注册服务软件,采用Raft算法保证服务的一致性,且支持健康检查。其主要特点:服务注册发现、健康检查、键值存储(可用于全局配置)、安全服务通信、多数据中心。

Consul的核心功能就是服务注册和发现,Consul 客户端通过将自己注册到 Consul服务器集群,然后等待调用方去发现服务,实现代理转发到真正的业务系统,还可以基于服务发现做负载均衡,甚至可以在客户端请求到底服务之前进行拦截,做一些基础性的工作,比如身份验证、限流、熔断等等业务系统的前瞻性工作。

Consul的原理

为了保证数据强一致性以及多数据中心的支持,consul采用的是集群的形式出现,相关概念:Consul中包括的2种不同的节点:Server、Client。我们称为server端节点(一般建议至少需要3-5个server端节点),client端节点,其中server端节点会有一个Server-Leader,称为领导者节点,其他的可以均称为候选者。每台server都有自己的数据中心,领导者负责同步存储信息。如下图。但数据强一致性带来的副作用是当数据在同步或者Server在选举Leader过程中,会出现集群不可用,这就像从时间换空间之间的一种取舍是一样的道理。

image.png

阿里1,腾讯,阿里2组成服务发现

整体工作流程如下:

服务A-N把当前自己的网络位置注册到服务发现模块,服务发现就以K-V的方式记录下,K一般是服务名,V就是IP:PORT。服务发现模块定时的轮询查看这些服务能不能访问的了(健康检查)。客户端在调用服务A-N的时候,就先跑去服务发现模块问下它们的网络位置,然后再调用它们的服务。客户端只认服务名不认服务IP和端口。如图。

image.png

服务发现工作流程

Consul实例

以下简单概括了实现流程,

1.安装consul软件:Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,解压后执行可执行文件即可(每台服务发现机器都需要安装);

2.配置好服务端和客户端节点,启动集群中各台机器的consul服务,启动时指定好公网IP,并consul join加入集群才能互通;

3.最后就可以采用api注册服务以及发现服务了。步骤如下图。

image.png

注册服务的数据格式

image.png

使用api注册服务

image.png

使用api发现服务

以上就是consul入门简述了,更多详细资料请参看官方文档。小马要去啃西瓜去了,拜拜。

相关文章
|
SpringCloudAlibaba
SpringCloudAlibaba踩坑日记(二)Relying upon circular references is discouraged and they are prohibited by
SpringCloudAlibaba踩坑日记(二)Relying upon circular references is discouraged and they are prohibited by
3943 0
SpringCloudAlibaba踩坑日记(二)Relying upon circular references is discouraged and they are prohibited by
|
网络协议 算法 Java
04SpringCloud 之 Consul 简介
04SpringCloud 之 Consul 简介
84 0
|
7月前
|
数据可视化 数据处理 Apache
初窥Apache DolphinScheduler
初窥Apache DolphinScheduler
106 0
|
XML NoSQL Java
Springboot 撞上 NebulaGraph——NGbatis 初体验
NGbatis 是一款针对 NebulaGraph + Spring Boot 的数据库 ORM 框架。借鉴于 MyBatis 的使用习惯进行开发。包含了一些类似于 mybatis-plus 的单表操作,另外还有一些图特有的实体-关系基本操作。
350 0
|
人工智能 安全 大数据
华为认证openEuler-第一弹
openEuler是一款开源、免费的操作系统,由openEuler社区运作。当前openEuler内核源于Linux,支持鲲鹏及其它多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景
443 0
|
存储 运维 算法
consul技术分享
上一章《注册中心Eureka》我们介绍了注册中心Eureka,相必大家都对注册中心都有了一定的认识了,在Eureka停止维护之后,Consul就成了其替换方案之一,让我们一起来走进Consul的世界吧!
1086 0
consul技术分享
|
前端开发 JavaScript 开发工具
一文看透 Module Federation 下
一文看透 Module Federation
1131 1
一文看透 Module Federation 下
|
前端开发 容器
一文看透 Module Federation 上
一文看透 Module Federation
1420 2
一文看透 Module Federation 上
|
开发者
SegmentFault 思否加入 ONES
SegmentFault 思否加入 ONES
133 0
|
缓存 运维 Kubernetes
带你畅游k8s schedular
k8s 作为云原生最重要的基石之一,她是怎么运作的呢?你是否了解过她是怎么从众多的 node 节点中筛选出符合 pod 的调度节点,这里会从 k8s 的调度原理和流程开始结合源码内容带你了解整个调度过程。
680 0
带你畅游k8s schedular