关于一个扣费设计问题,请教一下 v 站的各位大佬 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
zaczhou

关于一个扣费设计问题,请教一下 v 站的各位大佬

  •  
  •   zaczhou Jun 18, 2021 2599 views
    This topic created in 1797 days ago, the information mentioned may be changed or developed.

    目前我们有一个充电桩的项目, 用户存在账户余额体系, 充电是按照每分钟按照电量或者功率计费, 一个用户同时存在多个订单,目前的设计是在用户有订单的情况下,就会在 redis 中创建一个当前账户的缓存,如果存在多个订单,扣费都扣减这个共享的缓存账户, 另外正在进行中的订单也会存在一份 redis 缓存, 用来累计金额,电量等信息,在订单结束后同步相关信息到数据库中, 因为每天同时进行中的订单有好几万,历史订单千万级别, 所以没有使用每次更新数据库的设计, 所有数据都保存在缓存中有时候会出现数据不一致的情况,不知道各位大佬对这种场景有没有好的建议或者方案

    9 replies    2021-06-20 13:09:07 +08:00
    thunderw
        1
    thunderw  
       Jun 18, 2021
    交易信息存缓存里不落地,心有点大啊……
    你这个不一致是不是并发造成的?比如大家都读了数据加 1,最后只加了一次 1.
    suuln
        2
    suuln  
       Jun 18, 2021
    可以参考一下热点账户
    F281M6Dh8DXpD1g2
        3
    F281M6Dh8DXpD1g2  
       Jun 18, 2021
    用户的余额应该永远是算出来的
    玩钱的用 redis 胆子真大
    zaczhou
        4
    zaczhou  
    OP
       Jun 18, 2021
    @thunderw 是的 @suuln 看了一下 确实在这个场景下 热点账户这个方案确实蛮好的 很感谢 @liprais 是的 之前的设计很心大 还好没有出现太大的问题 目前也是在解决
    xiangyuecn
        5
    xiangyuecn  
       Jun 18, 2021
    1 万单同时充 1 小时,数据库绝逼不会成为瓶颈,提前优化又可以多搞好多钱
    pjntt
        6
    pjntt  
       Jun 19, 2021
    一点想法供参考:

    最小单位生成扣费记录,通过消息队列形成订单记录。订单结束后通过充值总额-消费总额=当前余额。定时核对/校验充值/扣费记录,生成差异记录。
    zaczhou
        7
    zaczhou  
    OP
       Jun 19, 2021
    @pjntt 这样也是可以 但是这里面还有一个问题 就是如果不是每次上报充电信息的时候去检查余额 就不知道他的余额是否能够完成下一分钟的充电,因为现在有很多模式 有的是充电前直接扣费,还有的是按照每一分钟进行扣钱
    zaczhou
        8
    zaczhou  
    OP
       Jun 19, 2021
    @pjntt 很感谢你提供的思路 不知道你对余额是否支持下一分钟的扣费这个问题怎么看呢
    pjntt
        9
    pjntt  
       Jun 20, 2021
    从纯技术角度说,扣费失败就中断充电操作,只要保证在最小单位时间内要把产生的扣费记录全处理掉。是否支持下一分钟扣费这个说法也就不存在的。

    实际应用操作上,这个处理时间会受种因素影响到,没有时候办法在最小单位内处理掉所有扣费记录,那么就会产负值费用。那么这个就需要增加额外的保障措施。比如增加足够计算冗余,增加负值告警、括帐户余额最小可使用值等等手段提前预警。
    About     Help     Advertise     Blog     API     FAQ     Solana     5419 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 52ms UTC 01:37 PVG 09:37 LAX 18:37 JFK 21:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86