使用别名的生活场景
别的不说,咱们先来看一个场景。假设你开了一家小型服装公司。那么你的公司在全国铺点代理商,比如福州,南京,杭州等等,你清晰地记着福州站由张三负责,南京站由李四负责,杭州站由王五负责等等,通讯录是这样的:张三159xxx,李四137xxxx,王五xxxx。起初,你的所有通信还是针对于人,比如这批货明日发给张三,那批货下周要发给李四。日复一日,你的公司逐渐壮大,你的代理商遍布全国各地,你早已记不清谁是负责福州站谁是负责南京站的了,而且各个地方的代理商因各种因素时常变更负责人,你经常被这些具体人名和对应的地点搞得焦头烂额。
这个时候你灵机一动,为啥不只以站点名称代替直接联系负责人呢。于是你的通讯录是这样的福州站159xxxx,南京站137xxxx,这样省去了联系时直接记忆对应人名的麻烦,而且你不用关心,哪个站是不是又换人了,又得更改通讯录名称和记名字了。这其实就是一个别名的作用。你只需要知道发给福州站就可以了,不用知道具体是发给谁。
这个生活中的道理被运用到了系统架构中(其实这个有点像域名解析的原理,一个域名可以解析到不同的IP,用户只需要认识域名就行了不需要知道IP也不需要管是否变更了IP,对于用户是透明的)。分布式系统架构中由于各自依赖大量的服务,服务之间的通讯如果使用IP直接通讯,那么在扩容和变更机器的时候将非常麻烦。比如扩容,线上秒杀活动进行了一半,你发现性能达到瓶颈了你说你要暂停下系统,更改下配置文件增加几台机器的IP配置,然后重启一下再进行,这是不可能的。因此,当服务之间的通讯采用别名来进行的时候,如果更换机器IP就无须暂停活动了,因为有中间别名和IP的映射,彼此间只需要知道服务别名就可以了。这就是分布式中的服务注册和服务发现环节。
未使用服务发现时,用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过程中,会出现集群不可用,这就像从时间换空间之间的一种取舍是一样的道理。
阿里1,腾讯,阿里2组成服务发现
整体工作流程如下:
服务A-N把当前自己的网络位置注册到服务发现模块,服务发现就以K-V的方式记录下,K一般是服务名,V就是IP:PORT。服务发现模块定时的轮询查看这些服务能不能访问的了(健康检查)。客户端在调用服务A-N的时候,就先跑去服务发现模块问下它们的网络位置,然后再调用它们的服务。客户端只认服务名不认服务IP和端口。如图。
服务发现工作流程
Consul实例
以下简单概括了实现流程,
1.安装consul软件:Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,解压后执行可执行文件即可(每台服务发现机器都需要安装);
2.配置好服务端和客户端节点,启动集群中各台机器的consul服务,启动时指定好公网IP,并consul join加入集群才能互通;
3.最后就可以采用api注册服务以及发现服务了。步骤如下图。
注册服务的数据格式
使用api注册服务
使用api发现服务
以上就是consul入门简述了,更多详细资料请参看官方文档。小马要去啃西瓜去了,拜拜。