什么是分布式系统

分布式系统介绍

        分布式系统是由一组通过网络进行通信,为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务,其目的利用更多的机器处理更多的数据

        首先需要明确的是,只有单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存,加磁盘,使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为分布式系统需要解决的问题本身就和单机系统一样,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题

        在很多文章中,主要讲分布式系统分为分布式计算(computation)与分布式存储(storage)。计算与存储是相辅相成的,计算需要数据,要么来自实时的流量,要么来自存储数据,而计算的结果也需要存储。在操作系统中,对计算与存储有非常详尽的讨论,分布式系统只不过将这些理论推广到多个几点罢了

        那么分布式系统怎么将任务分发到这些计算机节点呢,很简单的思想,分而治之,即分片(partiton)。对于计算,那么就是对计算任务进行拆分,每个节点处理一些,最终汇总就行了,这就是MapReduce的思想,对于存储,更好理解,每个节点存一部分数据就行了,当数据规模变大的时候,Partiton是唯一的选择,同时也会带来一些好处:

  • 提升性能和并发,操作被分发到不同的分片,互相独立
  • 提升系统的可用性,即使部分分片不能用,其他分片不会受到影响

       理想情况下,有分片就行了,但事实的情况却不大理想。原因在于,分布式系统中有大量的节点,且通过网络通信。单个节点故障(进程crash、断电、磁盘损坏)是个小概率事件,但整个系统的故障率会随节点的增加而指数级增加,网络通信也可能出现断网、高延迟的情况。在这种一定会出现的"异常"情况下,分布式系统还是需要继续稳定的对外提供服务,即需要较强的容错性。最简单的办法就是冗余或者复制集(Replication),即多个节点负责同一个任务,最为常见的就是分布式存储中,对个节点负责存储同一份数据,以增强可用性与可靠性

       Partiton(分片)和Replication(复制)是解决分布式系统问题的一记组合拳,很多具体的问题都可以用这个思路去解决,但往往是为了解决一个问题,会引入更多的问题,比如为了可用性与可靠性保证,引用了冗余(复制集),有了冗余,各个副本的一致性问题就会变得更头疼,一致性在系统的角度和用户的角度又有不同的等级划分,如果要保证强一致性,那么会影响可用性和性能,在一些应用是难以接受的,在分布式系统中,没有最佳的选择,都是需要权衡,做出最合适的选择

分布式系统的挑战

        分布式系统需要大量的机器协作,面临诸多的挑战

        第一,异构的机器与网络:分布式系统中的机器,配置不一样,其上运行的服务也可能由不同的语音、架构实现,因此处理能力也不一样,节点间通过网络连接,而不同的网络的带宽,延时,丢包率又不一样,怎么保证大家齐头并进,共同完成目标,这是个不小的挑战

        第二,普通的节点故障:虽然单节点故障概率较低,但节点数达到一定规模,出故障的概率就会变更了。分布式系统需要保证故障发生的时候,系统仍然是可用的,这就需要监控节点的状态,在节点故障的情况下将该节点负责的计算、存储任务转移到其他节点

        第三,不可靠的网络:相比单机过程调用,网络通信是不可靠的,节点A向节点B发出请求,在约定的时间内没有收到节点B的响应,那么B是否处理了请求,这个是不确定的,这个不确定带来了诸多问题,最简单的,是否需要重试请求,节点B会不会多次处理同一个请求

总而言之,分布式的挑战来自不确定性,不确定计算机什么时候crash,断电,不确定磁盘什么时候损坏,不确定每次网络通信要延迟多久,也不确定通信对端是否处理了发送的信息。而分布式系统放大了这个不确定性,所有有诸多的分布式理论、协议来保证这种不确定性的情况下,系统还能持续正常的工作。

分布式系统特性与衡量标准

        可扩展性:分布式系统根本目标就是为了处理单个计算机无法处理的任务,当任务增加的时候,分布式系统的处理能力需要随之增加,简单来说,要比较方便的通过增加机器来应对数据量的增长,同时,当任务规模缩减时,可以撤掉一些多余的机器,达到动态伸缩的效果

       可用性与可靠性:一般来说,分布式系统需要7*24小时提供服务。可用性是指系统在各种情况对外提供服务的能力,简单来说,可以通过不可用时间于正常服务时间的比值来衡量,而可靠性是指计算结果正确、存储的数据不丢失

       高性能:不管是单机还是分布式系统,大家都非常关注性能,不同的系统对性能的衡量标准是不同的,最常见的:高并发,单位时间内处理的任务越多越好,低延迟:每个任务的平均时间越少越好

       一致性:分布式系统为了提高可用性可靠性,一般会引入冗余(复制集),那么如何保证这些节点上的一致性能,这就是分布式系统不得不面对的一致性问题,一致性越强,对用户越友好,但会制约系统的可用性,一致性等级越低,用户就需要兼容数据不一致的情况,但系统的可用性,并发性会高很多

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值