聊聊到底什么是分布式

1. 什么是分布式系统

分布式系统是相对于单机系统或者是集中式系统的一个概念,再明确分布式系统的概念之前,先来看下集中式系统的定义

1.1 集中式系统

集中式系统通常由一台性能超强的大型计算机来构成,构成一个中心节点,数据集中存储于这个中心节点上,并且整个系统的所有业务单元都集中部署在这个中心节点上,所有的业务逻辑都集中在这个中心节点上处理

图1

1.1.1 特点

这种集中式系统的最大特点就是结构简单,因为它一般是在一台高性能的单机节点上实现的,这台主机往往价格十分昂贵。由于是单机部署,所以不用考虑各个节点之间的分布式协作问题,所有的逻辑都由这个节点一体化处理。也正是由于单机部署,导致整个单机系统庞大而复杂,难以维护,并且还会存在单点故障,扩展性差等问题。单机系统要扩展,只能选用性能更高的主机,这往往意味着更高的成本,而且单机性能总有上限,也不容易达到性能要求

1.2 分布式系统

分布式系统可以看作是针对单机系统的瓶颈而产生的,采用的是“分治”的思想,将计算和存储分散到不同的网络节点上,彼此协调服务。可以给分布式系统下一个定义:分布式系统是硬件和软件都分布在不同的网络主机上,这些网络主机之间通过传递消息进行通信和协调,共同完成一个任务的系统

图2

1.2.1 特点

  1. 分散性:分布式系统中的节点都是独立运行的,并且可以在空间任意分布,而且可以随时变动。这种分散特性可以有效的提高分布式系统的可用性和伸缩性,并且具备很强的容错能力

  2. 并发性:分布式系统中有多个进程并发的运行,从而实现更高的性能

  3. 异构性:分布式系统中的节点可能具有不同的硬件和操作系统,甚至不同的进程可能有不同的编程语言完成

  4. 容错性:分布式系统可以通过备份、复制以及一些容错算法来避免单点故障,提高系统的可靠性

  5. 可扩展性:分布式系统可以灵活的增加和删减系统资源来适应不同的业务场景

  6. 透明性:分布式系统对外是无感知的,对用户而言感觉系统就是一个整体

2. 单机和集群以及分布式的关系

2.1 单机

单机其实很好理解,如上面集中式系统的图示,比如一个电商系统,最基本的需求,用户需要查看商品,所以需要对外提供商品服务,用户还需要查看物流信息,以及一些售后处理,所以系统还需要提供订单服务和物流服务。除了这些业务服务之外,系统还有一些提供基础功能的服务,比如文件服务,缓存服务等,在单机系统中这些服务都集中在一台机器上运行,这就是单机架构

图3

2.2 集群

单机架构的缺陷和明显,就是单机硬件资源瓶颈,有限的单机资源无法支撑大的业务量。那既然一台机器不行,就用多台机器不就可以了嘛,这样就催生出了集群架构。所以集群可以认为是单机的多副本模式,将原本的单机系统复制多分部署在多台机器上,这样就构成了一个集群。每台机器就称为集群的一个节点,注意集群中的每个节点干的是相同的工作,提供的是相同的服务

图4

在构建集群模式之后,很快就发现一个问题,当一个请求来到的时候,由于多个节点都是提供相同的服务,不可能这个请求在所有节点都跑一遍,那样就没有解决性能瓶颈问题了,只需要让这次请求打到某一个节点上,让这个节点来处理就可以了,这就是后面会详细讨论的负载均衡策略

2.3 分布式

集群的方式虽然可以有效解决单机资源瓶颈的问题,但是在单台机器上所有的业务都在一起,耦合度太高,这个系统庞大而复杂,维护起来也很麻烦。所以以应用系统的业务功能作为出发点,并将每个业务功能拆分成一个完全独立子系统,这些子系统之间通过传递消息进行通信和协调,共同完成一个任务的系统。可以看出,集群是相同应用的多备份部署,同一份代码,功能相同。而分布式是将业务拆成了不同的子业务,每个子业务有单独的服务部署,功能都不一样,这些子业务一起组成一个完整的系统。所以相比于集群,分布式的每个子系统是有区别的

图5

上图所示就是一个分布式系统,并且是一个分布式集群,将电商业务拆成了多个服务部署到了不同的服务器上,并且订单服务,物流服务,还有商品服务都是集群化部署,部署了多份。当然这个例子只是为了说明分布式和集群的关系,现在真正的业务场景一般不会这样部署了,不会一台服务器部署一个应用服务,都是容器化多实例部署

