用户积分技术揭秘之分布式事务
Posted 用户营销技术文摘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户积分技术揭秘之分布式事务相关的知识,希望对你有一定的参考价值。
1、柔性事务和刚性事务
柔性事务满足BASE理论(基本可用,最终一致)
刚性事务满足ACID理论
京东用户积分采用的是分布式事务当中的柔性事务的处理方式。
2、柔性事务分为
两阶段型
补偿型
异步确保型
最大努力型。
由于用户积分整个架构是SOA架构,其事务是跨系统和跨业务资源,因此传统单机环境下数据库的ACID事务满足不了分布式环境下的业务需要,以上几种事务类似就是针对分布式环境下业务需要设定的。
3、两阶段提交(2PC)型
两阶段型:就是分布式事务两阶段提交,对应技术上的XA、JTA/JTS。
这是分布式环境下事务处理的典型模式。
全局事务
事务由全局管理器全局管理
事务管理器
管理全局事务状态与参与的资源,协同资源的一致提交/回滚
TX协议
应用或应用服务器与事务管理器的接口
XA协议
全局事务管理器与资源管理器的接口
两阶段提交的最大局限性:
1、潜在故障点多带来的脆弱性
2、准备后,提交前,出现故障引发的一系列的隔离与恢复难题
3、补偿型(TCC)
Try:尝试执行业务
完成所有业务检查(一致性)
预留必须的业务资源(准隔离性)
Confirm:确认执行业务
真正执行业务
不做任何业务检查
只使用try阶段预留的业务资源
confirm操作满足幂等性
Cancel:取消执行业务
释放Try阶段预留的业务资源
cancel操作满足幂等性
4、异步确保型
将一些同步阻塞的事务操作变为异步的操作,避免对数据库事务的争用,典型例子是利用分布式队列,消息队列等。
5、最大努力型
针对执行的结果状态进行重试处理,例如worker对异步发奖流程进行补发等。
6、用户积分兑换详解
我们的用户积分兑换中,要求实时性,跨应用,跨数据源以及相对较为复杂的业务场景,如果单一选择上述任何一种分布式事务模型,都难以达到理想中的效果,故我们根据不同的业务场景,采用多种事务模型结合使用,从而达到理想中的状态。
调用实时性
我们在用户积分平台中,为大量的业务系统提供了积分兑换的RPC接口。在保证事务一致性的情况下,必须尽可能的提高相应速度。所以我们采用了TCC模型做事务控制,并且同时只有C端积分明细和积分兑换接口实时要求比较高,故我们再TCC模型中,舍弃了对ES,HBase等耗时的IO操作的实时一致性。
积分换券精简后流程图如下:
Try :
检查积分,检查优惠券,冻结积分,(部分券有锁券的逻辑也属于这个阶段)
Confirm :
发券、扣积分(mysql事务写明细,加积分,解除冻结积分)
cancel :
恢复积分,(优惠券解锁)
TCC的疑问:
TCC的三个阶段和流程图对应起来了,但是疑问颇多,假设发券时候,发券接口超时,我们应该返回什么给调用方呢?扣积分时,数据库服务器超时异常,又该返回什么呢?
异常处理:
对于上面TCC的疑问中提到的问题,我们的答案是返回提交成功,而我们的异步重试,会以最大努力模型来保证事务的最终一致性。在积分换券的实例中,我们在TCC模型执行到每一个阶段都会记录事务日志,一旦出现需要重试的异常,我们会根据事务日志,继续执行接下来的操作。当然,在TCC中,一些业务异常,比如优惠券不足等,这类异常会触发回滚操作,即进入TCC的cancel阶段。
数据源同步 :
上面有说到,我们在接口里为了实时性,舍弃了对ES,HBase的写操作,然而ES对于后台的聚合查询,HBase对于后台的明细查询以及归档都是非常重要的,我们怎么保证他们的数据和mysql的数据是一致的呢?在这里,我们采用了异步确保型,在用户兑换积分后,我们会发一个消息出来,从而异步去同步相关信息。
小结:
由此我们可以得出,在众多的分布式事务模型中,没有一种是万能的,每一种都有自己的优点和缺陷。只有结合具体的场景,采用多种模型的结合,从而才能达到我们理想中的状态。
关于我们:
我们是京东平台生态事业部负责用户营销的Team,我们是开放高效的扁平化团队,我们采用敏捷式开发进行产品的快速迭代。我们有着大型分布式系统,高流量接口,京东主站PC和App前端露出页,十亿级别的数据存储,TB级别的大数据批处理,实时计算,数据建模和挖掘以及最最火热的机器学习。
1. 具有扎实的java基础
2. 熟悉面向对象设计
3. 具有一定的分布式系统架构经验
4. 数据java web开发
当然你还具有如下某项技能,会大大加分
1. 使用hadoop,hive进行大数据处理的经验
2. 能够利用storm,spark streaming进行实时数据处理
3. 了解spark ML,并能进行数据建模和机器学习
4. 熟悉前端开发,精通Vue.js等前端框架
以上是关于用户积分技术揭秘之分布式事务的主要内容,如果未能解决你的问题,请参考以下文章