布式系统的一致性介绍_第1页
布式系统的一致性介绍_第2页
布式系统的一致性介绍_第3页
布式系统的一致性介绍_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 布式系统的一致性介绍一致性是一个抽象的、具有多重含义的计算机术语,在不同的应用场景下有不同的定义 和含义。在传统 IT 时代,一致性通常指强一致性,强一致性通常体现在“你中有我、我中有 你、浑然一体”;而在互联网时代,一致性的含义远远超出了它的原有含义。在讨论互联网时 代的一致性之前,我们先了解一下互联网时代的特点。互联网时代信息量巨大,需要非常强 大的计算能力,不但要求对用户的响应速度快,还要求吞吐量指标向外扩展(即水平伸缩), 于是单节点的服务器无法满足人们的需求,服务节点开始池化。想想那个经典的故事,一只 筷子一折就断,一把筷子怎么折都折不断,可见人多力量大的思想有多么重要。但是人多也

2、 不一定能解决所有事情,还得有序、合理地分配任务,并进行有效的管理,于是互联网时代 谈论最多的话题就是拆分。拆分一般分为水平拆分和垂直拆分,这并不单指对数据库或者缓存的拆分,主要是表达一种分而治之的思想和逻辑。水平拆分指由于单一节点无法满足性能需求,需要扩展为多个节点,多个节点具有一致的功能,组成一个服务池,一个节点服务一部分的请求量,所有节点共同处理大规模高并发的请求量。垂直拆分指按照功能进行拆分,秉着“专业的人干专业的事”的原则,把一个复杂的功能拆分为多个单一、简单的功能,不同的单一功能组合在一起,和未拆分前完成的功能是一样的。由于每个功能职责单一、简单,使得维护和变更都变得更简单、容易、

3、安全,所以更易于产品版本的迭代,还能够快速地进行敏捷发布和上线。在这样的互联网时代,一致性指分布式服务化系统之间的弱一致性,包括应用系统的一致性和数据的一致性。无论是水平拆分还是垂直拆分,都解决了特定场景下的特定问题,然而,拆分后的系统或者服务化的系统的最大问题就是一致性问题:对于这么多具有单一功能的模块,或者同一个功能池中的多个节点,如何保证它们的信息、工作进度、状态一致并且协调有序地工作呢?本节会列举几种不一致的实际案例,在后续章节会陆续针对这些案例所涉及的问题和场景给出不同的解决方案和设计模式。案例 1:下订单和扣库存电商系统中有一个经典的案例,即下订单和扣库存如何保持一致。如果先下订单

4、,扣库存失败,那么将会导致超卖;如果下订单不成功,扣库存成功,那么会导致少卖。这两种情况都会导致运营成本增加,在严重情况下需要赔付。案例 2:同步调用超时服务化的系统间调用常常因为网络问题导致系统间调用超时,即使是网络状况很好的机房, 在亿次流量的基数下,同步调用超时也是家常便饭。系统 A 同步调用系统 B 超时,系统 A 可 以明确得到超时反馈,但是无法确定系统 B 是否已经完成了预设的功能。于是,系统 A 不知道 应该继续做什么,如何反馈给使用方。曾经有一个 B2B 支付产品的客户要求在接口超时的情况下重新通知他们,这在技术上难以 实现,因为服务器本身可能并不知道自己超时,可能会继续正常地

5、返回数据,只是客户端并没 有接收到结果,因此这不是一种合理的解决方案。案例 3:异步回调超时此案例和上一个同步超时的案例类似,不过这是一个受理模式的场景,使用了异步回调返 回处理结果,系统 A 同步调用系统 B 发起指令,系统 B 采用受理模式,受理后则返回成功信息, 然后系统 B 处理后异步通知系统 A 处理结果。在这个过程中,如果系统 A 由于某种原因迟迟 没有收到回调结果,那么这两个系统间的状态就不一致,互相认知的状态不同会导致系统间发 生错误,在严重情况下会影响核心链路上的交易的状态准确性,甚至会导致资金损失。案例 4:掉单在分布式系统中,两个系统协作处理一个流程,分别为对方的上下游,

6、如果一个系统中存在一个请求(通常指订单),另外一个系统不存在,则会导致掉单,掉单的后果很严重,有时也会导致资金损失。案例 5:系统间状态不一致此案例与上面掉单的案例类似,不同的是两个系统间都存在请求,但是请求的状态不一致。案例 6:缓存和数据库不一致交易系统基本上离不开关系型数据库,依赖关系型数据库提供的 ACID 特性,但是在大规 模、高并发的互联网系统里,一些特殊的场景对读操作的性能要求极高,服务于交易的数据库 难以抗住大规模的读流量,通常需要在数据库前增加一层缓存,那么缓存和数据库之间的数据 如何保持一致性?是要保持强一致性还是弱一致性呢?案例 7:本地缓存节点间不一致一个服务池上的多个

7、节点为了满足较高的性能需求,需要使用本地缓存,这样每个节点都 会有一份缓存数据的复制,如果这些数据是静态的、不变的,就永远不会有问题,但是如果这 些数据是半静态的或者经常被更新的,则被更新时各个节点的更新是有先后顺序的,在更新的 瞬间,在某个时间窗口内各个节点的数据是不一致的,如果这些数据是为某个开关服务的,则 想象一下重复的请求进入了不同的节点(在 failover 重试或者补偿的场景下,重复请求是一定会 发生的,也是服务化系统必须处理的),一个请求进入了开关打开的逻辑,同时另外一个请求进 入了开关关闭的逻辑,会导致请求被处理两次,最坏的情况是导致资金损失。案例 8:缓存数据结构不一致这个案例时有发生,某系统需要在缓存中暂存某种类型的数据,该数据由多个数据元素组成, 其中,某个数据元素需要从数据库或者服务中获取,如果一部

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论