专栏首页编程一生数据一致性-对账

数据一致性-对账

概念

一致性分为强一致性和弱一致性。 强一致性的协议和手段主要有:二阶段提交(2PC)、三阶段提交(3PC)、TCC(Try-Confirm-Cancel)补偿型。这里面经常有人把两阶段提交和TCC补偿型混淆。二阶段提交实际上业务逻辑是在提交之前做的,两阶段只是事务控制的两个阶段。而TCC是将业务逻辑分为try、confirm和cancel三个阶段。举个例子:比如一个人要预售苹果,有两种销售策略。一种让用户先付钱,根据用户需求量准备足够的苹果。另一种是让用户先付钱同时声明到时候先到先得,没抢到的就退款。第一种就是二阶段提交,第二种就是TCC。弱一致性在分布式系统中常用的是一种特例:最终一致性。在工作中,最终一致性通常通过补单和对账来解决。补单主要指在运行时同时检查返回值,如果返回值为失败,会重新处理(补单处理)。 对账主要分为两个阶段:数据核对和差错处理。数据核对就是对账中的轧账。注意「轧」这里念「ga」二声。差错处理就是对账中的平账。

应用

以秒杀场景为例说明一下对账的常用流程。

对账依据和标准

对账问题最先解决的问题是对账依据和标准。比如秒杀场景,对账依据就是订单号,整个链路采用唯一内部订单号。对账标准可以设定为对用户的承诺。就是说:一次秒杀活动结束,如果给用户的结果是成功,那么实际上超卖了,那就自己补货解决。如果给用户结果是失败了,实际上有很多没卖出去,那就是没卖出去放着。总之,我承诺给用户的结果一定要履行。如果数据核对时,各个环节结果不一致,最终结果向用户的承诺对齐。

对账梳理

可以从明细和总数两个方面来做对账。在秒杀场景中,明细是一条条请求订单。总数是成功和失败了多少个请求,买出多少库存。明细对账主要用于定位问题。总数对账是兜底策略,用来解决「怎么证明自己是对的」的问题。

对账时机

分为在线对账和离线对账。在线对账又分为实时对账和准实时对账。实时对账就是比如秒杀成功了,那下游的每一步都需要是成功的,其他情况如超时等则采用重试来进行强一致性保证。准实时对账通常用异步来实现。在秒杀的场景,如果订单返回失败,可以异步发起一个任务进行退款,如果退款不成功则可以用多次重试进行补单。 离线对账就是平时所说的定时任务。这个对账方法就比较多了,自由发挥空间比较大。特别是在轧账场景中,因为不实际修改数据,风险低,很多新技术试用可以选择在此模块进行。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 常用逻辑结构

    在工作和生活中,沟通是重要的一环。想把事情叙述清楚有几个常用的逻辑结构。主要分为四种类型:传统型、流程型、情境型、要素型。

    静儿
  • 漫画:SOA中怎样确定服务的粒度?

    静儿
  • PHP童鞋改JAVA代码怎么处理

    静儿
  • 2018-06-13 对账系统的设计咱们聊聊对账系统该如何设计

    Albert陈凯
  • 美团配送资金安全治理之对账体系建设

    背景 随着美团配送业务的飞速发展,单量已经达到千万级别,同时每天产生的资金额已经超过几千万,清结算系统在保证线上服务稳定可靠的前提下,如何系统化的保障资金安全是...

    美团技术团队
  • TDSQL 全时态数据库系统 -- 典型案例

    增量抽取、增量计算等都是T-TDSQL的经典案例。如下以增量计算为例,来分析T-TDSQL在腾讯金融业务中的典型应用。

    腾讯技术工程官方号
  • 【python】chr与ord函数的使用

    用户2398817
  • Kafka ISR 副本同步机制

    ISR(in-sync replica) 就是 Kafka 为某个分区维护的一组同步集合,即每个分区都有自己的一个 ISR 集合,处于 ISR 集合中的副本,意...

    张乘辉
  • 如何给SAP Cloud ConnectorRegion列表中添加新的Region

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • UberEats利用AI向顾客推荐餐馆和菜单项目,优化配送

    优步旗下的UberEats已成立四年,专注于食品配送。它覆盖了美国50%以上的人口,为大约10万家餐厅提供便利。在全球范围内,它在全球250个城市和300多个地...

    AiTechYun

扫码关注云+社区

领取腾讯云代金券