人口最多的国家排名php⾼并发余额正确_如何保证⾼并发下账户余额正确性?随着移动⽀付的越来越便捷,如何保证账户余额正确性变成了难题。尤其针对没有⽀付系统开发经验的程序员,如下咱们解读⼀下此类问题(拿⽀付宝举例):
⽀付宝需要有个账户记账,现在很多第三⽅公司使⽤⽀付宝作为结账业务主要⼿段,故出现了很多热点账户。⽐如互联⽹⼤商家,打车业务,快的,滴滴等。账号有余额,⼤并发交易下余额快速变化,需要保证账户余额正确性。
需求如下:
1.账户减款
2.账户加款
3.读取总即时⾦额
设计⽅案:
最简单设计: 帐户表+流⽔表. 每次帐户加减款都需要增加流⽔,和帐户变动.
业务需求: ⾼并发帐户.
技术选择 1. 悲观锁(⾼并发帐户), 乐观锁(普通并发帐户). 3. 顺序化,把同步转异步,使⽤mq 降低峰值.
存储选择: redis或者数据库. redis本⾝并发能⼒就是⽐数据库要好. 但是单机⽀持的数据量不如数据库⼤. 只存放account的值的话到还好.根据场景⾃⼰作区分。
账户转账分两个接⼝,⼀个可扣成负数,⼀个不能扣成负数.
1 如何消除余额竞争呢?
⽅案⼀:变成两个账户 模仿 担保交易,设置两个账户 1. 扣款账户 2. 加款账户
1.1. 商家都是频繁加款 ,加款账户只记流⽔,不计算余额. 避免频繁竞争
1.2. 加款帐户的流⽔定时汇总到扣款帐户上.
1.3 扣款账户⽤于退款和提现, 因为频率不⾼. 即保证余额控制,也没有并发问题. 退款有些业务能扣成负数,有些业务不能.
缺点: 进⼊的钱不⼀定能时时能⽤. (对⼩商家不适⽤,⽐较计较)
优点: 这样就避免了热点账户的余额计算。
⽅案⼆: 账户分普通账户,加频账户,减频账户,双频账户
类型为加钱频繁账户,加钱不改变余额,定时任务收集改变。 捡钱操作时时进⾏。
减频账户,拆分⼦账户。
扣款只账户会有个问题,前⾯扣掉了,但是最后不够扣。
最佳⽅案,回滚,即逆操作,加款。
次佳⽅案, 使⽤只能扣成⼀次负数
双频账户:加款依然如此,减款同上。
戾延迟提现问题:即2天内收⼊只允许某种业务扣款(内部消费,代驾现⾦抵扣),但不允许提现扣款。
采⽤普通账户,但是要满⾜提现延迟⽅案?
⼩商家加的钱必须时时能⽤. ⼜要求延迟提现怎么办?
qq炫舞个性签名
梦见耗子只能通过订单维度,⽬前这个订单现在有多少钱冻结中(已退款的钱不应该冻结). 展现哪些订单是冻结的,冻结⾦额是多少.
⼀旦钱被消费了, 账户余额可能少于订单的冻结的⾦额,可提现余额可能为负数.买茶叶
客户可能来投诉, 因为他⾃⼰意识不到钱被消费了(抵扣信息费)和提现⾦额变少有关联.
qq交友宣言
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论