2.4 生活场景类比

比如说有一家饭店,刚开业的时候,由于客户量不大,所以只聘请了一位厨师,这位厨师承包了所有的工作,既负责配菜,又负责炒菜,还负责上菜,由于客户不多,完全能够应付,这种场景就相当于是最开始的单体架构 后来随着饭店名气越来越大,来的客人越来越多,此时一位厨师不够用了,所以聘请了多位厨师,但是每位厨师还是跟以前一样,干所有的活儿,只是加大了人手,并没有分工。这种场景就相当于是集群架构 再后来,饭店规模进一步扩大,为了便于管理和扩张,对厨师岗位进行了分工,有专门配菜的厨师,也有负责炒菜的厨师,有的专门负责上菜。这种场景就相当于是分布式架构

3. 分布式与微服务

熟悉了分布式的概念,这里需要强调一下分布式和微服务的关系 首先看一下微服务的定义,微服务是一种软件设计理念,它是面向服务的,将大的系统或者是服务,拆分成一组小的且相互独立的服务。这些小的服务都是都是独立运行的,并且每个小服务有自己的数据库、业务逻辑,服务之间通过网络进行通信和协作。这组小服务一起协作对外提供服务,共同完成一个系统的任务。 看定义其实微服务和分布式很像,都是分治的思想,加大系统拆成小单元,共同对外提供服务。他们之间的关系可以这样概括: 微服务其实是一种特定的分布式系统架构风格,分布式是一种系统架构的范畴,而微服务是分布式系统的一种具体实现方式,微服务将应用程序拆分成小的、自治的服务单元,通过网络进行通信和协作来完成系统任务。分布式有很多种实现方式,微服务并不是它唯一的实现方式

4. 为什么需要分布式系统

前面简单提到过,分布式系统是针对单机系统的瓶颈而产生的,这里就详细分析下,分布式系统究竟可以解决哪些单机系统解决不了的问题

4.1 高性能

面对现在如今这种海量规模的互联网业务,其实单机的物理硬件已经无法再有效支撑系统的高性能了。虽然说现在也有了一些超级计算机,拥有多核cpu,本身有着很强的计算能力,但是即便是这种超级计算机依然无法突破物理限制,并且随着机器性能越高,其成本也会迅速上升,所以,分布式就自然而然成了解决高性能的一种有效手段。分布式系统通过将多个廉价的计算机组合起来,形成一个拥有足够的cpu,内存以及物理磁盘的系统,可以轻松突破物理瓶颈,实现对高性能的需求,并且更廉价

4.2 可扩展性

现今,很多的业务场景都海量级的,所以很多的应用都是数据密集型的,有着海量的数据存储需求。并且随着业务规模的扩张,用户增长迅速,再加上已有的历史数据,单机的存储根本就无法满足存储需求,所以存储上也需要构建一套分布式存储系统,可以让数据量方便的扩展

4.3 高可用性

前面也分析过,单机系统一个很重大的缺陷就是单点故障,这对于业务而言是完全不可接受的。尤其在现在,基本上都要求服务能够7*24小时不间断的提供服务,这就要求我们的服务必须具备高可用性,显然单机系统无法做到。而分布式系统,可以通过冗余数据备份来保证数据的可用性,同时通过冗余计算实例(跑两个相同的计算任务),一个实例挂掉之后,可以迅速切换到另一个,达到计算高可用

5. 分布式架构与单机架构对比

对比项单机架构分布式架构
部署难易程度简单复杂
架构设计难度难度小难度大
系统隔离性故障影响范围大故障影响范围小
可用性存在单点故障,无法保证高可用高可用
扩展性很差易扩展
系统性能吞吐量小,响应时间快吞吐量大, 响应时间略慢
开发维护系统庞杂,维护复杂系统解藕,子系统相对独立,易于维护
错误排查简单链路长,问题追踪复杂
技术栈系统技术栈统一系统技术栈多样

从表格的对比分析不难发现,分布式其实也存在不少的问题,比如在系统性能上,虽然提高了吞吐量,但是由于服务见的调用链,导致一次请求的路径变长了,有多段网络通信,所以导致响应时间肯定是延长的,所以对于一些响应时间要求很高的业务往往很少用微服务架构,比如在某些游戏领域,后台有的还是单体架构,只是用了集群模式。另外,由于分布式设计到服务拆分,其设计难度也加大了,对于系统故障的排查的难度也比单体上有所增加。 所以,综合来看,分布式系统并非银弹,它和单体架构都有各自的使用场景,在做系统设计的时候要根据实际的业务场景出发,选择合适的架构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值