美文网首页程序员
转账交易这件小事,是如何被程序员玩坏的?

转账交易这件小事,是如何被程序员玩坏的?

作者: 黄大海 | 来源:发表于2018-11-27 18:08 被阅读99次

很久很久以前。应用APP只有一个,功能都写在一起。数据库也只有一个,所有的数据一致性问题也可以通过事务解决。转账交易当然是小菜一碟:

try{
    transaction.begin();
    
    db.execute(A-1000);
    db.execute(B+1000);
    
    transaction.commit();
}catch(Exception e){
    transaction.rollback();
}
转账-单机.png

后来随着应用的复杂,需要拆分出多个领域单独部署应用和数据库。比如A账户属于借记卡领域,而B账户属于信用卡领域。我们可以用分布式事务,也可以用补偿机制:

转账-多机多库 .png

NOTE:基于两阶段提交的分布式事务并不能100%保证一致性(比如在第二阶段数据库发生当机)。基于补偿的最终一致性方案,也有需要人工介入的情况。

上面的方案并不完善,没有把考虑网络问题考虑进来。在跨公司远程访问中,网络问题会比较突出和频繁。

转账-远程交互.png

在复杂的网络情况下。除了成功和失败,可能遇到没有响应或超时的情况,这种情况下对方可能收到的请求也可能没收到请求。可能处理了,也可能没处理。如果重试一定次数后始终调用不成功,就需要人工介入。

转账-远程同步.png

我们首先需要引入一张交易事务流水表,来记录账户每次的变更情况和状态。账户数据只保存最新的状态。考虑到可能存在的重复提交,在被调用方也需要流水表,来实现实现“幂等性”。

其次考虑到转账可能失败,我们加入一个冻结资产的概念F,使得用户可以明确看到这部分资金

当然交易可能是异步的,接收方可能需要做一些别的处理才返回

转账-远程异步.png

可以接收方推送通知,也可以调用方查询结果,或者两者结合。

最后,这些unknow状态的订单怎么办呢?解决方案叫“对账”。一种是双方协商着对账解决分歧。更多的是以一方的数据为准,通过查询或倒文件的方式对账。

相关文章

  • 转账交易这件小事,是如何被程序员玩坏的?

    很久很久以前。应用APP只有一个,功能都写在一起。数据库也只有一个,所有的数据一致性问题也可以通过事务解决。转账交...

  • 释放阻塞的以太坊交易

    目前以太坊正面临着许多积压的交易,导致一些交易数小时甚至数天都未被处理。 本文解释了转账如何被卡住,以及如何释放它...

  • 比特币是如何转账交易的?

    安装了比特币客户端的电脑被称为节点,互联网上的所有节点构成比特币网络。每当有新的比特币在某个节点上生成,交易,这个...

  • Oepc如何交易?如何转账?

    1、买家如何购买Oepc 第一步先输入购买价格(1个起买卖)【交易的担保手续费由卖家支付】手续费:2% 输入后,点...

  • 你要知道的一些钱包知识

    1.什么是区块链钱包 区块链代币在转账时,每笔转账交易需要被验证签名有效,然后写入区块中,完成转账交易。然而只有拥...

  • Ethereum RLP协议

    合约交易 常规转账 待签名的交易

  • 比特币经典7问题(贯穿btc区块链全部知识)

    问题一:比特币系统转账交易时,对方如果不在线,会出现什么问题? 转账交易时,不需要对方是一定在线的,因为转账只是在...

  • 【EOS42章经】 第4章: 如何通过钱包操作转账?

    创建好了账号之后,如何进行第一笔转账操作?转账到交易所,或从交易所转出EOS到自己到钱包账号中时,需要注意什么? ...

  • 被孤立这件小事

    1. 我从没有参加过初中同学的聚会。对于那个似懂非懂,情感激烈的年纪,我有太多不愿去回想的东西。 自以为的好朋友突...

  • 被拒绝这件小事

    1. 最近发生的一件小事有点让我耿耿于怀。 一个在社交软件上关注的陌生人(职场成功女性),在前几天“职场女性歧视”...

网友评论

    本文标题:转账交易这件小事,是如何被程序员玩坏的?

    本文链接:https://www.haomeiwen.com/subject/qrrnqqtx.html