分布式系统的概念

一、分布式系统的基本概念

  分布式系统即把数据放在多个能独立运行的计算机(称为结点)上,各个结点利用计算机网络进行信息传递,合作完成共同的任务。分布式系统是建立在网络之上的软件系统,在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。【集群(cluster)是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务。】

1、分布式存储

即通过大量的PC连入互联网,统一对外提供存储服务。分为以下几部分:

(1)分布式文件系统:以文件的方式进行存储,对外提供文件的操作。

(2)分布式键值系统:以kv存储,对外提供GUID操作。

(3)分布式表格系统:用大表格的方式存储,对外提供表格的增删操作。

(4)分布式数据库:以数据库表的形式存储,对外提供SQL的相关语句操作。

2、分布式系统需要解决的问题

(1)数据的分布、负载均衡问题。

(2)主从备份数据一致性问题

(3)容错,故障恢复问题

(4)读写流程问题。

二、分布式系统的CAP理论

1、CAP理论

  CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项
在这里插入图片描述

(1)Consistency 一致性

  更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致(返回给客户端的数据永远是最新的),即数据一致性,一致性是因为有并发读写才有的问题。

  • 对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性

  • 如果能容忍后续的部分或者全部访问不到,则是弱一致性

  • 如果经过一段时间后要求能访问到更新后的数据,则是最终一致性

  CAP中说,不可能同时满足的这个一致性指的是强一致性

(2)Availability 可用性

  可用性即服务一直可用,而且是正常响应时间。对于一个可用性的分布式系统,每一个非故障的节点必须对每一个请求作出响应。所以,一般我们在衡量一个系统的可用性的时候,都是通过停机时间来计算的。
在这里插入图片描述
  通常我们描述一个系统的可用性时,我们说淘宝的系统可用性可以达到5个9,意思就是说他的可用水平是99.999%,即全年停机时间不超过 (1-0.99999)36524*60 = 5.256 min,这是一个极高的要求。

(3)Partition Tolerance分区容错性

  分区容错性即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务

  分区容错性和扩展性紧密相关。在分布式应用中,可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,或者是机器之间有网络异常,将分布式系统分隔未独立的几个部分,各个部分还能维持分布式系统的运作,这样就具有好的分区容错性。

2、CAP的证明

在这里插入图片描述
  作为一个分布式系统,它和单机系统的最大区别,就在于网络,现在假设一种极端情况,N1和N2之间的网络断开了,我们要支持这种网络异常,相当于要满足分区容错性,能不能同时满足一致性和响应性呢?还是说要对他们进行取舍。

  假设在N1和N2之间网络断开的时候,有用户向N1发送数据更新请求,那N1中的数据V0将被更新为V1,由于网络是断开的,所以分布式系统同步操作M,所以N2中的数据依旧是V0;这个时候,有用户向N2发送数据读取请求,由于数据还没有进行同步,应用程序没办法立即给用户返回最新的数据V1,怎么办呢?有二种选择:

  • 第一,牺牲数据一致性,保证可用性响应旧的数据V0给用户(并不是错乱的数据,而是旧数据,只不过不是最新的)

  • 第二,牺牲可用性,保证数据一致性。阻塞等待,直到网络连接恢复,数据更新操作M完成之后,再给用户响应最新的数据V1

  这个过程,证明了要满足分区容错性的分布式系统,只能在一致性和可用性两者中,选择其中一个。

3、CAP的权衡

(1)CA without P

  这种情况在分布式系统中几乎是不存在的。首先在分布式环境下,网络分区是一个自然的事实。因为分区是必然的,所以如果舍弃P,意味着要舍弃分布式系统。那也就没有必要再讨论CAP理论了。这也是为什么在前面的CAP证明中,我们以系统满足P为前提论述了无法同时满足C和A。

  比如我们熟知的关系型数据库,如MySql和Oracle就是保证了可用性和数据一致性,但是他并不是个分布式系统。

(2)CP without A

  一个保证了CP而一个舍弃了A的分布式系统,一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统

  设计成CP的系统其实也不少,其中最典型的就是很多分布式数据库,他们都是设计成CP的在发生极端情况时,优先保证数据的强一致性,代价就是舍弃系统的可用性。如Redis、HBase等,还有分布式系统中常用的Zookeeper也是在CAP三者之中选择优先保证CP的。

(3)AP wihtout C

  要高可用并允许分区,则需放弃一致性。一旦网络问题发生,节点之间可能会失去联系。为了保证高可用,需要在用户访问时可以马上得到返回,则每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性

  这种舍弃强一致性而保证系统的分区容错性和可用性的场景和案例非常多。前面我们介绍可用性的时候说到过,很多系统在可用性方面会做很多事情来保证系统的全年可用性可以达到N个9,所以,对于很多业务系统来说,比如淘宝的购物,12306的买票。都是在可用性和一致性之间舍弃了一致性而选择可用性。

  但是,我们说很多网站牺牲了一致性,选择了可用性,这其实也不准确的。就比如12306买票的例子,其实舍弃的只是强一致性,退而求其次保证了最终一致性。也就是说,虽然下单的瞬间,关于车票的库存可能存在数据不一致的情况,但是过了一段时间,还是要保证最终一致性的

参考:https://www.hollischuang.com/archives/666
https://blog.csdn.net/wuxians/article/details/81275441
https://zhuanlan.zhihu.com/p/32052223

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值