用户支付,我们要从买家账户减掉一定金额,再往卖家增加一定金额,为了保证数据的完整性
、可追溯性
,变更余额时,我们通常会同时插入一条记录流水
。
账户流水核心字段:流水ID、金额、交易双方账户、交易时间戳、订单号、
注意:账户流水只能新增,不能修改和删除。流水号必须是自增的。
后续,系统对账时,我们只需要对交易流水明细数据做累计即可,如果出现和余额不一致情况,一般以交易流水为准来修复余额数据。
更新余额
、记录流水
虽属于两个操作,但是要保证要么都成功,要么都失败。要做到事务。
数据库的事务隔离级别有:读未提交(RU)
、读已提交(RC)
、可重复读(RR)
、串行化(Serializable)
常用的隔离级别是 RC 和 RR ,因为这两种隔离级别都可以避免脏读。
当然,如果涉及多个微服务调用,会用到分布式事务
分布式事务,细想下也很容易理解,就是将一个大事务
拆分为多个本地事务
,本地事务依然借助于数据库自身事务来解决,难点在于解决这个分布式一致性问题,借助重试机制,保证最终一致是我们常用的方案。
还没有评论,来说两句吧...