老刘是一名即将找工作的研二学生,写博客一方面是复习总结大数据开发的知识点,一方面是希望能够帮助和自己一样自学编程的伙伴。由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进步!
今天给各位小伙伴聊聊分布式系统的数据一致性问题,这个一定要从服务器架构部署的发展历程讲起!文章篇幅较长,请大家耐心观看,精彩千万不要错过!
首先要讲的是集中式服务,那集中式是什么?就是事情都由一台服务器搞定。
而集中式系统就是由一台或多台主计算机组成中心节点,数据集中存储于这个中心节点中,并且整个系统的所有业务都在这个中心节点上,系统所有的功能都由它做。
也就是说,在集中式系统中,每个客户端仅仅负责数据的输入和输出,而数据的存储与控制处理完全交给主机完成。
那集中式服务优点:
结构简单
部署简单
项目架构简单
但是它的缺点也是非常明显:
大型主机的研发和维护成本非常高
大型主机非常昂贵
存在单点故障问题,主机一挂,所有服务终止
大型主机的性能扩展受限于摩尔定律
什么是摩尔定律?
摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。摘自:百度百科
摩尔定律告诉我们:纵向扩展理论上是受限的,所以只能考虑横向扩展,而且从理论上说,横向扩展理论上是不受限的!
那既然纵向扩展受限,我们就去尝试横向扩展,就有了分布式!
1.2. 分布式服务分布式意味着可以采用更多的普通计算机(相对于昂贵的大型机)组成分布式集群对外提供服务。计算机越多,CPU、内存、存储资源等也就越多,能够处理的并发访问量也就越大。
例如一个由分布式系统实现的电子商城,在功能上可能被拆分成多个应用,分别提供不同的功能,组成一个分布式系统对外提供服务。
所以,分布式系统中的计算机在空间上是几乎没有限制的,这些计算机可能被放在不同的机柜上,也可能被部署在不同的机房中,还可能在不同的城市中。
和集中式系统相比,分布式系统的性价比更高、处理能力更强、可靠性更高、也有很好的扩展性。
但是,分布式解决了网站的高并发问题的同时也带来了一些其他问题。
首先,分布式的必要条件就是网络,这可能对性能甚至服务能力造成一定的影响。其次,一个集群中的服务器数量越多,服务器宕机的概率也就越大。另外,由于服务在集群中分布式部署,用户的请求只会落到其中一台机器上,所以,一旦处理不好就很容易产生数据一致性问题。
1.3. 分布式存在的异常1、通信异常:网络不可用(消息延迟或者丢失),会导致分布式系统内部无法顺利进行网络通信,所以可能造成多个节点数据丢失和状态不一致,还有可能造成数据乱序。
2、网络分区:网络不连通,但各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成若干个孤立的区域,分布式系统就出现了局部小集群造成的数据不一致。
3、节点故障:服务器节点出现的宕机的现象。
4、存储数据丢失:对于有状态节点来说,数据丢失意味着状态丢失,通常只能从其他节点读取、恢复存储的状态。解决方案:利用多副本机制。
1.4. 衡量分布式系统的性能指标1、性能:这是一个非常让人头疼的问题,追求高吞吐的系统,往往很难做到低延迟;系统平均响应时间较长时,也很难提高QPS。