计费系统的 金额结算怎么做? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
kikione
V2EX    程序员

计费系统的 金额结算怎么做?

  •  
  •   kikione 2020-12-05 10:14:16 +08:00 3059 次点击
    这是一个创建于 1858 天前的主题,其中的信息可能已经有所发展或是发生改变。

    单应用,单数据库

    业务是这样的: 用户请求我们 API 查询,先在账户充值金额。

    每请求一次 API 会有一次计费,请求成功计费,余额减; 失败不计费; 余额不足请求失败;

    余额结算怎么做比较好?业界都是什么方案?

    13 条回复    2020-12-15 16:02:27 +08:00
    securityCoding
        1
    securityCoding  
       2020-12-05 10:17:52 +08:00
    请求前检查费用(商户锁) -》请求成功-》消息队列-》扣费
    securityCoding
        2
    securityCoding  
       2020-12-05 10:18:23 +08:00
    没有消息队列可以使用 redis stream
    moult
        3
    moult  
       2020-12-05 10:31:56 +08:00 via iPhone
    请求 API 肯定有写记录吧。根据请求记录表,十分钟或一小时统一扣费一次。云服务那些按量计费很多都是一小时甚至一天计费在。实时扣费的话真的太浪费资源了。
    kikione
        4
    kikione  
    OP
       2020-12-05 11:14:13 +08:00
    @moult 谢谢
    kikione
        5
    kikione  
    OP
       2020-12-05 11:14:19 +08:00
    wangbenjun5
        6
    wangbenjun5  
       2020-12-05 11:47:59 +08:00
    像这种单应用单数据库太简单了,一个锁就解决了并发问题,保证 1 毛钱不亏
    wangbenjun5
        7
    wangbenjun5  
       2020-12-05 11:50:57 +08:00
    当然如果考虑到锁的性能影响接口速度的话就不要使用数据库锁,可以使用内存锁,redis 锁。如果使用队列做成异步模式的话可能会导致超额,假设并发量大的话。
    kikione
        8
    kikione  
    OP
       2020-12-05 12:15:29 +08:00
    @wangbenjun5 给数据库加一个 乐观锁就可了是吧
    Dabaicong
        10
    Dabaicong  
       2020-12-05 12:48:46 +08:00
    如果实时计费,最好是悲观锁。select for update 。记得 where 条件中要有索引,要不然就会退化成表锁
    brucefu
        11
    brucefu  
       2020-12-05 13:01:17 +08:00
    如何定义“请求一次”,为请求一次做一个唯一键,异步插表就好,要保成功。将来计费系统单独出去的话,就发消息出去
    dengkj
        12
    dengkj  
       2020-12-05 21:28:10 +08:00
    MySQL RR RC 级别的话不用显式加锁,只需要判断用户余额是否大于等于零即可,数据库会自动加锁
    kikione
        13
    kikione  
    OP
       2020-12-15 16:02:27 +08:00
    @dengkj 感谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3481 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 00:44 PVG 08:44 < href="/worldclock#lax">LAX 16:44 JFK 19:44
    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