• UID15380
  • 登录2017-08-18
  • 粉丝3
  • 关注0
  • 发帖98
  • 主页
  • 金币454枚
社区居民
忠实会员
原创写手
小P孩 发布于2017-01-10 10:53
0/590

基于支付系统真实场景的分布式事务解决方案

楼层直达
分布式系统架构中,分布式事务问题是一个绕不过去的挑战。而微服务架构的流行,让分布式事问题日益突出!
下面我们以电商购物支付流程中,在各大参与者系统中可能会遇到分布式事务问题的场景进行详细的分析!

图片:分布式事务1.jpg


如上图所示,假设三大参与平台(电商平台、支付平台、银行)的系统都做了分布式系统架构拆分,按上数中的流程步骤进行分析:
1、电商平台中创建订单:预留库存、预扣减积分、锁定优惠券,此时电商平台内各服务间会有分布式事务问题,因为此时已经要跨多个内部服务修改数据;
2、支付平台中创建支付订单(选银行卡支付):查询账户、查询限制规则,符合条件的就创建支付订单并跳转银行,此时不会有分布式事务问题,因为还不会跨服务改数据;
3、银行平台中创建交易订单:查找账户、创建交易记录、判断账户余额并扣款、增加积分、通知支付平台,此时也会有分布式事务问题(如果是服务化架构的话);
4、支付平台收到银行扣款结果:更改订单状态、给账户加款、给积分帐户增加积分、生成会计分录、通知电商平台等,此时也会有分布式事务问题;
5、电商平台收到支付平台的支付结果:更改订单状态、扣减库存、扣减积分、使用优惠券、增加消费积分等,系统内部各服务间调用也会遇到分布式事问题;


图片:分布式事务2.jpg


如上图,支付平台收到银行扣款结果后的内部处理流程:
1、支付平台的支付网关对银行通知结果进行校验,然后调用支付订单服务执行支付订单处理;
2、支付订单服务根据银行扣款结果更改支付订单状态;
3、调用资金账户服务给电商平台的商户账户加款(实际过程中可能还会有各种的成本计费;如果是余额支付,还可能是同时从用户账户扣款,给商户账户加款);
4、调用积分服务给用户积分账户增加积分;
5、调用会计服务向会计(财务)系统写进交易原始凭证生成会计分录;
6、调用通知服务将支付处理结果通知电商平台;


图片:分布式事务3.jpg


如上图,把支付系统中的银行扣款成功回调处理流程提取出来,对应的分布式事务问题的代码场景:
/** 支付订单处理 **/
@Transactional(rollbackFor = Exception.class)
public void completeOrder() {
 orderDao.update();  // 订单服务本地更新订单状态
 accountService.update();  // 调用资金账户服务给资金帐户加款
 pointService.update();  // 调用积分服务给积分帐户增加积分
 accountingService.insert();  // 调用会计服务向会计系统写入会计原始凭证
 merchantNotifyService.notify();  // 调用商户通知服务向商户发送支付结果通知
}


本地事务控制还可行吗?


以上分布式事务问题,需要多种分布式事务解决方案来进行处理。


订单处理:本地事务


资金账户加款、积分账户增加积分:TCC型事务(或两阶段提交型事务),实时性要求比较高,数据必须可靠。

图片:分布式事务4.jpg




会计记账:异步确保型事务(基于可靠消息的最终一致性,可以异步,但数据绝对不能丢,而且一定要记账成功)

图片:分布式事务5.jpg




商户通知:最大努力通知型事务(按规律进行通知,不保证数据一定能通知成功,但会提供可查询操作接口进行核对)

图片:分布式事务6.jpg




针对上以分布式事务问题,《微服务架构的分布式事务解决方案》视频教程中将提供详细完整的方案供大家学习和应用。课程地址:
http://www.roncoo.com/course/view/7ae3d7eddc4742f78b0548aa8bd9ccdb

图片:龙果图片.png






龙果支付系统(开源版)

图片:171546_239efc3b_860625.jpeg


开源中国地址:http://www.oschina.net/p/roncoo-pay
      [url=http:// http://git.oschina.net/roncoocom/roncoo-pay]  http://git.oschina.net/roncoocom/roncoo-pay[/url]
GitHub地址:https://github.com/roncoo/roncoo-pay
在线支付演示:http://demo.pay.roncoo.com
后台运营管理:http://demo.pay.roncoo.com/boss

0人打赏
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 72260/370   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 41201/191   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 41178/0   Python爬虫:常用浏览器的useragent

  • 37711/259   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 36366/145   省时省力的Android组件群来了,非常棒的原型参考

  • 28386/2   超全!整理常用的iOS第三方资源

  • 27812/71   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 27639/142   2016抢红包软件及源码

  • 22031/30   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 21759/157   Android版类似UC浏览器:非常赞,产品级的源码

  • 21653/25   Android工程师面试题大全

  • 21472/27   2016程序员跳槽全攻略

  • 21323/9   GitHub上排名前50的iOS项目:总有一款你用得着

  • 20202/20   码魂:程序员的牛B漫画

  • 18417/10   2016年最全的Android面试考题+答案 精编版

  • 18151/3   吐槽那些程序员的搞笑牛逼注释

  • 17757/42   一个绚丽的loading动效分析与实现!

  • 17630/85   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 17611/73   【持续更新中】Android福利贴(二):资料源码大放送

  • 17089/1   iOS 动画总结

  • 16544/45   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 16265/23   个人收集的Android 各类功能源代码

  • 16049/81   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 15924/10   女程序员的梦,众网友的神回复

  • 15792/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 15651/104   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 15621/11   年会上现场review代码是怎么样的体验!

  • 15464/21   Android福利第三波【Android电子书】

  • 15372/53   基于瀑布流的美女图片浏览App,有注释的源代码

  • 15369/17   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 15212/23   珍藏多年的素材,灵感搜寻网站

  • 14988/79   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 14793/0   iOS中文版资源库,非常全

  • 14449/18   65条最常用正则表达式,你要的都在这里了

  • 14186/15   基于Android支付宝支付设计和开发方案

  • 13647/17   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 13438/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 12991/7   一张图搞定iOS学习路线,非常全面

  • 12970/46   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 12894/7   用程序员的姿势抢过年的火车票

  • 12867/0   GitHub iOS 库和框架Top100 

  • 12606/10   成为Java顶尖程序员 ,看这11本书就够了

  • 12486/10   微信支付终于成功了(安卓,iOS),在此分享

  • 12426/18   一张图搞定Android学习路线,非常全面

  • 12249/61   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 12107/3   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 12032/29   【持续更新中】Android福利贴(一):资料源码

  • 11481/4   46 个非常有用的 PHP 代码片段

  • 11216/3   即时通信第三方库

  • 10857/8   流媒体视频直播方案

  • 10748/18   八个最优秀的Android Studio插件

  • 10711/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 10580/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 10430/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 10372/10   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 9764/6   开箱即用!Android四款系统架构工具

  • 9571/10   十大技巧快速提升Android应用开发性能

  • 9501/3   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 9441/3   一张图看清Linux 内核运行原理

  • 9325/1   Android性能优化视频,文档以及工具

  • 返回顶部