尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

金融科技技术架构与工程实践:从核心系统到实时风控的认知框架

金融科技技术架构与工程实践:从核心系统到实时风控的认知框架 金融行业这几年变化太快了快到什么程度我身边做传统金融IT的朋友前两年还在维护核心银行系统的COBOL代码今年已经开始研究怎么把风控模型塞进实时数据管道里。而另一边做互联网产品的团队想切金融赛道却连“头寸”“清算”“合规报送”这些基本概念都搞不清楚做出来的东西根本落不了地。financial-services这个词看起来简单但它背后牵扯的东西极其庞杂——银行、证券、保险、支付、借贷、财富管理每一个细分方向的技术栈和业务逻辑都天差地别。我写这篇东西就是想把我这些年在这个领域摸爬滚打攒下来的认知框架梳理一遍不管你是刚入行的工程师、想转型的产品经理还是单纯对这个行业好奇的技术人都能从中找到对自己有用的东西。1. 金融服务的底层逻辑钱怎么流、账怎么记、风险怎么控1.1 一切金融系统都绕不开的三个核心动作很多人一上来就研究微服务架构、分布式事务、高并发方向就偏了。金融系统的本质不是技术问题是记账问题。你去看任何一家金融机构的系统架构图剥掉那些花里胡哨的中间件和框架最核心的就三件事资金流转、账务记录、风险控制。资金流转说的是钱从A到B的过程。这个过程可能简单到一次扫码支付也可能复杂到跨境贸易结算涉及多个中间行和货币兑换。技术上的挑战在于怎么保证钱不会凭空消失也不会凭空多出来。这就引出了第二个核心动作——账务记录。每一笔资金变动都必须有对应的借贷分录而且必须满足会计恒等式。我见过太多技术团队做支付系统只关注“扣款成功”“到账成功”这两个状态完全不考虑中间态和对账逻辑上线三个月就出现账目对不上的情况。风险控制则是贯穿始终的。一笔交易发生前要判断该不该做反欺诈、信用评估发生时要监控是否异常实时风控规则发生后还要持续跟踪贷后管理、市场风险监测。这三个动作构成了金融服务的铁三角任何技术选型和架构设计都必须围绕它们展开。1.2 为什么金融系统对“一致性”的要求近乎偏执在互联网公司做惯了最终一致性的工程师第一次接触金融核心系统往往会不适应。电商系统里用户下单后库存扣减和订单创建可以异步处理短暂的不一致用户根本感知不到。但在金融场景下哪怕几毫秒的账务不一致都可能导致严重的后果。我举个实际例子。假设一个用户发起转账系统先从他的账户扣了100块然后准备给收款方加100块。如果在这个间隙系统崩溃了恢复后只看到扣款记录没有入账记录这100块就“消失”了。用户会投诉监管会问责严重的可能构成资金挪用。所以金融系统对ACID的要求不是“最好有”而是“必须有”。但分布式系统天然难以保证强一致性这就产生了矛盾。业界的做法通常是在核心账务层使用关系型数据库配合严格的事务隔离级别而在外围业务层通过TCCTry-Confirm-Cancel、Saga模式等补偿事务来平衡性能和一致性。TCC的思路是先预留资源Try确认后再实际执行Confirm如果中间出问题就取消预留Cancel。这套机制在支付、借贷等场景中非常常见。注意TCC的Cancel操作必须保证幂等性否则重试时可能造成重复回滚反而引入新的不一致。1.3 监管合规不是“附加题”是“必答题”做金融科技和做普通互联网产品最大的区别在于监管合规不是你可以先跑起来再慢慢补的东西它是准入门槛。支付需要牌照借贷需要牌照做征信需要备案卖保险产品需要代理资格。技术团队如果早期不考虑合规要求后期改造成本可能是重建级别的。具体到技术层面合规要求会直接影响到系统设计。比如**反洗钱AML**要求你能够追溯每一笔资金的来源和去向这意味着你的数据模型必须支持完整的资金链路追踪。**KYC了解你的客户**要求你在开户时采集和验证用户身份信息这涉及到证件识别、活体检测、黑名单比对等一系列技术组件。数据本地化要求某些类型的金融数据必须存储在境内这直接影响你的云服务选型和灾备方案。我个人的经验是在项目启动阶段就拉上合规部门的同事一起评审架构方案哪怕他们不懂技术但他们知道监管的底线在哪里。很多返工都是因为技术团队想当然地认为“这个应该没问题”结果被监管打回来。2. 银行、证券、保险的技术栈差异有多大2.1 银行核心系统稳定压倒一切银行的核心系统是我见过最保守的技术环境。很多大型银行的核心账务系统至今仍在运行IBM大型机上的COBOL程序不是因为银行没钱换而是因为迁移风险太高。一套核心系统承载着数亿账户的存取款、转账、计息等业务任何迁移过程中的数据丢失或逻辑错误都可能引发系统性风险。但这不意味着银行完全不创新。近年来银行的技术演进主要发生在核心系统之外——渠道层手机银行、网上银行、中台层客户中心、产品中心、交易中心、数据层数据仓库、实时风控。核心系统本身则通过服务封装的方式对外提供能力新系统通过API网关调用核心服务而不是直接操作核心数据库。如果你要进入银行技术领域需要重点掌握的技术包括IBM大型机/zOS虽然老但短期内不会消失、DB2/Oracle核心数据库、MQ系列中间件可靠消息传输、Spring生态外围系统开发。银行对开源技术的接受度在提高但核心链路仍然以商业软件为主。2.2 证券交易系统低延迟是生命线证券行业对技术的要求和银行截然不同。银行追求的是“不出错”证券追求的是“快”。在量化交易和高频交易场景下几微秒的延迟差异可能意味着数百万的盈亏。这就导致证券交易系统的技术栈极度偏向性能优化。证券交易系统的核心组件包括订单网关接收交易指令、撮合引擎匹配买卖订单、行情分发推送实时价格、风控引擎实时限额和合规检查。撮合引擎通常用C编写追求极致的吞吐量和低延迟。行情分发则大量使用组播技术和内核旁路技术来减少网络栈开销。和银行不同证券行业对开源技术的接受度高得多。很多券商的核心交易系统已经跑在Linux上使用DPDK加速网络处理用FPGA做硬件级别的行情解码。如果你有C、网络编程、操作系统底层优化的背景证券行业是非常好的方向。2.3 保险系统复杂在产品不在交易保险公司的技术挑战和银行、证券都不太一样。保险的交易频率远低于支付和证券但产品逻辑极其复杂。一款保险产品可能包含数十个条款、上百个费率因子、复杂的赔付规则和准备金计算逻辑。技术上的难点在于如何把这些复杂的业务规则转化为可维护、可扩展的系统。保险系统的核心模块包括产品引擎定义和管理保险产品、核保引擎评估风险和确定费率、理赔系统处理赔付申请、精算系统计算准备金和利润。产品引擎通常需要支持规则引擎或领域特定语言DSL让业务人员能够自行配置产品而不依赖开发。我见过不少保险科技创业公司技术团队很强但业务理解太浅做出来的产品引擎根本满足不了精算师的需求。保险行业的技术人必须花大量时间理解精算逻辑和监管报送要求否则做出来的东西就是空中楼阁。维度银行证券保险核心诉求稳定、准确低延迟、高吞吐灵活、可配置主流语言COBOL/JavaC/JavaJava/Python数据库DB2/Oracle内存数据库/KDBOracle/PostgreSQL技术风格保守、商业软件为主激进、开源自研务实、规则引擎驱动监管重点资本充足率、反洗钱交易合规、信息披露偿付能力、条款合规3. 支付与借贷互联网基因最强的金融赛道3.1 支付系统的核心链路拆解支付是金融领域里互联网化最彻底的赛道也是很多技术人进入金融行业的第一个切入点。一个典型的支付系统包含以下几个核心环节收单商户发起支付请求收单系统负责接收和初步校验。这一步的关键是幂等性设计——同一个订单号重复请求必须返回相同结果否则用户重复点击就可能扣两次款。路由根据支付方式、金额、商户类型等条件选择最优的支付通道。路由策略直接影响成功率和成本是支付系统的核心竞争力之一。好的路由系统会实时监控各通道的成功率和响应时间动态调整权重。清结算支付成功后需要和商户、通道方进行资金清算和对账。清结算系统通常采用T1或T0模式涉及大量的批量处理和文件交互。对账是整个支付系统中最容易被低估的环节但恰恰是最容易出问题的环节。风控实时判断交易是否存在欺诈风险。支付风控的特点是决策时间极短通常要求100毫秒以内但需要综合大量维度的信息设备指纹、行为特征、历史交易、黑名单等。# 支付幂等性处理的简化示例 def process_payment(order_id, amount, user_id): # 先查是否已处理过该订单 existing payment_record.query(order_idorder_id) if existing: return existing.result # 直接返回之前的结果 # 使用数据库唯一约束防止并发重复插入 try: record payment_record.create( order_idorder_id, amountamount, user_iduser_id, statusprocessing ) except DuplicateKeyError: # 并发情况下另一个请求已经创建了记录 return payment_record.query(order_idorder_id).result # 执行实际扣款逻辑 result execute_payment(record) record.update(statuscompleted, resultresult) return result3.2 借贷业务的技术关键点借贷业务的技术复杂度和支付相当但侧重点不同。支付关注的是“钱能不能快速准确地转过去”借贷关注的是“这笔钱该不该借、借了能不能收回来”。授信引擎是借贷系统的核心。它需要综合用户的身份信息、征信数据、行为数据、社交数据等多维度信息输出一个信用额度和利率。授信引擎通常采用规则模型的混合架构硬规则如年龄限制、黑名单做快速过滤评分模型做精细化评估。还款管理是另一个技术难点。等额本息、等额本金、先息后本、随借随还……不同的还款方式对应不同的计算逻辑。而且还要处理提前还款、逾期罚息、展期、减免等各种异常情况。我见过不少借贷系统在还款计划生成上出bug导致用户实际还款金额和预期不符引发大量投诉。催收系统虽然听起来不那么“技术”但实际上是借贷业务中技术含量很高的环节。智能催收需要根据用户的逾期天数、还款意愿、历史行为等因素动态选择催收策略短信、电话、法律途径并优化催收话术和时机。3.3 从0到1搭建支付系统的避坑清单如果你正在或准备从零搭建一个支付系统以下是我踩过的坑和总结的经验第一不要自己造轮子做账务核心。很多团队觉得账务逻辑简单自己写一套借贷记账就行。但真正的账务系统需要考虑多币种、多会计主体、日切、试算平衡、历史数据归档等一系列问题。建议在早期就引入成熟的账务中间件或参考复式记账的成熟方案。第二对账系统要比支付系统更早建设。很多团队把对账当作“后期优化”的事情结果上线后发现和通道方的账对不上只能人工排查。对账系统应该和支付主链路同步设计确保每一笔交易都有完整的对账文件生成和比对能力。第三风控规则要可配置、可回滚。风控规则经常需要调整如果每次调整都要发版响应速度根本跟不上。建议使用规则引擎或配置中心来管理风控规则支持热更新和灰度发布。同时每条规则都要有回滚机制万一新规则误杀了大量正常交易能快速恢复。第四预留监管报送接口。支付业务涉及大量的监管报送要求反洗钱、大额交易报告、可疑交易报告等。这些报送接口在系统设计初期就要预留不要等到监管检查时才临时抱佛脚。4. 金融数据工程从报表到实时风控的数据链路4.1 金融数据平台的典型架构金融行业的数据量不一定比互联网公司大但数据的质量要求和合规要求高得多。一笔交易数据出错可能意味着监管报送错误、财务报表失真、风控决策失误。所以金融数据平台的建设思路和互联网数据平台有本质区别。典型的金融数据平台分为贴源层ODS、明细层DWD、汇总层DWS、应用层ADS四层。贴源层几乎不做数据清洗原样保留业务系统的数据目的是可追溯。明细层做轻度清洗和标准化汇总层按主题域聚合应用层面向具体报表和分析场景。和互联网数据平台最大的区别在于数据血缘和数据质量监控的重要性。金融监管要求能够追溯每一个指标的计算口径和数据来源所以数据血缘系统不是“锦上添花”而是“必备基础设施”。数据质量监控则需要覆盖完整性、准确性、一致性、及时性等多个维度任何异常都要能及时发现和告警。4.2 实时风控的数据管道怎么搭实时风控是金融数据工程中最有技术挑战性的场景之一。它要求在极短的时间内通常100毫秒以内完成大量特征的提取和计算然后输出风控决策。这对数据管道的架构设计提出了很高的要求。一个典型的实时风控数据管道包含以下环节数据采集从业务系统实时捕获交易事件。常用的方案是CDC变更数据捕获通过解析数据库binlog来获取数据变更对业务系统侵入小。消息传输使用Kafka等消息队列做缓冲和解耦。金融场景下需要特别注意消息的顺序性和不丢失通常需要设置acksall并开启幂等生产者。特征计算这是最核心的环节。特征分为实时特征如最近1分钟的交易次数和离线特征如用户历史平均交易金额。实时特征通常用Flink等流处理引擎计算离线特征则从数据仓库中预先计算好并加载到缓存中。规则/模型执行将特征输入规则引擎或模型输出风控决策。规则引擎需要支持复杂的条件组合和优先级管理模型服务则需要保证低延迟和高可用。决策输出与反馈将决策结果返回给业务系统同时记录决策日志用于后续分析和模型迭代。提示实时风控系统中特征计算的延迟往往是瓶颈。建议对高频特征做预聚合对低频特征做异步加载避免在关键路径上做重计算。4.3 数据治理在金融行业的特殊意义在互联网公司数据治理往往被视为“脏活累活”优先级不高。但在金融行业数据治理直接关系到监管合规和业务决策的准确性是必须做好的基础工作。金融数据治理的核心包括元数据管理记录每个数据字段的业务含义、计算口径、负责人、数据标准管理统一全公司的数据定义和编码规则、数据质量管理监控和提升数据的准确性、完整性、一致性、数据安全管理分类分级、脱敏、访问控制。我特别想强调数据标准管理的重要性。在金融机构中同一个概念在不同系统中可能有不同的定义。比如“客户”这个词在核心银行系统里指的是开户人在信用卡系统里指的是持卡人在理财系统里指的是投资者。如果不做统一的数据标准做跨系统分析时就会一团糟。建议在数据平台建设初期就成立数据标准委员会由业务和技术共同参与制定全公司统一的数据字典。5. 金融系统安全比普通互联网系统多防什么5.1 金融行业面临的特殊安全威胁金融系统是黑客攻击的头号目标没有之一。普通互联网系统被攻破损失的是数据和用户信任金融系统被攻破损失的是真金白银。这就决定了金融安全防护的级别和思路和普通系统有本质区别。金融系统面临的特殊威胁包括交易欺诈盗刷、伪卡、账户接管、资金盗取利用系统漏洞直接转移资金、数据泄露客户身份信息、账户信息、交易记录、拒绝服务攻击导致交易系统不可用、内部威胁员工违规操作或数据窃取。其中账户接管是我认为最值得关注的威胁。攻击者通过撞库、钓鱼、短信劫持等方式获取用户凭证后登录用户账户进行转账或消费。防御账户接管需要多层次的防护登录时的设备指纹识别、行为验证码、异常登录检测交易时的二次验证、限额控制、异常交易拦截。5.2 交易安全的核心防护手段交易安全是金融安全的重中之重。每一笔交易都需要经过严格的身份验证和授权检查。核心防护手段包括多因素认证密码短信验证码生物特征根据交易金额和风险等级动态调整认证强度。小额低风险交易可能只需要密码大额高风险交易则需要多重验证。交易签名对关键交易参数进行数字签名防止请求被篡改。签名密钥存储在硬件安全模块HSM中确保密钥不被泄露。限额控制单笔限额、日累计限额、月累计限额不同渠道、不同认证方式对应不同的限额策略。限额控制需要在服务端严格执行不能依赖客户端。实时反欺诈基于规则和模型的实时决策识别异常交易模式。比如短时间内多地交易、深夜大额转账、新设备首次交易等。交易回溯完整记录每一笔交易的请求、处理、响应全过程支持事后审计和纠纷处理。日志需要防篡改存储通常使用WORM一次写入多次读取存储或区块链存证。5.3 安全开发流程在金融团队中的落地金融行业的安全要求最终要落到开发流程中。和普通互联网团队相比金融团队在安全开发上有几个必须做到的额外动作安全需求评审每个需求在评审时都要有安全人员参与识别潜在的安全风险并制定应对措施。这个环节最容易被忽略但恰恰是最重要的——在需求阶段发现安全问题修复成本最低。威胁建模对核心系统进行系统化的威胁建模识别攻击面、攻击路径和防护措施。STRIDE是常用的威胁建模框架从欺骗、篡改、否认、信息泄露、拒绝服务、权限提升六个维度分析威胁。安全编码规范金融行业对安全编码的要求比通用规范更严格。比如禁止在日志中打印敏感信息、禁止使用不安全的加密算法、禁止硬编码密钥、必须对用户输入做严格校验等。渗透测试上线前必须经过专业渗透测试覆盖Web应用、移动App、API接口等所有对外暴露的攻击面。渗透测试不是走过场必须对发现的问题逐一修复并复测。安全监控与应急响应上线后需要7x24小时的安全监控对异常行为实时告警。同时要有完善的应急响应预案确保安全事件发生时能够快速定位、止损和恢复。6. 金融科技团队的技术选型与组织协作6.1 技术选型的核心原则合规优先稳定其次创新最后在金融科技团队做技术选型和纯互联网团队最大的区别是决策优先级不同。互联网团队通常把“创新”和“效率”放在前面金融团队必须把“合规”和“稳定”放在前面。具体来说选型时要问自己几个问题这个技术是否满足监管要求这个技术是否有足够的社区支持和商业保障这个技术团队是否有人能hold住这个技术出问题时是否有替代方案以数据库选型为例。互联网公司可能倾向于使用NewSQL或NoSQL来应对海量数据和高并发但金融核心系统仍然以Oracle、DB2等传统关系型数据库为主。原因很简单这些数据库经过了数十年的金融场景验证有完善的ACID保障、成熟的运维体系和丰富的金融行业经验。新兴数据库虽然在某些维度上性能更好但在金融核心场景下的稳定性和合规性还没有得到充分验证。当然这不意味着金融团队不能用新技术。外围系统、数据分析、内部工具等非核心场景完全可以采用更现代的技术栈。关键是要做好风险隔离——新技术的故障不能影响到核心业务。6.2 金融团队的组织架构和协作模式金融科技团队的组织架构通常比互联网团队更复杂因为需要同时兼顾业务、技术、合规、风控等多个维度。常见的组织模式包括业务线制按业务线支付、借贷、理财等划分团队每个团队包含产品、开发、测试、运维角色。优点是业务响应快缺点是公共能力容易重复建设。平台业务制平台团队负责公共技术能力账务、风控、数据等业务团队负责具体业务场景。优点是能力复用缺点是沟通成本高平台团队容易脱离业务。项目制按项目临时组建跨职能团队项目结束后解散。优点是灵活缺点是知识沉淀差团队稳定性低。我个人的经验是平台业务制在金融科技团队中效果最好但需要解决好平台团队和业务团队的协作问题。关键是要建立清晰的服务契约和SLA平台团队对业务团队的服务请求要有明确的响应时间和质量标准。同时平台团队的核心成员应该定期轮岗到业务团队保持对业务的理解。6.3 技术债务在金融系统中的特殊处理方式技术债务是所有技术团队都面临的问题但金融系统的技术债务处理有其特殊性。普通互联网系统可以“先跑起来再优化”金融系统不行——核心账务逻辑的错误可能导致资金损失监管报送的缺失可能导致罚款。金融系统的技术债务处理原则是核心链路零容忍外围系统有计划偿还。核心账务、清算、风控等直接影响资金安全和监管合规的模块技术债务必须立即处理不能有任何妥协。外围系统如报表、内部工具等可以制定偿还计划逐步优化。另外金融系统的技术债务往往和业务逻辑的复杂性纠缠在一起。很多技术债务的产生不是因为技术方案不好而是因为业务规则太复杂、变化太频繁。处理这类技术债务需要从业务建模入手通过领域驱动设计等方法把复杂的业务逻辑梳理清楚然后再做技术重构。7. 我在这行踩过的几个印象深刻的坑7.1 一次对账差异引发的连锁反应早年我参与过一个支付项目的对账系统建设。上线初期一切正常但到了月底突然发现和某家通道方的对账差异率飙升。排查后发现通道方在月底做了一次系统升级返回的交易状态字段含义发生了变化而我们没有及时同步。这个问题表面上是技术问题实际上是变更管理的问题。金融系统和外部机构的交互非常多任何一方的变更都可能影响另一方。后来我们建立了外部依赖变更监控机制定期和通道方核对接口文档和字段定义同时在系统中增加了对异常状态的自动识别和告警。这个坑给我的教训是金融系统的稳定性不仅取决于自己的代码质量还取决于对外部依赖的管理能力。对账系统尤其如此它是对接双方系统的“最后一道防线”必须足够健壮和敏感。7.2 风控规则误杀导致的业务雪崩有一次我们上线了一条新的风控规则目的是拦截疑似盗刷的交易。规则逻辑是如果同一设备在短时间内关联了多个账户则判定为高风险。上线后确实拦截了一些欺诈交易但同时也误杀了大量正常用户——很多家庭共用一台设备或者用户换手机后重新登录。误杀率飙升后用户投诉激增客服压力巨大业务方直接要求下线规则。这次事件让我深刻理解了风控规则灰度发布的重要性。任何新规则上线前都应该先在小流量上验证观察误杀率和拦截率的变化确认无误后再逐步扩大流量。另外风控规则必须有快速回滚机制。当发现规则异常时能够在分钟级别内下线规则而不是等发版流程走完。我们后来在规则引擎中增加了“一键停用”功能所有规则都支持实时启停。7.3 监管报送数据口径不一致的返工监管报送是金融行业技术团队绕不开的工作。有一次我们按照监管要求报送一批数据结果被退回原因是数据口径和监管的理解不一致。我们理解的“贷款余额”是本金余额监管要求的是本金加应收利息。这个差异导致所有报送数据都需要重新计算。这件事的根源在于业务人员和技术人员对监管要求的理解存在偏差。技术团队通常按照自己的理解去实现没有和合规部门做充分的确认。后来我们建立了监管报送需求三方评审机制——业务方、技术方、合规方共同评审每一条监管要求确保理解一致后再开发。这个坑也让我意识到金融科技团队中业务分析师角色的重要性。业务分析师需要既懂业务又懂技术能够在业务需求和技术实现之间做准确的翻译。很多返工和事故根源都在于需求传递过程中的信息失真。8. 写给想进入金融科技领域的技术人如果你正在考虑进入金融科技领域或者已经在这个领域但想找到更好的发展方向我有几个发自内心的建议。第一不要只盯着技术。金融科技的核心竞争力不在于你用了多先进的技术框架而在于你对金融业务的理解深度。花时间学习会计基础、金融产品逻辑、监管框架这些知识会让你在技术决策时更有判断力。第二选择细分方向深耕。金融科技太宽泛了支付、借贷、证券、保险、风控、数据每个方向都足够你钻研很多年。建议先选择一个方向做深成为这个方向的专家然后再横向扩展。什么都懂一点但什么都不精的人在金融科技领域很难有竞争力。第三重视合规和安全。这两块在互联网公司可能不是技术人的核心关注点但在金融行业是必修课。主动学习监管要求、安全规范、审计标准这些知识会成为你的差异化优势。第四保持对业务的敬畏。金融行业涉及的是人们的血汗钱一个bug可能让一个家庭陷入困境。技术上的自信是好事但对金融业务的敬畏之心不能丢。每次上线前多问自己一句如果出问题了最坏的结果是什么我能不能承受这个行业不缺聪明人缺的是既聪明又踏实、既懂技术又懂业务、既有创新精神又有风险意识的人。如果你觉得自己是这样的人金融科技领域有足够大的舞台等着你。
返回列表