高热点账户记账的解决思路

架构小魔方 2024-07-18 07:58:44

什么是高热点账户

简单来说,在整个系统中,某些账户产生的流水在整个账务系统占绝大多数,由于高频的余额变更势必产生数据库的锁冲突。

在账务系统中,每次账户余额的变更,需要记录当时的余额、变更后的余额、变更值。因此,每次的余额变更简单来说可以分解为如下几步操作:

获取账户的当前余额

记录流水

更新账户的余额

一般这三步都是在同一事务中执行,从而保证数据的一致性和完整性,并且一般情况基于复式记账,基本不可能只操作一个账户,可能会涉及多个账户的操作,所以可能导致的锁冲突的可能性就更大。

在账务系统中,热点账务的问题,将严重影响着账务系统的性能吞吐,如不解决,将不利于整个系统的稳定

常见的热点账户解决思路

一、异步化缓冲方式,也称之为缓冲记账:针对于一些平台内部户,对于余额更新不需要这么及时的账户,可以采用异步缓冲的方式,先只记录账务流水,在通过流水进行汇总更新余额。

这种一般用于不是直接出金的且也不需要实时反映账户余额情况的账户的场景,可以采用这种方式,通过记录账务流水,在经过账务流水异步进行汇总更新余额,这样将多次的数据更新变成了批量的一次数据更新,同时通过串行的方式的,避免了更新时带来的锁冲突,吞吐得到了极大的提升。

二、账户拆分,就是将一个大的账户拆分成为多个子账户,然后在更新操作打散到各个子账户上面去,这样可以在一定程度提升系统的记账性能,拆分账户的依据,可以是按照业务场景进行划分,也可以是按照客户分布去划分。这个有点类似于ConcurrentHashMap方式,建立分段桶,将锁的颗粒度尽可能的小,从而达到提升并发场景下的性能

这种方式一般情况,子账户越多,热点的可能就越分散,性能也就越好,同时也会在一定程度去增加账务的记账的复杂性,通常会用于对于出金有要求的账户,且需要实时能反应出账户的实时余额的场景下。

写在最后

对于热点账户来说解决思路来说,无非就是两种,一种化同步为异步,化零散为批量,另一种就是化大为小,化整为零的方式,两种方式各有优缺点,分别也用于不同的场景下,根据实际情况,有针对性的使用。

0 阅读:0

架构小魔方

简介:感谢大家的关注