浅谈分布式与集群的概念

各位好友,好久不见,最近由于自己工作的原因+疫情,一大堆事情导致断更,不知道各位大佬有没有想我这个菜鸟,最近也是看到许多的大佬都在发自己的文章,所以我也决定出来献丑了。

img


进入正题,随着互联网生态的迅速发展,中国的网民数量已经达到9亿多(据《报告》数据显示:截至2020年3月28,我国网民规模为9.04亿),越来越多的企业走向互联网;电商,小程序,云服务,短视频等等相关服务异常火爆,在这些互联网产品的背后,是一个很强大的服务后台支撑,强大的数据支撑,这当然离不开分布式服务与集群,正是这两个技术的产生,提升了互联网产业的承载力,也推动了互联网产业的发展。

什么是分布式呢?

这个词语,对程序员朋友来说其实并不陌生,在项目中、面试中,分布式在大型和重型企业都已经运用到了项目之中,对于一些刚刚入行的朋友可能只是听过这些词语:分布式,高并发,QPS每秒查询率(Query Per Second)、吞吐量。下面我来讲讲什么是分布式:

先说概念:

分布式服务是将一个完整的系统拆分为许多服务分散部署在不同的机器上,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过rpc来交互或者是webservice来交互的。逻辑架构设计完后就该做物理架构设计,系统应用部署在超过一台服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,就可算作分布式部署,生产环境下的微服务肯定是分布式部署的,分布式部署的应用不一定是微服务架构的。

名词解释:

SOA :是一种面向服务的架构,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来

RPC : 远程过程调用,通俗的讲, RPC就是要像调用本地的函数一样去调远程函数Webservice : 可以使应用程序以与平台和编程语言无关的方式进行相互通信的一种技术

这时候可能会有朋友还是会一脸懵x

img

其实概念性的东西不太好理解,我给大家讲个故事:

一个电商系统,前期用户量较少,他们将所有的服务都在同一个机器上部署(单机),随着业务的推广,网站的访问量逐渐上升,单机器的承载量有限,系统最终会承载不了更多的用户使用的时候,如何处理呢?

此时:公司的程序员A提出了一个方案,我们可以将系统的用户服务,商品服务,支付服务等服务进行拆分,调用每层服务时,使用定义好的协议调用,这样子服务一个服务器的压力可以分发给多个服务了。

此时,这个程序员A提出的方案,就是分布式的解决方案,将服务进行分发,调用服务时,采用自己定义的调用协议,简单解决承载量的问题。

分布式解决方案

分布式解决方案(分布式服务框架)

•分布式服务框架:提供了服务调用协议,服务注册发现,服务治理与一体的框架,目前主流的分布式框架有:Dubbo、JSF、Motan,都是基于RPC(远程服务调用协议)来实现服务的治理。

使用分布式框架解决了什么呢?如下图,随着系统业务的增加,服务的调用关系会更加复杂,服务之之间的调用关系也会变成如下图这种,相对复杂的调用关系,层级交错,也对服务治理造成了维护上的困扰。

img

分布式架构可以将服务进行治理,将错综复杂的关系统一管理,如下图。

img

一个完整的分布式服务框架才能被大众所认可,目前主流的分布式服务框架的构成如下:

(1)Provider:服务提供者,无论是业务服务,还是一个系统中公用的SAAS,都属于Provider•

(2)Consumer:即发起调用的客户端

(3)Registry:服务注册中心,是分布式服务系统中的一个重要组成模块,管理Provider的Manager,在实际的运行环境中,服务注册中心Registry被动通知或Consumer主动询问,在Provider有节点宕机或新增节点时,客户端也可实时感知到,从而避免了某个Provider被无限调用或是无限闲置

(4)Gateway:网关也是分布式服务框架中不可或缺的部分,每种系统与框架都有自己的一套协议,当异构系统互相调用时,网关的作用即显现出来,Gateway接受各种外部HTTP请求,完成相应的权限校验,报文适配,路由转发到对应的Provider,再将Provider返回的结果传递给异构系统的Consumer,完成异构系统的互相调用

(5)负载均衡,服务分流:Consumer从Registry获得具体的Provider列表后,如何选取合适的Provider,取决与一定的负载均衡算法,常见的算法有轮询法,随机法,源地址哈希,加权轮询,加权随机等

(6)监控:接收来自Consumer和Provider异步上报的性能监控数据,对有风险的节点发出告警

一个优秀的分布式框架,能够将一个系统服务进行解耦,拥有注册中心,服务可以提供和消费,完整地网关,负载,能够使系统的业务被拆分,拆分之后又能无感知的调用服务(就像在用一个模块调用服务)一样。

集群的概念

集群:顾名思义,它是把相同应用复制到不同服务器上,但是逻辑功能上还是单体应用。结合负载均衡策略,将服务的请求压力进行分发,从而能将服务的承载量进行提升,更多的服务肯定能承载更多的请求,用数量增加的方案来支撑更多的业务量。

简单理解:将项目后台功能复制多份,结合网关,负载均衡策略,来支撑更大的业务量,用数量来提升访问量的方式,称为集群部署。

一个小故事来理解(接上一个故事):

系统被拆分之后,每一块的业务不会影响彼此,但是随着用户量的上升,某些服务会存在挂掉的情况,公司的程序员B提出了一个问题,即使我们进行了拆分,只是将每个模块业务拆开了,电商平台,商品服务肯定是使用最多的服务,那这个服务不够用,或者挂掉的时候,我们的业务不就瘫痪了吗?如何做一个备份,提高可用性,或者多个服务备份,提供更多的服务支撑呢?

此时,万能的程序员A又说:我们可以使用集群呀!

万能的程序员将拆分后的服务,进行多次拷贝,将服务的注册中心也进行拷贝,结合nginx的负载均衡,解决了项目某些模块总是被挂掉的问题。

此时:万能的程序员A使用的技术就是集群技术,但是这个技术是在分布式的基础上增加了集群,故这个系统采用的是分布式集群部署方案

下面给大家张图,这张图就是我之前简单设计的分布式集群架构图。

img

分布式集群部署架构才是目前主流的高并发解决方案,在使用集群的与同时,肯定会遇到分布式锁,分布式事务的问题,这个问题我们下次再讲。

我们下次再会,欢迎各位指出问题