高并发场景下对热点数据的处理

什么是热点数据

1、在支付、物联网、超大人群红包领取等业务场景下,对于高并发问题有缓存、集群、分库分表等方式解决。

2、依然可能存在单条热点数据的的问题,例如热点商户的账务数据(就是mysql上的一条记录),可能同时有数十万人在往上面转账,这种情况下是不可能全部同步update到这条记录的。或者是商家准备一笔钱给社交网络发放红包(发放时机依赖用户行为,不能分批主动发送),需要在高并发下对这条账户减钱成功,并不会减成负数。

高并发场景下对热点数据的处理

解决方案:

第一种可以称之为加钱频繁账户,可以采用加钱时只做记录,然后一段时间后再合并好一起update到目标账户上去。
第二种就称为减钱频繁账户,因为这个必须对余额进行实时更新,要不然可能会扣成负数造成资损,可以采用分拆子账户的方式,将一个一条账户数据拆成100条数据(一条100万变成100条一万),减钱请求随机命中其中一条。当有子账户有余额,但不足以转账时,进行合并子账户。最终100条数据可能会合并成一条数据。

系统设计思路:

加法频繁数据,我们需要高可用的缓存/分布式数据库,将加法请求记录,由计划任务进行求和并update到目标数据。
减法频繁数据,需要有一个数据扩容的功能(对单条数据进行水平扩展),自动/手动将一条大额记录拆分成n个子记录,还有一个合并子记录的功能。

功能实现:

暂时还没有去进行代码实现

说明:本文记录细节和逻辑还有很多未完善的地方,对热点数据的处理还将继续研究,然后继续更新