学习笔记热点账户问题的解决方案

Posted 棉花糖灬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记热点账户问题的解决方案相关的知识,希望对你有一定的参考价值。

本文总结自知乎文章:浅谈热点账户技术解决方案

1. 热点账户问题

简单来说,热点账户问题指的是短时间内有对同一个账户有大量写请求,从而导致高并发情况下冲突严重,产生性能瓶颈的问题。

2. 解决方案

(1) 汇总明细入账

将多个请求合并为一个请求一次入账

账户的写入操作不立即入账,而是由一个定时任务,每隔一段时间将所有未入账的操作记录计算一个金额之和,然后写入到账户中,这样就减少了对账户的写操作,避免了冲突。

缺点:账户余额的更新有延迟,当入款操作没有入账,当前来了一笔出款时可能会因为余额不足而失败。

() 缓冲入账

将入账消息发布到消息队列中,然后让消费者慢慢消费。

缺点:也是会存在余额更新延迟的问题

(3) 热点账户锁分散

在热点账户下新建多个子账户,将请求按照某种方式分散到子账户中,在加锁的时候就可以只对子户加锁,锁的粒度更小,降低了冲突的风险。

缺点:当扣款时,一个子账户可能金额不够,需要考虑多账户扣款的情况。

(4) 内存数据库

将请求实时地更新在内存数据库(如Redis)中,然后异步存储到数据库(如mysql)中,由于内存数据库性能更强大,处理速度也会更快。

缺点:内存数据库有消息丢失的风险。

(5) 提升硬件处理能力

以上是关于学习笔记热点账户问题的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Flink SQL 功能解密系列 解决热点问题的大杀器 MiniBatch

windows程序设计——飞机大战笔记(解决输入混合password账户,结局自己主动记录数据)

戴尔笔记本怎么连不上手机热点?

阿里一面:关于缓存穿透缓存击穿缓存雪崩热点数据失效问题的解决方案

Mysql高手系列 - 第27篇:mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发设计及跨库转账问题

Java架构进阶笔记:一不小心就死锁了,怎么办?