本文主要是介绍蚂蚁--- 香港存款月结单百万级重构 系分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一:需求背景
1.1: 背景
随着香港银行极简开户,个人活期多币种,钱包用户引流等业务越来越多;香港银行存款客户数,账户数,交易数,均在今年快速增长,未来也会加快增长。
1.2: 存在的问题
账单中心存储月结单生成目前面临着较大的系统压力,安全隐患以及人工保障成本,其使用的跑批架构已不再适用于当前实际的业务发展阶段,迫切需要对月结单的跑批流程从底层根本的架构上进行重构设计,建设支持百万级客户的全新存款月结单链路。
1.3: 目标
建设一套多站点可复用的,并且香港存款月结单重构链路,将作为这套账单统一调度引擎的首个落地对象。将复用到多个站点。
1.4: 存在问题和挑战
问题:
1: 目前月结单都是按照单笔执行逻辑进行处理,导致每次生成月结单都要和DB进行交互,影响了月结单生产的效率。(性能问题)
2:月结单生成分为数据收集补充,pdf生成,消息通知三个阶段,耦合度极高。(扩展问题)
3:耦合度高导致无法独立修改进行,会DB交互
1.5: 目标
业务目标:(主要实现的功能点和效果)
绝对目标:
香港存款月结单生成 支持百万级文件量的全部存款月结单品种在 每月初一天24小时内完成;
(个人客户约50个,个人活期月结单和个人存款宝月结单约50万份)
(企业客户数不超过1万个)
目前最近一次月结单生成 是26万份左右,6小时完成;
相对目标:
香港存款月结单生成提升为原来的10倍,4800/小时 到 4.8万份文件/小时
系统目标:
1: 解耦
解耦香港存款月结单的各个子品种,使得 个人活期存款月结单,个人存款宝月结单,企业活期存款月结单,都作为各自独立,互不影响,可自定义调度控制的任务;
解耦存款月结单的三个技术阶段,使得每个子品种存款月结单的一阶段数据准备,二阶段文件生成,三阶段对客通知,都各自独立,互不影响;
2: 优化
将原来根据存款账户维度生成月结单的模式,优化为按照用户文件维度生成。
将原来单次调度执行单个账号的模式,优化为单次调度批量执行多个用户文件。
支持月结单指定规则跑批,包括圈人生成,历史月结单重新生成,多维度独立速率控制调度
3:提升月结单跑批性能,尽量减少存款月结单生成过程,对外部系统的RPC调用次数及对DB的调用次数
- 外汇实时换算接口,改为接入外汇SDK在月结单生成首次时,把获取到的汇率加载到缓存中,缓存有效期24小时,月结单生成时使用SDK在内存中进行汇率换算即可。
- 对客通知发沟通,改为调用沟通平台批量发送接口,每次发送1000个用户即可。
- 去除对于存款的调用,改为依赖账单本身数据库中的数据即可
- 月结单跑批过程中,对于账单本身数据库sql的增删改查操作,都尽量使用批量sql, 一次操作100个用户
- “于乘上结余的获取,不再月结单跑批过程中实时进行DB查询,改为在月结单账户回流表中新增一个承上结余字段,在月结单跑批前,就用一个单独的定时任务,获取并填入承上结余。月结单跑批时取回流表数据则可天然获得对应账号的承上结余。
- 对于交易数量为0的账号,不再sql去查数据库交易回流表,目前有交易的账号大约只占总账号的十分之一。
这篇关于蚂蚁--- 香港存款月结单百万级重构 系分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!