一、“热点账户”问题简介
商业银行业务系统构建中,经常会碰到“热点账户”问题,即在某些业务场景下,出现短时间内大量交易并发处理系统中某一特定客户账户,造成交易大量超时或者失败,严重影响客户体验,甚至对系统平稳运行也带来不利影响。事实上,在系统中能造成热点的不一定就是客户账户,其他实体,如额度、限额、内部户等,也可能成为热点。
二、“热点账户”问题应对思路
那么,如何处理“热点账户”问题呢?
首先要考虑系统架构的匹配性,考虑业务模式、系统负载等与当前所采用的架构类型是否匹配,例如:当前系统的负载峰值已超过10000TPS,并且系统是单体结构,那赶紧采用当前流行的分布式微服务架构重构是正道,具体而微的改进解决不了架构不匹配问题。
其次建议升级系统硬件和基础软件,所谓“大力出奇迹”,从整体上提升系统吞吐能力,来解决“热点账户”问题,这种方式具有良好的通用性,并且不需要业务和系统设计配合调整,也应优先考虑。
第三是审视业务模式设计,从业务模式上避免热点的产生:如生肖纪念币预约业务,预先将纪念币额度配置到众多网点上,从而将客户的预约分散到各网点,既消除了热点,同时也方便商业银行内部现金实物的管理;其他如大额存单抢购、国债抢购等业务,可以采用类似的业务模式设计。
三、特定技术处理策略
以上三种办法之外,针对特定处理场景,可以考虑具体技术处理策略,一般的思路是从消除热点发生的条件进行设计,分别是:消除并发;分散热点;减少交易处理时长。这里必须再次声明,这些策略都有具体的适用场景,都有适用的前置条件,也都会带来一些需要容忍的新问题,在使用时必须特别注意。
1. 消除并发策略
采用消除并发策略的典型场景有批转联、批量处理场景,通过将输入中涉及某个账户的条目归拢到一起,分配一个批量服务顺序处理,消除对单一账户的并发访问来解决热点账户问题;适用于批量代发业务;需注意该策略可能会增加批量处理时长。
2. 分散热点策略
采用分散热点策略有两种典型方式。
一是影子账户方式,即为一个账户设立多个影子账户,将对于账户的贷记操作转化为对以某种负载均衡方式选取的影子账户的贷记操作,影子账户中贷记操作金额准实时或者日终同步到该账户;借记操作仍在该账户进行;适用于贷记操作多、借记操作少的业务处理场景;在该方式中,由于贷记金额非实时更新,会增加借记操作因余额不足报错的概率。
二是余额延后更新方式,利用数据库并发插入容易并发更新困难的特性,只记录账户流水明细,不更新账户余额;然后根据流水明细准实时更新账户余额,或者在日终根据账户明细累计出账户余额;一般适用于业务统计、内部管理的内部账户业务处理;注意在该策略中,由于不实时更新余额,账户存在透支可能。
3. 缩短交易处理时长策略
采用缩短交易处理时长策略的典型方式是提升系统对热点账户的处理速度,如将热点账户余额缓存到Redis中,加快余额更新速度,减少交易处理时长,从而消除交易等待,减少热点;这种策略的难点在于保证缓存中账户余额和数据库落地账户余额的一致性,并在缓存出错时能够快速恢复账户余额。
四、“热点账户”处理流程
1. “热点账户”监控识别
“热点账户”监控识别目前一般由运维人员根据系统状况判断,包括系统日志、系统状态信息、数据库日志、数据库状态信息、应用日志信息、应用报错信息等;一种设想的自动化监控识别方式是由运维系统采用滑动时间窗口策略,根据业务应用的访问日志,统计配置时间段内账户的访问情况,根据预设标准选出候选“热点账户”,经人工判断确认。
2. “热点账户”处理方式
目前关于“热点账户”的处理一般都是以事后的方式进行,即先识别确认“热点账户”后,根据热点账户出现场景及业务性质,选择相匹配的处理方式,然后进行实施。
那事中进行处理的方式是否可行呢?理论上是可行的,但在目前的实际生产中,一般很少进行事中处理,原因主要有:不能排除一些账户偶发的热点,这些账户在成为热点时可以被识别出来,但后续处理中极可能再也不会成为热点,如果按照热点账户对待处理,将空耗系统资源、增加系统复杂度;对于识别出来的热点账户,目前尚没有统一的处理模式或者匹配规则来处理,无法确认采用何种处理方式;还有,实施联动处理本身有相当的复杂度,代价不菲,热点账户现象出现场景有限,人工可能更经济。
总之,目前生产上对于热点账户的处理,一般还需人工介入分析后,进行事后处理,很少采用“监控-识别-响应”的自动化处理方式。
五、总结
以上就是笔者就“热点账户”处理的一些初步总结。
当前,随着软硬件技术的发展,“热点账户”问题不如前些年突出,但“热点账户”问题并没有完全消失,在出现时需要仔细应对。对于一些类“热点账户”的问题,”热点账户“上的处理经验也可以提供借鉴。
网友评论