谈谈那些被踩过的一致性的坑

作者简介:卢璐,阿里技术专家

导语:说到分布式一定跑不掉一致性。一致性涉及的面域很广。什么ACID事务咯,CAP咯,2PC咯,BASE咯这些概念大家肯定也都懂,网上这样的介绍文章也是一大把。但是是否会用,是否用得上又是另一个问题。本篇文章不讲这些高大上的理论。我们把问题聚焦在一个用户请求从入口开始在分布式系统这个链路上如何调用来保证一致。这也是日常最常见的需求场景,结合案例讲讲它的实现以及可能存在的坑。


什么是一致性:简单说就是一个请求过来,上游看到的结果和下游看到的结果一样(系统角度)。或者说用户看到的和实际发生的结果一样(业务角度)


小王接到一个需求,做一个积分兑换页面,输入兑换的奖品数,只需要消耗10个积分,就可以兑换指定个数的奖品,先到先得。

谈谈那些被踩过的一致性的坑-1

看来需求很简单,写个db记录一下积分,然后调用一下兑换接口,带上输入的兑换奖品参数就好了嘛,于是小王快速写好代码,提测了。结果遇到了大量的问题。让我们依次分析一下。


为了简化模型,我们假设这里就只有3个节点

  • 前端页面节点A:和用户交互的节点,用于用户通过页面触发积分兑换的功能,页面会调后端接口
  • 应用后端节点B:实现这次互动的节点,用于检查用户情况,判断用户安全性,扣减用户积分,并最终调用兑换奖品接口
  • 平台后端节点C:用于提供兑换奖品的接口,做实际兑换奖品的操作

第一章:幂等控制

问题1:重试异常