资讯详情

资讯详情

金融系统重构实战:微服务、数据安全、实时风控与大模型落地

在金融服务这个行业做系统研发第一印象永远是稳字当头。前几年我们团队守着那套跑了好几年的单体账务系统每改一个字段都像踩雷发版从双周拖到一个月最后甚至没人敢动。但业务不会等人新产品线、新渠道、新审计要求接踵而来我们用了两年多时间把整个平台从内到外重构了一轮。这篇内容想把这一路的核心经验梳理一下围绕账务微服务化、数据安全治理、实时风控、大模型应用四条主线展开每一块背后都有真实的工程取舍。适合正在做金融系统建设或数字化转型的同行参考也适合想了解金融后台到底在忙什么的同学读一读。1. 账务核心的微服务化拆的不是代码是业务边界1.1 单体系统还能撑多久从不敢发布到按需发布先说说当初为什么要拆。老系统是个典型的单体应用账户、交易、支付、清算、对账全在一套代码里40多万行。开发和测试环境还好一上生产就提心吊胆——改一个账户字段可能影响支付渠道的报文组装改一个对账逻辑可能把整个批处理拖慢。发版窗口固定问题修复还得排队业务方经常追着问这个功能到底什么时候能上。真正让我们下决心重构的是一次账户查询接口的故障。因为某个慢SQL拖垮了连接池连累了所有依赖这个库的服务线上整整趴了40分钟。那次事故之后我们组织了两次事件风暴Event Storming工作坊把业务人员和开发人员关在会议室把账户、用户、认证、交易、支付、清算、对账这些业务能力全部列出来领域专家挨个讲清每个环节的输入输出。最后大家形成共识拆分的依据不是代码层面这层好拆而是业务边界是否清晰。拆分顺序也很关键。我们先把注册登录、用户信息这类耦合度低、影响面小的服务拆出去验证整个CI/CD流水线和灰度发布机制跑得通再拆账户、交易这类核心域最后拆清结算和对账。每一步都定了业务验收标准比如账务准确率必须100%、核心接口P99延迟不能高于200毫秒、切换后需要连续七天对账无差异。没有这些红线重构就会变成一场无休止的拉锯战。1.2 跨服务资金一致性三种分布式事务方案怎么选拆成微服务之后第一个实际遇到的问题就是资金一致性。举最简单的转账例子用户发起一笔转账账户服务要扣款交易服务要记账通知服务要发消息。以前在一个事务里能搞定的事情现在散落到多个服务任何一个环节失败都会导致两边数据不一致。我们把业界常用方案对了一遍核心其实是在一致性和实现复杂度之间找平衡。方案一致性强度业务侵入度适用场景主要代价本地消息表最终一致中交易记录、异步通知、跨服务事件驱动需要额外对账兜底SAGA最终一致高长流程、多步骤业务比如开户签约首充补偿逻辑复杂易漏TCC接近强一致很高短事务、资源可预留比如库存锁定实现代价大冻结/解冻逻辑易出错我们最后主用的还是本地消息表。原因很实际资金类操作与其追求强一致不如把账记准、把账对平。具体做法是业务操作和消息写在同一个本地事务里消息发送靠异步任务消费方处理时必须做幂等。每天凌晨有专门的对账任务把流水、账务和余额三方对一遍哪怕差一分钱都能定位到具体交易。幂等设计是这里最容易踩坑的地方。每个请求必须带全局唯一的业务流水号接收方用一个去重表记录处理过的流水号。没有幂等消息重复投递一次用户的账就可能错一次。我们吃过这个亏后来在网关层统一生成流水号任何内部调用都必须携带这个规则写进了代码评审的检查项。1.3 热点账户与余额设计让流水走在余额前面拆分完成之后流量一上来另一个问题浮出水面热点账户。很多业务存在高频账户比如电商大商户的收款账户、营销活动的发券账户一天可能几十万笔资金操作。如果每笔都去update余额字段数据库的行锁竞争会非常严重延迟直接从几毫秒飙升到几百毫秒。我们试过几招效果比较明显的组合是余额分片加异步记账。把单一账户的余额按规则拆分成多个子账户每笔入账落到一个子账户查询总余额时把子账户汇总。同时交易入账先写流水余额更新放到异步任务里攒批执行。账务系统里有一条铁律流水不能丢余额可以滞后。只要流水完整任何时候都能重算余额反过来余额对了但流水缺了才是真正的灾难。当然异步记账会带来短时间的余额不一致所以我们的支付前置条件改为可用余额总余额-在途资金这样既保证了资金安全又缓解了热点冲突。这个经验不一定适用所有场景但思路是一致的热点账户的根本解法不是加机器而是减少对单点资源的争抢。2. 数据安全不能只靠制度加密、脱敏、审计的工程方案2.1 数据分级先行哪些字段算敏感一线开发必须清楚很多团队谈数据安全第一反应就是上加密上脱敏但真做的时候互相扯皮。后来我们发现问题出在数据分级没有做扎实。不知道哪些数据敏感、敏感到什么程度加密和脱敏的范围就只能靠拍脑袋决定。我们做了一套四级分级的表全公司用同一套标准级别数据示例存储要求展示要求L1 公开产品公告、公开规则无特殊要求正常展示L2 内部运营报表、内部操作日志访问控制内部系统可见L3 敏感姓名、手机号、银行卡号、身份证号加密存储员工端统一脱敏L4 机密支付密码、密钥、完整支付要素加密存储专用安全设施禁止明文展示这个表看起来简单真正落地难在每个字段都要对号入座。我们专门拉了一张数据字典把核心系统涉及的几千个字段逐个打标每个字段标注分级、所属系统、责任人。有了这张表之后做加密、脱敏、权限控制就不再是一笔糊涂账。一线开发连字段级别都不知道安全就无从谈起。2.2 加密链路三段式传输、存储、展示各守各的边界数据加密不是把数据库字段加密就完事而是要在传输、存储、展示三个环节各守边界。传输环节对外接口强制TLS服务间调用走双向TLSmTLS确保链路中没有任何明文裸奔的节点。存储环节L3字段用AES-256加密密钥统一托管在密钥管理服务里L4级的密钥还会放到专用的安全硬件中应用层拿不到明文密钥。这里我推荐用信封加密的思路上层用数据密钥DEK加密业务字段DEK再由主密钥KEK加密保存。这样主密钥只需要保存一把数据量再大也不怕轮换密钥时只需换DEK。最容易被忽略的是展示环节。客服、运营、开发谁都不该看到完整的卡号和手机号。我们在统一的数据访问层做了脱敏处理服务端查到明文后只有带特定权限的请求才能拿到完整数据其余接口一律返回掩码格式。手机号显示前三位加后四位银行卡号只留后四位。这个边界定死在代码规范里而不是靠每个业务团队自觉。2.3 内部越权是最隐蔽的泄露访问授权与审计留痕外部攻击很多团队防得住内部人越权反而难查。一次内部审计中我们发现个别员工用同事的账号查过客户资料而系统没有任何告警。后来我们上了场景化授权员工必须先提交访问申请说明用途审批通过后在限定时间窗口内访问过期自动失效。权限模型以RBAC为基础再叠加数据权限ABAC做到谁能看、能看谁、看多久全部可配置。审计日志是整个体系里最不能省的部分。每次对敏感数据的访问查询条件、返回结果摘要、操作人、时间、来源IP都写入审计日志。日志表设计成只追加禁止update和delete并对每条日志做哈希链后续任何篡改都能被校验出来。日常巡检定期抽查发现异常访问立刻告警。这套机制上线后内部越权行为基本上绝迹了不是因为大家变自觉了而是知道做了会被抓到。3. 反欺诈实时风控抢在黑产下单前完成拦截3.1 风控时延就是风险敞口从T1到毫秒级决策刚开始做风控时系统还是T1跑批的模式。黑产完成一批欺诈交易第二天我们才发现异常资金早被转移走了。后来把风控目标定成实时不是在交易后拦截而是在交易进行中的那一瞬间决定放行还是拒绝。实时风控的第一个瓶颈是数据采集。我们在客户端埋点采集设备信息、操作行为、点击序列在服务端记录IP、设备ID、账号关联关系全部通过消息队列实时汇入风控引擎。决策时延压到了P99小于100毫秒正常时段大部分交易能在50毫秒内给出结果。用户体感上完全感知不到但对黑产来说这个时间窗口已经足够让欺诈交易在完成前被掐断。3.2 规则引擎策略热更新规则可回滚早期风控规则都是写在代码里的一条规则从提需求到上线要排期一周等上线了黑产早换手法了。后来我们把规则全部配置化抽了一个规则引擎支持热更新新规则推上去即时生效全程不停机。规则的属性包括规则组、优先级、有效期、动作放行、验证、拦截、转人工。举一条很典型的规则同一设备ID在10分钟内支付密码错误超过5次触发短信验证。这条规则用配置就能表达一个运营人员自己就能调整阈值不用再等开发。但规则引擎最怕的是规则多了之后互相冲突所以我们定了优先级短路机制命中高优先级规则后不再往下执行同时所有规则变更都要求先灰度先对1%的流量生效观察一段时间没有异常再逐步放量。没有回滚能力的规则引擎等于定时炸弹这句话写在了风控组的墙上。3.3 特征画像设备指纹与行为序列怎么落地光有规则还不够规则要用特征吃饭。风控特征体系是另一个核心工程设备指纹、行为序列、关系网络三块缺一不可。设备指纹在客户端采集硬件信息与浏览器指纹服务端做归一化识别出同一台设备在不同账号下的使用轨迹。行为序列关注用户操作的时间与顺序比如正常用户不会在一分钟内连续切换三张银行卡。关系网络则借助图计算把设备、账号、手机号、IP关联成图谱很多单独看没问题的个体放到图里立刻暴露出团伙特征多个账号共用一台设备批量注册、养号、薅羊毛的套路一目了然。特征平台化是我们后期才补的课。早期特征散落在各个业务系统风控团队和工程团队各算各的同一指标口径都对不上。后来我们建了统一特征平台离线特征和实时特征共用一套口径风控策略直接引用特征ID开发一次多处复用。做风控的同学一定要记住先把特征治理清楚再谈模型和策略否则上层做得再漂亮底层数据都是歪的。3.4 规则和模型并行解释性和精确性并不冲突规则引擎可解释性强适合直接拦截但精度有限机器学习模型精度高却经常被质疑为什么拦我。我们的路线是规则和模型并行谁都不替代谁。具体分工是规则负责处理高置信度的确定性场景例如密码错误次数、设备黑名单模型负责识别复杂模式和微弱信号例如异常行为序列、社群风险关联。模型干预的结果标记为疑似不直接拒绝交易而是进入人工审核队列或追加验证。这既保留了对用户的友好也给风控团队留出了复查空间。模型上线必须有A/B对比观察拦截率、误伤率、用户投诉率三个指标跑通之后才逐步放大流量。黑产也在不断进化。模型不是训一次就一劳永逸我们保持每月一次的自动重训练节奏并持续把人工审核的结论回灌成训练样本。这是风控系统能够持续对抗的底层原因。4. 金融大模型的生产级落地RAG、Agent与部署选型4.1 金融场景为什么是大模型落地的最佳试验田金融行业本质上是文档密集型、对话密集型、决策密集型的行业。一家金融机构沉淀的规范文档、产品条款、FAQ、审批细则总量大得惊人而且每一条都可能影响真金白银。大模型最擅长的文本理解、知识抽取、内容生成几乎天然对应金融行业的痛点。我们团队陆续在智能客服、合同要素提取、运营问答、审核辅助几个场景做了探索效果比预期好。但金融落地大模型也有三个绕不开的坎幻觉、合规、数据安全。模型一本正经地编造答案在别的行业是用户体验问题在金融行业可能直接变成资金损失和舆情风险。所以在动手之前我们就定了原则大模型产出的内容必须要能溯源不能出错的场景必须保留人工兜底。4.2 RAG方案让模型不懂就说不懂不要乱编我们解决幻觉问题的主力方案是RAG检索增强生成。流程并不复杂先把内部知识库的文档解析、切片、向量化存到向量数据库用户提问时先做语义检索把最相关的几段文本找出来连同问题一起交给大模型生成回答。以客服场景为例用户问我这张卡一天能转多少限额模型不会凭空回答而是先从知识库检索到对应的产品条款把条款作为依据来组织回答同时给出条款来源和链接。如果检索结果与问题不相关或者置信度不足模型会直接说这个问题我暂时无法确认宁可不答也不编。我们内部把拒答率当成一个重要指标——在金融场景懂得拒绝比懂得回答更重要。这里最考验工程的是知识库建设。原始文档格式五花八门PDF、Word、HTML夹杂图表解析出来经常是乱的。我们花了不少精力做文档清洗和切片策略尝试过按固定长度切片、按标题结构切片最终按语义完整段落来切检索命中率和答案准确率都上了一个台阶。这些环节看着不起眼实际效果差异非常大。4.3 Agent辅助业务内部助手与流程自动化的边界大模型直接回答用户问题只是初阶玩法更有价值的是把大模型包装成Agent去调用业务系统完成整个任务。我们在内部做了一个员工助手员工向它提问麻烦查一下用户张三近三个月的交易流水整理一份风险摘要Agent会拆解任务调用用户查询接口、流水接口、风控接口把多份数据汇总成结构化摘要供员工参考。这里的关键是给Agent划定边界它只能调用内网白名单里的服务所有敏感操作必须记录日志生成材料只允许作为草稿最终由员工确认后提交。AI只是把重复劳动省掉了决策权仍然在人手里。这个定位还能规避很多合规风险也让业务部门更容易接受。4.4 部署选型与评测指标上线前必须盯住的五个数字金融机构的数据出域是个红线所以我们的大模型主要还是走私有化部署路线。代表项目用了开源模型再通过RAG注入内部知识整体跑在内部集群上。如果只是做简单问答中等参数的模型就够用没必要盲目追求超大模型涉及复杂推理和长文本场景才需要考虑更大参数量的模型成本增幅不止一个量级。部署之外评测体系更要提前建。我们上线前重点盯五个数字准确率、拒答率、幻觉率、审核通过率、端到端响应时延。准确率不是唯一指标某个模型在内部测试集上准确率很高但对敏感问题乱答幻觉率超标照样不能上。审核通过率指的是内容安全合规审核的通过比例涉及账户、资金、个人信息的内容必须100%通过才允许对外。还有一个容易被忽视的指标是响应时延大模型流式输出快慢直接影响客服坐席的使用意愿太慢的工具最终会被弃用。所以金融服务系统做智能化节奏远比嗓门重要。方向上可以大胆落地时必须把评测、溯源、人工兜底这几种脚手架先搭好。最后说几句实在话。在金融服务这个领域待久了你会发现所有高级的技术最后都要落到三个词上稳定、可审计、可回滚。我们做微服务化时保留了大量的手工对账脚本上风控模型时保留了每条规则的日志让大模型写答案时坚持附上引用来源这些都是笨办法。但在金融系统里笨办法往往是最稳的办法。如果这篇分享能让你少踩一两个坑或者在下一次架构评审时多一点底气那我就没白写。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →