网站开发 前台代码,cloudinary wordpress,凡客还在吗,建网页服务公司分布式系统架构中#xff0c;分布式事务问题是一个绕不过去的挑战。而微服务架构的流行#xff0c;让分布式事问题日益突出#xff01; 下面我们以电商购物支付流程中#xff0c;在各大参与者系统中可能会遇到分布式事务问题的场景进行详细的分析#xff01; 如上图所示分布式事务问题是一个绕不过去的挑战。而微服务架构的流行让分布式事问题日益突出 下面我们以电商购物支付流程中在各大参与者系统中可能会遇到分布式事务问题的场景进行详细的分析 如上图所示假设三大参与平台电商平台、支付平台、银行的系统都做了分布式系统架构拆分按上数中的流程步骤进行分析 1、电商平台中创建订单预留库存、预扣减积分、锁定优惠券此时电商平台内各服务间会有分布式事务问题因为此时已经要跨多个内部服务修改数据 2、支付平台中创建支付订单选银行卡支付查询账户、查询限制规则符合条件的就创建支付订单并跳转银行此时不会有分布式事务问题因为还不会跨服务改数据 3、银行平台中创建交易订单查找账户、创建交易记录、判断账户余额并扣款、增加积分、通知支付平台此时也会有分布式事务问题如果是服务化架构的话 4、支付平台收到银行扣款结果更改订单状态、给账户加款、给积分帐户增加积分、生成会计分录、通知电商平台等此时也会有分布式事务问题 5、电商平台收到支付平台的支付结果更改订单状态、扣减库存、扣减积分、使用优惠券、增加消费积分等系统内部各服务间调用也会遇到分布式事问题 如上图支付平台收到银行扣款结果后的内部处理流程 1、支付平台的支付网关对银行通知结果进行校验然后调用支付订单服务执行支付订单处理 2、支付订单服务根据银行扣款结果更改支付订单状态 3、调用资金账户服务给电商平台的商户账户加款实际过程中可能还会有各种的成本计费如果是余额支付还可能是同时从用户账户扣款给商户账户加款 4、调用积分服务给用户积分账户增加积分 5、调用会计服务向会计财务系统写进交易原始凭证生成会计分录 6、调用通知服务将支付处理结果通知电商平台 如上图把支付系统中的银行扣款成功回调处理流程提取出来对应的分布式事务问题的代码场景 /** 支付订单处理 **/ Transactional(rollbackFor Exception.class) public void completeOrder() { orderDao.update(); // 订单服务本地更新订单状态 accountService.update(); // 调用资金账户服务给资金帐户加款 pointService.update(); // 调用积分服务给积分帐户增加积分 accountingService.insert(); // 调用会计服务向会计系统写入会计原始凭证 merchantNotifyService.notify(); // 调用商户通知服务向商户发送支付结果通知 } 本地事务控制还可行吗 以上分布式事务问题需要多种分布式事务解决方案来进行处理。 订单处理本地事务 资金账户加款、积分账户增加积分TCC型事务或两阶段提交型事务实时性要求比较高数据必须可靠。 会计记账异步确保型事务基于可靠消息的最终一致性可以异步但数据绝对不能丢而且一定要记账成功 商户通知最大努力通知型事务按规律进行通知不保证数据一定能通知成功但会提供可查询操作接口进行核对 针对上以分布式事务问题龙果学院http://www.roncoo.com的《微服务架构的分布式事务解决方案》视频教程中将提供详细完整的方案供大家学习和应用。 点击链接加入群【分布式微服务架构-2群】https://jq.qq.com/?_wv1027k46KFCik 龙果支付系统开源版 开源中国地址http://www.oschina.net/p/roncoo-pay http://git.oschina.net/roncoocom/roncoo-payGitHub地址https://github.com/roncoo/roncoo-pay在线支付演示http://demo.pay.roncoo.com后台运营管理http://demo.pay.roncoo.com/boss 点击链接加入群【龙果支付系统】https://jq.qq.com/?_wv1027k46KFTAA