2020-07-28

题目1 公司的手续费账户如何保证并发

一, 现场回答

每个商户设置一个手续费账户的子账户, 这样, 在并发的时候, 不同的商户是可以并发的. 所有商户的手续费进行sum, 就是总账户.

二. 思考后回答

手续费业务作为非核心业务, 没有其他业务风险. 可以进行批量合并后进行更新.

具体做法是这样的, 所有的手续费入账都会形成流水,可以每隔1秒(如果认为延迟大, 可以设置小一些), 将前一秒的数据汇总到一个新的汇总流水表, 表中有上一次账户的数值和本次更新后的数值. 然后连带更新账户数值, 达到最终的账户变更.

注意事项:

  1. 每次计算都是基于上一时间单位(默认一秒)的结果,
  2. 会有定时对系统汇总表进行监控, 如果最近更新时间与当前时间时间差超过阈值, 进行报警
  3. 如果应用挂了, 那么要从上一次汇总后的数据开始再次开始进行汇总

题目2, 有一个资金池的账户, 对手续费账户进行补贴, 如何保证并发

一. 现场回答

设置一个zset , 将资金池的手续费账户分为多份, 分数是该子账户的余额, 用不同的子账户作为单独的交易对象, 进行手续费支付, 这样可以将并发扩大n倍. 如果出现无法支付, 则选择两个最小的账户进行合并,进行重试.

二, 思考后回答

资金池账户和手续费账户有很大的相似点, 在满足一定条件时, 他们的操作可以是一样的.

进行如下设置:

  1. (弱)实时统计该资金池的的交易情况, 分别得出 平均7天的补贴额度, 一天的补贴额度, 还有1小时的补贴额度

  2. 当余额大于7天补贴额度, 采用快速流水方式, 就是业务过来直接生成流水日志, 没秒钟对流水日志进行汇总, 并更新账户.

  3. 当余额小于7天, 会对账户所有者进行通知, 进行续费

  4. 当余额在1-7天的范围内, 进行快限速流水方式, 如果历史记录没有问题, 实时记录和快速流水方式相同. 但如果应用出现过问题, 导致当前处理数据与当前时间存在时间差, 那么实时的就会进入限流方式. 直至时间差小于阈值, 进入快速方式

  5. 当余额小于1天的补贴金额, 进行通知续费

  6. 当余额在1小时至一天的范畴的时候, 进行快阻式流水方式, 如果记录没有问题, 采用快速流水方式. 但如果应用出现过问题, 导致当前处理数据与当前时间时间差超过阈值, 那么实时会进行阻塞, 暂停该账户交易, 直至时间差小于阈值, 进入快速方式

  7. 当余额小于1小时的补贴范围, 进入慢速模式, 所有的该账户的业务要使用队列, 保证顺序. 慢速模式下, 每一笔补贴都要从账户扣除后, 才形成流水, 每秒的流水也只有汇总功能, 不进行更新账户.

  8. 图标如下

    账户 快速模式 快限模式 快阻模式 慢速模式
    余额范围 >7天 1-7天 1小时-1天 小于一小时
    无历史数据滞留 批量处理 批量处理 批量处理 队列串行
    有历史数据滞留_实时部分 批量处理 限流 阻塞交易, 直至更新完成 /
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。