首页 > 其他分享 >热点账户解决方案

热点账户解决方案

时间:2023-02-20 17:35:24浏览次数:50  
标签:存储 加锁 账户 解决方案 缓存 记账 热点

1. 介绍:

存在问题:

  • 账务系统双十一44wtps,单账户记账仅30tps。

原因:

  • 通过悲观锁保证记账的准确性和连续性。加锁却导致单账号的并发处理能力下降,俗称账户热点。
  • 热点账户广泛存在于大商户收单,代扣,营销、出资等场景,是行业普遍存在的技术问题。

2. 解决方案

2.1 xx解决方案:

2.1.1 缓存方案(削峰填谷)

  • 针对热点账户,将记账请求放入缓存队列,做异步处理。

存在问题:

  • 当针对某账户的请求过多时,单点的缓存队列存在容量瓶颈。

优化:

  • 例如收款方是热点账户,将缓存明细置于付款方,异步执行记账操作。

2.1.2 缓存方案问题

  • 用户体验:大商户余额分钟级延迟,很多业务需要商家提前报备申请。
  • 资金安全:流出类记账延迟,会容易造成透支资损,且该行为属于垫资行为,支付宝不具备垫资资质,存在监管风险。
  • 系统稳定:瞬时的大量数据库加锁操作容易影响数据库稳定。

2.2 行业解决方案

  1. 异步记账:(银行采用)存在上述问题
  2. 子账户拆分:子账户拆分,余额调拨业务逻辑复杂,存在余额碎片等问题。
  3. 流程保障:针对大商户,为了解决提前报备申请影响用户体验、流出透支造成资损等问题,在开户时直接设置走缓存方案,并签署法透追款合同。但也解决不了根本问题,只是一种妥协性的方案

3. 热点瓶颈分析

  • 热点产生的主要原因在于加锁,加锁的时长决定了热点的性能。

 

加锁时长主要由两部分构成:

  1. 业务逻辑处理过程,多个sql,查询,判断,计算,更新,落表等业务逻辑处理,会引发应用与存储的网络交互。
  2. sql实现,关系型事务引擎,为保证事务的ACID和减少磁盘读写,会写很多事务日志,每次都存在磁盘io,例如mysql会写redo、undo、bin log。

 

4. 优化方案

4.1 方案分析

  • 减少应用与存储的网络交互,减少磁盘io

4.2 方案说明

  • 将记账逻辑与存储层合并,下沉存储层处理,减少应用与存储的交互,减少网络交互开销。
  • 存储层日志合并,一次记账仅记录一次事务日志,减少磁盘io;

 

5 具体实现方案

5.1 计算存储设计

数据存储分为三层:

第一层:api层,类似于传统数据库的sql接受层

第二层:账务的逻辑处理

第三层:存储层,包含内存存储和硬盘存储

 

5.2 应用交互方案介绍

  • 引入Maxwell(高性能KV数据库),支持业务逻辑下沉,并能实现网络,存储IO的优化。

 

  • Maxwell定位于高频记账器,解决热点账户问题。普通账号仍由OB处理;热点账号OB仅记录记账明细,做容灾使用。

 

  • 通过xts保证OB和Maxwell的一致性。

 

5.3 Maxwell锁实现

  • 除了上述通过减少锁持有时长的优化,还在锁本身的机制上做了优化。
  • 锁实现并不是采用传统的方式,在加锁数据行上打标,而是通过将指定的节点绑定到一个特定的cpu上,这样该节点的记账请求都会在同一个cpu上进行处理,再加上cpu本身的串行处理机制,这样就可以保证同一个账号的所有记账请求都是一个一个排队并且顺序执行的。

标签:存储,加锁,账户,解决方案,缓存,记账,热点
From: https://www.cnblogs.com/xiaofeng-fu/p/17138275.html

相关文章

  • 颠覆传统的浇灌方式,计讯物联农业自动化灌溉解决方案助农增产提效
      灌溉是农业生产的关键环节,是保障农业发展的重要手段。然而,我国一些地区仍旧采用传统的人工漫灌作业,不仅效率低下,而且会造成资源浪费与人力耗费。在此背景下,计讯物联......
  • SpringBoot上传大文件的三种解决方案
    ​ 1 背景用户本地有一份txt或者csv文件,无论是从业务数据库导出、还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工、挖掘和共创应用的时候,首先要将本地文......
  • SpringMVC上传大文件的三种解决方案
    ​ 1,项目调研因为需要研究下断点上传的问题。找了很久终于找到一个比较好的项目。 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了githu......
  • 网页上传大文件的三种解决方案
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持......
  • 行人闯红灯自动识别抓拍系统解决方案​
    ​随着城市节奏的加快,人们出行的步伐也越来越紧凑,甚至在等红绿灯的间隙,不少行人为了抢赶时间,纷纷出现闯红灯的不文明行为,对自身及公共交通安全都造成了极大的威胁。为了约束......
  • 【FAQ】集成分析服务的常见问题及解决方案
    常见问题一:如何验证Analytics是否上报/接入成功?以及关键日志含义是什么?在初始化AnalyticsSDK前添加SDK日志开关如下:HiAnalyticsTools.enableLog();2.初始化SDK代码......
  • JS上传大文件的三种解决方案
    ​ 原理js将大文件分成多分,全部上传成功之后,调用合并接口合成文件。如果传输中断,下次上传的时候过滤掉已经上传成功的分片,将剩余的分片上传,成功之后合并文件。前置条件......
  • 上周热点回顾(2.13-2.19)
    热点随笔:· 你好ChatGPT,帮我看下这段代码有什么问题? (程序猿阿朗)· 小公司需要使用微服务架构吗? (九卷)· 炸了!3年图片都没了 (艾小仙)· 我已经受够了“系统......
  • vue-跨域问题解决方案
    1.使用django-cors-headers解决跨域问题1.使用pip安装pipinstalldjango-cors-headers2.添加到setting的app中INSTALLED_APPS=( ... 'corsheaders', ...)//......
  • ThreadLocal父子间通信的四种解决方案
    ThreadLocal父子间通信的四种解决方案ThreadLocal是存储在线程栈帧中的一块数据存储区域,其可以做到线程与线程之间的读写隔离。但是在我们的日常场景中,经常会出现父线程......