题目1 公司的手续费账户如何保证并发
一, 现场回答
每个商户设置一个手续费账户的子账户, 这样, 在并发的时候, 不同的商户是可以并发的. 所有商户的手续费进行sum, 就是总账户.
二. 思考后回答
手续费业务作为非核心业务, 没有其他业务风险. 可以进行批量合并后进行更新.
具体做法是这样的, 所有的手续费入账都会形成流水,可以每隔1秒(如果认为延迟大, 可以设置小一些), 将前一秒的数据汇总到一个新的汇总流水表, 表中有上一次账户的数值和本次更新后的数值. 然后连带更新账户数值, 达到最终的账户变更.
注意事项:
- 每次计算都是基于上一时间单位(默认一秒)的结果,
- 会有定时对系统汇总表进行监控, 如果最近更新时间与当前时间时间差超过阈值, 进行报警
- 如果应用挂了, 那么要从上一次汇总后的数据开始再次开始进行汇总
题目2, 有一个资金池的账户, 对手续费账户进行补贴, 如何保证并发
一. 现场回答
设置一个zset , 将资金池的手续费账户分为多份, 分数是该子账户的余额, 用不同的子账户作为单独的交易对象, 进行手续费支付, 这样可以将并发扩大n倍. 如果出现无法支付, 则选择两个最小的账户进行合并,进行重试.
二, 思考后回答
资金池账户和手续费账户有很大的相似点, 在满足一定条件时, 他们的操作可以是一样的.
进行如下设置:
(弱)实时统计该资金池的的交易情况, 分别得出 平均7天的补贴额度, 一天的补贴额度, 还有1小时的补贴额度
当余额大于7天补贴额度, 采用快速流水方式, 就是业务过来直接生成流水日志, 没秒钟对流水日志进行汇总, 并更新账户.
当余额小于7天, 会对账户所有者进行通知, 进行续费
当余额在1-7天的范围内, 进行快限速流水方式, 如果历史记录没有问题, 实时记录和快速流水方式相同. 但如果应用出现过问题, 导致当前处理数据与当前时间存在时间差, 那么实时的就会进入限流方式. 直至时间差小于阈值, 进入快速方式
当余额小于1天的补贴金额, 进行通知续费
当余额在1小时至一天的范畴的时候, 进行快阻式流水方式, 如果记录没有问题, 采用快速流水方式. 但如果应用出现过问题, 导致当前处理数据与当前时间时间差超过阈值, 那么实时会进行阻塞, 暂停该账户交易, 直至时间差小于阈值, 进入快速方式
当余额小于1小时的补贴范围, 进入慢速模式, 所有的该账户的业务要使用队列, 保证顺序. 慢速模式下, 每一笔补贴都要从账户扣除后, 才形成流水, 每秒的流水也只有汇总功能, 不进行更新账户.
-
图标如下
账户 快速模式 快限模式 快阻模式 慢速模式 余额范围 >7天 1-7天 1小时-1天 小于一小时 无历史数据滞留 批量处理 批量处理 批量处理 队列串行 有历史数据滞留_实时部分 批量处理 限流 阻塞交易, 直至更新完成 /