《逆流而上 阿里巴巴技术成长之路》读后记录之二——业务篇

原创 2018年04月15日 21:48:40

在阿里巴巴,有大量的业务技术研发人员,在业务线的研发人员每天都要遇到各类技术问题,业务线问题往往隐藏在业务和技术结合系统抽象和系统流程中,比如锁的问题,事务问题,缓存问题。通常排查比较麻烦,从浏览器到网络,到web服务器,到服务化应用,到缓存,到存储。希望排查思路和解决方案能够对读者带来启发。

1、幂等控制,分布式锁超时情况和业务重发的并发

背景

对账出现1分钱的差错,那么多出来的1分钱从哪里来的呢?

数据库分析记录

发现用户收益结账在同一天内有两笔交易记录创建时间分别为8:00:23,8:00:29,而修改时间均为8:00:29,正常情况下只有一次的,为什么出现两次呢?分布式锁的超时时间为5s,第一笔记录从创建到修改6s,由此可以分析是分布式锁超时失效后,获得数据库连接,进行提交成功。

过程逆推

  • 由于数据库连接数被占满,流水1创建事务处于等待提交状态
  • 系统A发现交易失败,重试次数不满8次的,立即发起重试,触发生成流水2的请求
  • 5s内数据军被分布式锁拦截,无法提交
  • 经过5s后,系统B的分布式锁失效,此时事务仍在等待未提交
  • 6s时,流水2成功越过数据库查询幂等校验发起事务,此时流水1拿到数据库连接,流水1和流水2两个事务同时提交。
  • 由于数据库未做唯一索引,且支付受理模块打穿下层幂等原则,生成两个TXID,导致两个事务同时提交成功
  • 收益结算重复记账,用户多了一笔收入。

开发人员得出结论:分布式锁在以下条件同时满足的情况下,并发控制会被打穿。
* 上层业务系统层面有重试机制
* 业务请求存在一定时间之后提交成功的情况,例如本例中第一次请求在事务等待6s后获得数据库连接,提交数据成功
* 下游系统缺乏其他有效的幂等控制手段

结论

建议将第三方唯一性的幂等控制方案作为幂等控制的兜底方案,控制好这道幂等防线,这样不论业务如何设计,就万变不离其宗了。

另类解法:分布式一致性

在阿里巴巴的红包系统中,红包的发放操作会涉及两个数据库的事务操作,一个数据库进行预算的扣减,另一个进行红包数据的写入,那么如何保证这两个事务操作的一致性呢?

传统思路

两阶段信息:由事务协调者来保证所有的事务参与者都完成第一阶段的准备工作,如果参与者都准备好了,那么进入第二阶段进行提交,MySQL数据库扮演参与者的角色,协调者由另外的应用担当。

问题

导致数据库压力增大,存在数据库热点问题

解决方案

开发人员设计一个轻量级的一致性消息服务,吧预算扣减成功等诸多业务操作写入数据库中,该消息组件保证事件与业务操作处于同一数据库中,所以仅仅是一次简单的本地事务操作。
在一个成功的红包发放操作中,对于预算端来说,进行了一次预算的扣减,一次事件写入,可能会进行一次事件读取,一次事件更行,对于用户红包数据端,仅需要进行一次红包数据的写入。对于预算扣减的热点数据操作,新的方案并没有放大它。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lck5602/article/details/79953831

逆流而上:阿里巴巴技术成长之路

  • 2018年03月14日 13:59
  • 20.28MB
  • 下载

荐书丨逆流而上:阿里巴巴技术成长之路

阿里官方背书,技术保障团队倾力著作 以技术案例的形式进行讲解,实用性强 技术覆盖面广,读者用户基数大 2017年7月27日,阿里巴巴集团市值超越4040亿美元,成为亚洲第一。回首过去...
  • csdnsevenn
  • csdnsevenn
  • 2017-11-26 00:00:00
  • 410

博文荐书:阿里运维、Java微服务、Scala编程

博文荐书:阿里运维、Java微服务、Scala编程(评论送书) 感谢大家对荐书栏目的支持,先公布下上期活动中奖名单 京东基础架构建设之路(全彩)梦中天vioao 深入Linux内核架构与底层原理 骑着...
  • broadview2006
  • broadview2006
  • 2017-12-04 15:20:41
  • 1106

找一个地方记录我的技术成长之路

听某些大牛说,学技术一定要有自己的博客,把自己学习,实践过程中的点点滴滴纪录下来。然而我天生文笔笨拙,对写什么东西都是心向往之,但从不敢真正尝试。归结源头还是从小听老妈说的,学好数理化,走遍天下都不怕...
  • nowornever210
  • nowornever210
  • 2015-09-05 10:23:46
  • 135

个人的技术积累以及成长之路

本文写于2016年5月11日,本人29岁。 因一系列原因,我到29岁了,从事IT行业也已将近6年,可是技术水平还是很菜,所以今后的时间,想要刻苦学习技术,提高自己的技术水平。 废话不多说,直接来。...
  • dom075
  • dom075
  • 2016-05-11 22:29:10
  • 1288

我的阿里巴巴offer之路

offer
  • UP19910522
  • UP19910522
  • 2015-03-19 20:19:48
  • 1923

阿里巴巴技术丛书

  • 2015年03月16日 10:43
  • 18.47MB
  • 下载

《逆流而上 阿里巴巴技术成长之路》读后记录之一——数据库篇

1、数据库常见问题 对数据库性能的要求,包括提升连接池的性能、单行并发更新能力、降低一些场景下的锁冲突概率、将memcached引擎引入到mysql内核中去。 1.1 数据库异常分析结...
  • lck5602
  • lck5602
  • 2018-04-01 22:28:57
  • 13

阿里巴巴DBA成长之路

 编者按:如何让一个本科毕业生在一年之类成为高级DBA,这一话题曾经在ITPUB社区引起过很大的争议。本文的作者就是争议的核心人物,环境和机遇对人的塑造是巨大的,大家看看他的技术成长史,是不是有所感悟...
  • qjhli
  • qjhli
  • 2008-05-31 13:58:00
  • 714

分享一篇JAVA成长之路的经验篇

前言:这是网上看到的一篇文章,觉得写得很好,里面有坐着的博客地址,对于刚入行的人来说,这是一篇很好的指南,将来有一天,我也希望能够写出这样的一篇总结,对未来人有意义的文章。原文:对于参加工作一年以内的...
  • u011958281
  • u011958281
  • 2017-08-01 09:30:24
  • 510
收藏助手
不良信息举报
您举报文章:《逆流而上 阿里巴巴技术成长之路》读后记录之二——业务篇
举报原因:
原因补充:

(最多只允许输入30个字)