分布式一致性的提出
在分布式系统中要解决的一个重要问题就是数据的复制。在我们的日常开发经验中,相信很多开发人员都遇到过这样的问题:假设客户端C1将系统中的一个值K由V1更新为V2,但客户端C2无法立即读取到K的最新值,需要在一段时间之后才能 读取到。这很正常,因为数据库复制之间存在延时。
分布式系统对于数据的复制需求一般都来自于以下两个原因:
1、为了增加系统的可用性,以防止单点故障引起的系统不可用
2、提高系统的整体性能,通过负载均衡技术,能够让分布在不同地方的数据副本都能够为用户提供服务
数据复制在可用性和性能方面给分布式系统带来的巨大好处是不言而喻的,然而数据复制所带来的一致性挑战,也是每一个系统研发人员不得不面对的。
所谓分布一致性问题,是指在分布式环境中引入数据复制机制之后,不同数据节点之间可能出现的,并无法依靠计算机应用程序自身解决的数据不一致的情况。简单讲,数据一致性就是指在对一个副本数据进行更新的时候,必须确保也能够更新其他的副本,否则不同副本之间的数据将不一致。
那么如何解决这个问题?一种思路是"既然是由于延时动作引起的问题,那我可以将写入的动作阻塞,直到数据复制完成后,才完成写入动作"。 没错,这似乎能解决问题,而且有一些系统的架构也确实直接使用了这个思路。但这个思路在解决一致性问题的同时,又带来了新的问题:写入的性能。如果你的应用场景有非常多的写请求,那么使用这个思路之后,后续的写请求都将会阻塞在前一个请求的写操作上,导致系统整体性能急剧下降。
总得来说,我们无法找到一种能够满足分布式系统所有系统属性的分布式一致性解决方案。因此,如何既保证数据的一致性,同时又不影响系统运行的性能,是每一个分布式系统都需要重点考虑和权衡的。于是,一致性级别由此诞生:
1、强一致性
这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大
2、弱一致性
这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不久承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态
3、最终一致性
最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。这里之所以将最终一致性单独提出来,是因为它是弱一致性中非常推崇的一种一致性模型,也是业界在大型分布式系统的数据一致性上比较推崇的模型
分布式环境的各种问题
分布式系统体系结构从其出现之初就伴随着诸多的难题和挑战:
1、通信异常
从集中式向分布式演变的过程中,必然引入网络因素,由于网络本身的不可靠性,因此 也引入了额外的问题。分布式系统需要在各个节点之间进行网络通信,因此每次网络通信都会伴随着网络不可用的风险,网络光纤、路由器或是DNS等硬件设备或是系统不可用都会导致最终分布式系统无法顺利完成一次网络通信。另外,即使分布式系统各个节点之间的网络通信能够正常进行,其延时也会大于单机操作。通常我们认为现代计算机体系结构中,单机内存访问的延时在纳秒数量级(通常是10ns),而正常的一次网络通信的延迟在0.1~1ms左右(相当于内存访问延 时的105倍),如此巨大的延时差别,也会影响到消息的收发过程,因此消息丢失和消息延迟变得非常普遍
2、网络分区
当网络由于发生异常情况,导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式系统的所有节点中,只有部分节点之间能够正常通信,而另一些节点则不能----我们将这个现象称为网络分区。当网络分区出现时,分布式系统会出现局部小集群,在极端情况下,这些局部小集群会独立完成原本需要整个分布式系统才能完成的功能,包括对数据的事务处理,这就对分布式一致性提出了非常大的挑战
3、三态
上面两点,我们已经了解到在分布式环境下,网络可能会出现各式各样的问题,因此分布式系统的每一次请求与响应,存在特有的三态概念,即成功、失败、超时。 在传统的单机系统中,应用程序在调用一个函数之后,能够得到一个非常明确的响应:成功或失败。而在分布式系统中,由于网络是不可靠的,虽然在绝大部分情况 下,网络通信也能够接受到成功或失败的响应,当时当网络出现异常的情况下,就可能会出现超时现象,通常有以下两种情况:
(1)由于网络原因,该请求并没有被成功地发送到接收方,而是在发送过程中就发生了消息丢失现象
(2)该请求成功地被接收方接收后,进行了处理,但是在将响应反馈给发送方的过程中,发生了消息丢失现象
当出现这样的超时现象时,网络通信的发起方是无法确定当前请求是否被成功处理的
4、节点故障
节点故障则是分布式环境下另一个比较常见的问题,指的是组成分布式系统的服务器节点出现的宕机或"僵死"现象,通常根据经验来说,每个节点都有可能出现故障,并且每天都在发生
相关推荐
Paxos协议是一个解决分布式系统中一致性问题的协议,它能够在非拜占庭错误的情况下保证分布式系统的可靠性和一致性。CAP理论则是分布式系统设计的一个指导原则,指出在分布式系统中一致性、可用性和分区容忍性这三个...
2. **CAP理论**:由Eric Brewer提出的理论,指出在分布式系统中不能同时保证一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。设计分布式系统时,通常需要在这三者间做出权衡。 ...
### 分布式系统原理知识点梳理 #### 一、前言 - **背景**: 本书旨在填补理论知识与工程实践之间的空白,为初学者提供一份既深入浅出又全面的学习资料。 - **目标**: 通过总结作者在分布式系统开发过程中的理论与...
- **局限性:** 包括网络延迟问题、数据一致性挑战等。 #### 四、结论 分布式操作系统相较于传统的网络操作系统,在处理复杂任务、提高系统性能方面具有明显的优势。特别是在大规模IPTV点播系统这样的应用场景中,...
如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。 框架结构描述 对高并发下的分布式系统...
在数据一致性方面,HDFS采用的是简单的一次性写入、多次读取模式。这意味着一旦文件被创建并关闭后,就不允许修改文件内容,这样设计大大简化了文件系统的管理复杂度。 HDFS的体系结构包含以下几个关键组件:...
ZooKeeper使用了一种称为ZAB(ZooKeeper Atomic Broadcast)的协议,确保了数据的一致性和可靠性。在Dubbo中,ZooKeeper通常用作注册中心,用于服务的发现和管理。 Dubbo和ZooKeeper的关系可以描述为:Dubbo使用...
在分布式系统中,节点的加入、离开以及网络的动态变化会导致环的不稳定性。这些问题包括节点间的通信延迟、网络分区、节点失效等。 #### 2.2 环管理并发控制算法 为了解决这些问题,引入了并发控制算法: - **环...
3. **CAP定理**:讨论在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个特性无法同时达到的理论,以及如何根据业务需求权衡这三者。 4. **分布式数据存储*...
针对分布式事务的实现,文档列举了包括XA方案、TCC方案、本地消息表、可靠消息最终一致性方案、最大努力通知方案、Saga方案在内的六种主流方案,每种方案均配有具体的应用案例及其优缺点分析。最后,简述了作者所在...
10. **分布式系统**:简述分布式操作系统的基本概念,如进程间通信、分布式文件系统和负载均衡,以及分布式系统中的复制和一致性问题。 这份“操作系统(南大版)详细的基础文档”很可能是针对初学者或在校学生设计...
总的来说,李俊才的项目展示了他在分布式系统、微服务、数据库、缓存以及消息队列等多个关键领域的理解和应用,这些都是现代IT行业中非常重要的技术栈。他的经历和项目经验表明他对计算机科学有着深入的理解,并且...
分布式电源的并网给传统的配电网带来了新的挑战和机遇,其中涉及到了许多关键技术问题,包括但不限于:并网控制技术、电能质量管理、系统稳定性和保护策略。在并网控制方面,需要考虑的是分布式电源的运行模式、输出...
8. **分布式系统**:简述分布式系统的基本概念,如并发控制、分布式文件系统和负载均衡。 习题部分则可能涵盖以上各章节的练习题目,帮助巩固理论知识,提高解决问题的能力。习题可能包括选择题、填空题、简答题和...
在大型分布式系统中,如Hadoop和HBase,ZooKeeper被用作重要的协调组件,确保集群的健康运行和数据一致性。例如,在Hadoop中,ZooKeeper用于管理NameNode的高可用性和作业调度;而在HBase中,它用于主RegionServer的...