一、背景和目标
- 背景
交易系统中会出现某些账户高频进行扣款入账的行为。这些账户可以分为两种,一种是出账热点账户,另外一种使入账热点账户。单账户进行余额更新会出现各种性能瓶颈、数据库压力、成功率等各种性能问题。
- 目标
通过该设计避免出现热点账户的各种性能问题,及时对账户是否使热点进行监控,分析、避免出现热点账户带来的一系列问题。
二、方案
1、思路
将单个账户拆分多个子账户。子账户使用借鉴商品上下架库存动态补充。
2、总体
通过热点账户配置,动态将一个账户拆分为多个子账户。尾号0000固定为入账账户,尾号0001固定为出账大账户。整体账户出入帐流程如上图。
3、入账
1)入账,获取尾号0000的账户,保存待处理的入账明细,保存成功则表示入账成功(减少update账户余额操作)。
2)Job,通过定时任务,更新尾号0000账户的待处理的入账明细为处理中,汇总处理中入账总金额,对尾号0000账户进行余额更新,更新完成后将处理中更新为处理完成。
4、出账
1)小额出账:随机获取热点账户的出账子账户(上架),金额变更采用乐观锁余额>=0来更新账户余额。更新成功则记录变动明细;更新失败则更换子账户再次进行余额变更。
2)大额出账:存在需要出账余额大于某个阀值则将账户余额设置为尾号0001的子账户进行出账;如果尾号0001子账号余额仍旧不足则触发强制补钱操作。如下图
5、入账分配
入账分配:主要对下架账户按照设置最小阀值金额的系数进行余额补充,补充后将账户进行上架处理
6、监控
1)监控下架账户并及时告警
7、动态扩容
根据配置获取对应的子账号数量,对子账号的扩容和缩减