第一章 全面的风险业务流程分析

为了深入理解海外风险中台的技术架构,首先必须对其服务的核心业务领域建立清晰的认知。本章将从业务视角出发,解构平台所支撑的完整风险管理生命周期,并以三个典型的业务场景——同步决策的“展期”流程、异步决策的“授信”(“戳额”)流程以及人机结合的“人工审核”流程——作为案例,详细剖析业务逻辑与系统执行之间的精密互动。

核心业务概念与范畴

在金融科技领域,风险是指在未来时间范围内,可能发生某种损失的不确定性。对于公司的海外借贷业务而言,风险特指借款人到期无力或无意偿还债务,从而造成债权人本金与收益蒙受部分或全部损失的可能性。风险控制(风控)的目标并非消除风险,而是通过一系列技术和策略手段,将潜在的风险转化为实际损失的可能性降至最低。

该海外风险中台正是为实现这一目标而构建的核心系统,其服务范围覆盖了菲律宾、巴基斯坦、墨西哥、印尼等多个国家站点,支撑着包括现金贷(Cashloan)、电商消费分期(Lazada FC, TikTok, PPL)、针对海外务工人员的专项贷款(OFW-CL)在内的多种业务线。平台处理的业务事件贯穿用户生命周期的各个关键节点,包括但不限于用户注册、授信申请、发标、提现、还款行为分析以及贷款展期等。

案例研究一:同步决策 — 贷款“展期”流程

同步决策流程适用于那些要求系统在短时间内给出明确答复、用户正在实时等待结果的业务场景。贷款展期便是一个绝佳的例子,它代表了一种低延迟、高确定性的交互模式。

根据系统时序图的分析,一个典型的展期风控流程调用链路如下:

  1. 请求发起:上游业务系统(client)因用户申请展期,向风险中台的展期服务(PhiLoanExtension)发起一个同步API调用。
  2. 流程实例化PhiLoanExtension服务接收到请求后,立即组装并实例化一个名为RiskFlow的核心流程对象。这个对象将作为本次展期风控任务的上下文,贯穿整个执行过程。
  3. 数据扩充(变量计算):为了做出决策,系统需要获取与该用户和该笔贷款相关的风险特征。PhiLoanExtension服务会调用内部的“字段变量中心”服务(Irs)的/calVars接口,请求计算展期场景所需的特定字段变量值。Irs服务完成计算后,将结果同步返回。
  4. 规则引擎预处理:获得所有必需的变量后,PhiLoanExtension服务根据预设的模板,将这些变量和值组装成规则引擎(drools)能够理解的数据格式。
  5. 决策执行与审计:在调用规则引擎之前,系统会将格式化后的请求数据写入日志表risk_flow_log,以备审计和问题追溯。随后,PhiLoanExtensiondrools服务发起决策请求。
  6. 结果处理与返回drools引擎执行相应的规则集,并返回决策结果(如“批准展期”、“拒绝展期”)。PhiLoanExtension服务在接收到响应后,再次将其写入risk_flow_log,完成审计闭环。最后,将最终决策结果通过API响应同步返回给最初的调用方client

案例研究二:异步决策 — “授信”(“戳额”)流程

与展期不同,新用户的授信审批是一个计算密集型且更为复杂的过程。它可能需要调用多个第三方数据源、运行多个复杂的机器学习模型,并可能涉及人工审核环节。这类操作耗时较长,无法在一次同步API调用中完成。因此,系统采用异步处理模式,以优化用户体验和系统吞吐量。

一个典型的异步授信流程如下:

  1. 请求接收:用户通过前端应用提交授信申请。上游业务系统(client)将请求发送至风险中台的异步流程入口服务(phi-quechao)。
  2. 任务入队phi-quechao服务在接收到请求后,进行初步的校验和处理,然后将该授信任务封装成一个消息,投递到消息队列(如RabbitMQ)中。投递成功后,它会立即向上游返回一个“处理中”的响应,此时用户界面可以显示“审核中,请耐心等待”,从而将前端交互与后端复杂的处理流程解耦。
  3. 任务调度与执行:后台的异步任务批处理服务(phi-job)作为消息队列的消费者,会拉取授信任务。phi-job将任务分发给异步风控业务的调度中心(phi-risk)。
  4. 核心风控流程编排phi-risk服务是整个异步流程的大脑,它依据预定义的Pipeline(管道),按顺序调度执行一系列子任务,这通常包括:
    • 调用Irs服务计算上百个甚至上千个风险变量。
    • 调用模型编排服务(phi-modelschedual),执行多个评分模型。
    • 调用drools引擎,根据变量和模型分执行复杂的策略规则。
  5. 决策生成与通知:所有计算和规则执行完毕后,决策服务(phi-riskdecision)汇总结果,生成最终的授信决策(如授信额度、费率、评级或拒绝)。这个结果会被持久化到数据库,并通过另一个消息队列主题,将“决策完成”的事件通知给下游系统,例如更新用户状态、发送通知等。

案例研究三:人机结合 — “人工审核”流程

对于机器决策无法明确判断的“灰色”用户,系统会将其转入人工审核流程,结合人类专家的经验进行最终裁定。这是一个典型的“人机结合”场景,对系统的任务调度、状态管理和外部通信提出了更高的要求。

以巴基斯坦站的人审流程为例,其技术实现如下:

  1. 触发与任务生成:当自动化风控流程(如授信)的规则引擎决策结果为“转人工”(manualFlag: 1)时,risk-decision服务会将一个包含用户ID、业务ID和流程ID的人审任务写入任务表(tb_risk_flow_task)中。
  2. 后台任务调度:系统采用xxlJob作为分布式任务调度框架。一个名为RiskFlowTaskNonExecutionHandler的任务执行器会定时扫描任务表,捞取待处理的人审任务。
  3. 任务执行与数据准备:任务执行器获取任务后,会调用Decision服务,准备该用户用于人工审核所需的各类数据(如基础资料、风险标签等)。
  4. 结果持久化与通知:审核员在人审系统(Capital Pata)中完成审核并提交结果。该结果会被Decision服务接收并持久化到人审记录表(tb_risk_user_record)中。该表根据user_id进行了分表处理(如_00_05),以分散写入压力。
  5. 下游通知:决策完成后,Decision服务会将最终的人审结果(如manualTags)通过消息队列(MQ)广播出去。上游业务系统或其他相关方订阅相应的主题(如prod-drools-manual-result),即可获取审核结果并进行后续处理。
  6. 失败重试:为了保证流程的健壮性,系统还配置了RiskFlowTaskFailRetryHandler,用于处理执行失败的人审任务,进行自动重试。

业务模式背后的架构考量

系统之所以同时支持同步、异步和人机结合三种处理模式,是基于对不同业务场景下延迟、吞吐量和计算复杂度三者之间权衡的结果。

展期这类操作,业务逻辑相对简单,依赖的数据大部分已存在于系统内部,决策路径短。用户正在界面上等待操作结果,因此低延迟是首要目标。采用同步模型可以提供最直接、最快速的用户反馈。

相比之下,新用户授信是典型的重决策场景。它需要从外部拉取征信数据,处理用户设备信息(SDK数据),运行复杂的反欺诈和信用评分模型。整个过程可能耗时数秒甚至数分钟。如果采用同步模型,不仅会导致用户长时间等待,造成糟糕的体验,还会长时间占用API网关和前端服务的连接资源,极大地限制系统的并发处理能力和整体吞吐量。异步架构通过消息队列作为缓冲,将前端请求的接收与后端耗时的处理彻底分离。这种设计使得系统能够平稳地处理流量洪峰,并通过水平扩展消费者(phi-job)来提高整体处理能力,保证了系统的伸缩性和鲁棒性。

人工审核流程则体现了系统处理复杂、非确定性问题的能力。通过引入任务调度系统(xxlJob)和人工干预节点,风控决策不再是非黑即白的二元判断,而是形成了一个“自动化初筛 -> 机器决策 -> 人工复核”的完整闭环,在效率和准确性之间取得了最佳平衡。

这种多模架构的设计,体现了平台在满足多样化业务需求与保证系统高性能、高可用性之间的精妙平衡,是其能够支撑多国家、多业务线快速发展的关键架构决策之一。

第二章 海外风险平台的统一架构

尽管海外风险中台服务于菲律宾、巴基斯坦等多个国家,且经历了从Python到Go语言的技术栈演进,但其核心架构思想和功能模块划分具有高度的一致性。本章将通过对不同站点的架构图进行综合分析,提炼出一个统一的、具有代表性的平台架构蓝图,并明确各个核心服务模块的职责定位。

统一架构蓝图

通过综合分析菲律宾和巴基斯坦的风控系统架构图,可以描绘出一个通用的分层架构模型。该模型自上而下分为接入层、编排层、执行层和基础支撑层。

  • 接入层 (Entry Layer):作为风险系统的统一入口,负责接收和校验来自上游业务系统(如merchantRating服务)的各类风控请求。它将外部请求转化为内部标准化的风控任务,并根据请求类型(同步/异步)将其路由到相应的处理流程。
  • 编排与调度层 (Orchestration/Scheduling Layer):这是风险决策流程的核心控制器。它负责解析风控任务,并根据预设的业务流程(Pipeline)或工作流配置,有序地调度执行层中的各个原子能力(如变量计算、模型调用、规则执行)。该层确保了复杂决策逻辑能够被准确、高效地执行。
  • 执行层 (Execution Layer):由一系列功能高度内聚的专业化服务组成,提供风控决策所需的原子计算能力。主要包括:
    • 变量计算服务:负责根据原始数据计算生成衍生特征(即风险变量)。
    • 模型执行服务:负责调用和执行部署在模型平台上的各类机器学习或评分卡模型。
    • 规则引擎服务:负责执行预定义的业务规则集(如反欺诈规则、授信策略)。
  • 决策与持久化层 (Decision & Persistency Layer):该层负责汇总来自执行层的各种结果(变量值、模型分、规则命中情况),并做出最终的业务决策。同时,它还将整个决策过程的输入、中间结果和最终输出完整地记录下来,用于后续的审计、分析和模型迭代。
  • 基础支撑层 (Infrastructure Layer):为整个风险中台提供稳定运行所需的通用技术组件。这包括:
    • 数据库:采用关系型数据库(如MySQL, PolarDB)存储结构化业务数据,并使用NoSQL数据库(如MongoDB)存储三方数据、SDK埋点日志等半结构化或非结构化数据。
    • 消息中间件:使用RabbitMQ进行服务间的异步通信和任务解耦,同时引入Kafka用于大规模数据的实时流式处理。
    • 配置中心:利用Apollo实现所有微服务配置的集中化、动态化管理,提高运维效率和系统灵活性。
    • 数据服务:统一的数据中台(data-hub)提供对外的标准数据查询接口,屏蔽底层数据源的复杂性。

核心微服务及其功能职责

下表详细梳理了风险中台在技术栈演进过程中,核心功能模块与具体微服务之间的映射关系。它清晰地展示了从Python实现的旧版服务到Go语言重构的新版服务,其 underlying 的功能职责是如何传承和演进的。

表 2.1: 核心微服务与功能职责映射表

功能角色旧版服务 (Python)新版服务 (Go)核心职责
风险入口phi-quechaorisk-entry接收并验证来自上游系统的同步/异步风控请求,作为整个风控流程的起点,初始化风控任务。
流程调度phi-risk, phi-job(职责融入risk-decision)负责异步任务的调度与分发,编排和控制复杂风控流程的执行顺序。
变量计算irsrisk-var / 变量平台根据原始数据计算风控模型和规则所需的衍生特征变量。新架构下,此功能正逐步迁移至独立的“变量平台”。
模型编排与调度phi-modelschedualrisk-model-schedule管理和调度多个风控模型的执行顺序及依赖关系,与975模型平台等外部系统交互。
规则引擎(内嵌于流程中)drools (作为组件)执行预定义的业务规则集,如反欺诈、准入、额度、评级等策略。
决策与审计phi-riskdecision, risk-auditrisk-decision汇总各执行单元的结果,生成最终决策,并完整记录决策过程日志以供审计。
费率/展期等专项策略phi-feego, phi-loanextension(功能融入risk-decision)处理特定业务场景(如费率计算、展期审批)的专用风控策略流程。

这张表格不仅是一个服务清单,更揭示了架构演进的趋势。新一代的Go语言架构通过risk-decision整合了调度、决策和部分专项策略的功能,使得服务职责更加集中;同时,将变量计算这一高度动态且复杂的模块剥离出来,发展为独立的“变量平台”,体现了“平台化”和“中台化”的设计思想,旨在提升业务迭代的敏捷性和系统的可维护性。

案例研究:核心基础设施升级 — PolarDB迁移

随着业务量的飞速增长,底层数据库的性能和成本成为制约平台发展的关键因素。为此,团队规划并实施了从传统RDS MySQL到阿里云PolarDB的重大迁移。

  • 背景与挑战:原有的RDS实例面临性能瓶颈,且成本较高。迁移的核心挑战在于如何确保海量数据的平滑迁移与一致性。例如,listing_capital_php库的数据量高达7.2亿条,user_sign_on库也有2300万条数据。迁移过程中,如何处理在线的DDL操作、如何保证数据同步的效率和准确性,都是亟待解决的难题。
  • 迁移方案与实施:团队采用了阿里云的DTS(数据传输服务)进行数据同步。迁移过程经过周密计划,在凌晨业务低峰期进行,并安排了包括研发、DBA、业务测试在内的多方人员共同值班,确保问题能够被及时响应和处理。迁移涉及用户中台、资产中台、风控、支付中台等几乎所有核心业务系统。
  • 数据一致性保障:为了确保迁移后数据的准确无误,团队自研了数据一致性校验工具。该工具支持多种校验模式,包括对小表的全量全字段校验和对大表的随机比例校验。通过对同步工具的参数(如连接池、并发度、单次查询行数)进行反复调优,最终实现了每分钟校验超过560万条数据的性能,在效率和准确性之间找到了平衡。
  • 成果与影响:成功的数据库迁移,不仅提升了系统的读写性能和可扩展性,还通过PolarDB的存储计算分离架构和按量付费模式,有效优化了数据库的总体拥有成本。这是一次成功的基础设施现代化升级,为上层业务的持续高速发展奠定了坚实的基础。

第三章 核心微服务与技术实现深度解析

本章将深入到系统的技术实现层面,分别对旧版的Python架构和新一代的Go语言架构进行详细剖析。通过对关键代码逻辑、设计模式和技术选型的分析,揭示两个阶段架构设计的核心思想及其演进路径。

3.1 旧版Python架构:“RiskFlow”范式

旧版的风险系统主要采用Python构建,其设计核心是一种高度灵活、以数据科学家为中心的框架。该框架的核心是RiskFlow类,它通过动态管道(Pipeline)机制,实现了对复杂风控流程的灵活编排。

核心服务分析

  • phi-quechao: 异步请求的入口,负责接收请求并将其任务化,推入消息队列,是实现前端与后端处理解耦的关键。
  • phi-risk: 异步流程的调度中心,消费消息队列中的任务,并根据业务类型(FlowType)创建和驱动相应的RiskFlow实例。
  • irs: 字段变量中心,提供变量计算的核心能力。它接收计算请求,并根据变量之间的依赖关系,高效地执行计算图,是所有决策的数据基础。
  • phi-riskdecision: 决策服务,负责汇总计算结果并对外提供统一的数据查询API。
  • phi-modelschedual: 模型编排服务,专门处理多模型之间的调用顺序和依赖关系,确保复杂的模型组合能够正确执行。

RiskFlow类:状态化的流程编排器

RiskFlow是整个Python架构的灵魂。从其类图和代码片段可以看出,它并非一个无状态的服务,而是一个状态化的流程编排器对象。每个风控请求都会创建一个

RiskFlow实例,该实例包含了本次请求的所有上下文信息(如userId, listingId等),并负责管理从开始到结束的整个生命周期。

其设计采用了典型的组合与继承模式,通过混入(Mixin)多个功能类(如DataSourceSelector, ResultSender, ResultRecordSaver等)来赋予自身丰富的能力,包括数据源选择、结果发送、结果持久化等。这种设计使得RiskFlow成为了一个功能强大的“上帝对象”,控制着风控流程的每一个环节。

Pipeline机制:责任链模式的实现

RiskFlow的核心驱动力来自于其内部的Pipeline(管道)机制。如下面的代码所示,系统通过一个工厂函数make_flow,根据不同的业务类型(FlowType),创建出包含不同PipelineRiskFlow实例:

1
2
3
4
5
6
7
8
9
def make_flow(t: FlowType, b: BaseInfo) -> RiskFlow:
    #...
    if t == FlowType.NEW: # 新客授信流程
        return RiskFlow(
            p=Pipeline(),
            b=b,
            #...
        )
    #...

这里的Pipeline接收一个处理单元(Pipelineable)的列表,并按顺序依次执行。PhiNewVars()负责计算新客场景所需的所有变量,PhiNewModels()负责调用所有新客模型,而PhiNewDroolsFlow()则负责执行新客的规则集。

这种实现方式本质上是责任链模式(Chain of Responsibility)的一种体现。每个处理单元(Vars, Models, Drools)都是链上的一环,它们接收上一环的输出作为输入,完成自己的处理后,再将结果传递给下一环。这种设计极大地提高了流程的可扩展性,增加一个新的处理步骤,只需实现一个新的Pipelineable类并将其加入到列表中即可。

变量计算框架:基于依赖图的动态执行

irs服务的变量计算框架是另一个设计亮点。它通过BaseDataSource, DataSource, 和 VarLogic三个基类构建了一个基于依赖图的动态计算引擎。

  • BaseDataSource: 定义了数据源的抽象接口,核心方法是runner
  • DataSource: 继承自BaseDataSource,专门用于从外部(如数据库、API)获取原始数据
  • VarLogic: 也继承自BaseDataSource,专门用于执行计算逻辑,它将一个或多个DataSource或其他VarLogic的输出作为输入,生成新的衍生变量。

一个变量的计算逻辑通过在其VarLogic子类中定义dependons属性来声明其依赖项。例如,MobileWallaBlackListVarLogic依赖于MobileWallaBlacklist这个DataSource

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class MobileWallaBlacklist(PataGeneralDataSource): # DataSource
    #... 获取原始黑名单数据

class MobileWallaBlackListVarLogic(VarLogic):
    output_keys = ["mobilewalla_blacklist"]
    dependons = # 声明依赖

    async def runner(self, common_query_params, *args):
        #... 计算逻辑,args即为MobileWallaBlacklist的返回结果
        return {'mobilewalla_blacklist': result}

irs服务收到一批变量的计算请求时,它会解析所有相关VarLogicdependons属性,在内存中构建出一个有向无环图(DAG)。然后,它采用拓扑排序的方式执行这个图,确保在计算任何一个变量之前,其所有依赖的原始数据和前置变量都已经被计算出来。这种基于依赖图的自动编排和执行机制,极大地简化了复杂特征的开发和维护。

3.2 新一代Go架构:“Risk-Common”范式

随着业务规模的扩大和多国家部署需求的日益增长,Python架构在性能、资源消耗和维护性方面的短板逐渐显现。因此,团队启动了向Go语言的技术栈迁移,其核心思想是从灵活的框架转向标准化的平台。

迁移的驱动力

  • 性能与资源:Go语言作为一门编译型语言,其运行速度和并发性能远超Python。对于需要处理高并发请求的风险决策系统而言,Go能以更少的服务器资源提供更高的吞吐量和更低的延迟。例如,核心网关服务在Go架构下可以达到数万的QPM(每分钟请求数),同时保持毫秒级的平均响应时间。

    risk-var作为Python实现的变量计算服务,被认为是未来系统性能的主要瓶颈之一。

  • 系统简化与维护性:旧版Python架构服务众多,逻辑耦合较深,存在“历史包袱”。新架构的目标是简化系统复杂度,减少微服务的数量和依赖,从而降低维护成本,并极大减少在新国家部署时的工作量。

Risk-Common模块:标准化与复用的基石

新架构的核心是Risk-Common模块。这是一个共享的Go语言库(package),封装了所有风险服务都需要用到的通用能力,例如:

  • 数据库访问(database
  • 消息队列收发(queue
  • 模型调用逻辑
  • Drools规则引擎集成
  • 日志、监控等通用组件

通过将这些通用能力沉淀到Risk-Common中,各个国家或业务线的具体风控服务(service)得以大幅“减负”。它们不再需要重复实现底层逻辑,而是专注于业务本身,主要包含各自的业务配置、特殊的变量逻辑和规则集。这种设计理念将“代码复用”提升到了“能力复用”的层面,是实现多国家业务快速支持和技术统一的关键。

模块化的新服务体系

与旧版架构相比,新版Go服务的职责划分更加清晰,体现了更好的关注点分离(Separation of Concerns):

  • risk-entry: 职责单一的入口服务,只负责请求的接入和分发。
  • risk-decision: 承担了旧版phi-riskphi-riskdecision的职责,是流程编排和决策制定的核心。
  • risk-var: 专职的变量计算服务,是irs的直接替代者,未来将被更强大的“变量平台”所取代。
  • risk-model-schedule: 专职的模型调度服务,与phi-modelschedual功能对等。

架构演进的哲学转变

从Python的RiskFlow范式到Go的Risk-Common范式,不仅仅是一次语言的更换,更是一次架构哲学的深刻转变。

这一转变的背后,是业务发展阶段的变化。在业务探索初期,系统的首要目标是快速响应需求、支持策略的频繁实验和迭代。Python的动态性和灵活性,以及RiskFlow这种高度抽象的框架,非常适合这种“研发驱动”的模式,能够让数据科学家和策略分析师快速实现想法。

然而,当业务进入规模化扩张阶段,稳定性、性能、可维护性和部署效率成为了更重要的考量因素。旧框架的“灵活性”此时可能转化为“复杂性”和“不可预测性”,动态的依赖和隐式的流程使得系统难以调试和管理。新一代的Go架构,通过Risk-Common共享库和更明确的服务划分,推行的是一种“工程驱动”的模式。它强调标准化、显式依赖和性能优化,旨在构建一个稳定、高效、易于维护和快速复制的工业级平台。这是一种典型的从“作坊”到“工厂”的演进,是技术架构为适应商业战略而进行的必然升级。

第四章 关键接口调用链路与系统依赖关系

一个健壮的系统不仅取决于其内部设计,还取决于其与外部生态系统的交互方式。本章将全面梳理风险中台的上下游依赖关系,并通过对关键业务场景的调用链路进行详细拆解,清晰地展示数据在整个生态系统中的完整流转路径。

4.1 上游与下游系统映射

风险中台位于业务前台和底层数据/模型平台之间,扮演着承上启下的核心角色。

上游调用方

上游系统是风控流程的发起者,它们代表了各种业务场景的入口。

  • 业务网关 (Gateway):所有外部请求的统一入口,负责路由、认证和初步流量控制。
  • 商户/产品服务 (merchant, listing): 代表具体的业务线,如电商分期、现金贷产品,当用户进行申请、提现等操作时,会调用风险中台。
  • 评级/定价服务 (Rating): 在需要对用户或资产进行风险评级以决定费率时,会调用风险中台。
  • 内部业务流程服务 (loanextensión): 处理特定业务逻辑的服务,如展期服务,在其流程中需要调用风控进行决策。
  • 数据处理服务 (pata-risk, pull-data-notify): 部分数据驱动的流程,也可能作为上游触发特定的异步风控任务。

下游依赖方

下游系统为风险中台提供数据、模型、规则执行等核心能力,是风控决策得以完成的基础。

  • 数据服务:
    • 数据中台 (data-hub, risk-query): 提供标准化的内部数据查询服务。
    • 三方数据服务 (tripartite-data): 对接外部征信机构、数据提供商,获取关键的外部数据。
    • SDK数据后端 (sdk-backend): 收集和处理来自用户端App的设备信息、行为埋点等数据。
  • 模型平台 (975 model platform): 托管和提供机器学习模型的预测服务。风险中台通过phi-modelschedualrisk-model-schedule服务调用部署在该平台上的模型集群(975 model cluster)。
  • 规则引擎 (drools): 提供业务规则的执行环境。
  • 核心基础设施:
    • 数据库 (MySQL/PolarDB, MongoDB): 用于持久化业务数据、决策日志和各类原始数据。
    • 消息队列 (RabbitMQ, Kafka): 用于异步任务的解耦和实时数据流的处理。
    • 缓存 (Redis): 用于缓存热点数据,加速计算过程。
    • 配置中心 (Apollo): 集中管理所有服务的配置。
    • 任务调度器 (xxlJob): 用于执行后台的定时任务和失败重试任务,例如人工审核流程。

4.2 同步与异步流程调用流

以下将结合具体业务场景,以表格形式详细呈现API调用链路,揭示不同模式下的服务交互细节。

表 4.1: 关键业务场景的API调用链路

业务场景触发事件关键服务调用序列通信协议关键数据载荷示例
现有客户贷款展期用户在App上请求展期Client -> Gateway -> PhiLoanExtension -> Irs.calVars() -> Drools.execute() -> PhiLoanExtension -> ClientREST (同步){"userId": "...", "listingId": "...", "extensionDays": 15}
新TikTok渠道客户授信用户在TikTok场景下首次提交贷款申请Merchant -> Gateway -> risk-entry -> RabbitMQ(Topic: NewApplication)REST, MQ{"userId": "...", "channel": "tiktok", "deviceId": "...", "applicationData": {...}}
异步授信后台处理消息队列中有新的授信任务phi-job (Consumer) -> phi-risk -> Irs.calVars() -> phi-modelschedual.invoke() -> Drools.execute() -> phi-riskdecisionMQ, 内部RPC/REST{"userId": "...", "variables": {...}, "modelScores": {...}, "rulesHit": [...]}
授信决策结果通知phi-riskdecision完成决策phi-riskdecision -> RabbitMQ (Topic: DecisionResult) -> 下游系统 (如用户中心、消息中心)MQ{"userId": "...", "creditLimit": 5000, "rating": "A", "status": "APPROVED"}
转人工审核自动化决策引擎判定需人工介入risk-decision -> tb_risk_flow_task (DB) -> xxlJob -> Decision -> Capital Pata (人审系统) -> Decision -> RabbitMQ (Topic: ManualResult)DB, Job, RPC, MQ{"flowId": "...", "manualFlag": 1, "manualTags": ["kyc001"]}

调用链路分析

  • 同步流程 (“展期”): 这是一条清晰的线性调用链。请求从客户端发起,通过网关,逐层深入到后端服务,每一步都是同步阻塞的。IrsDrools的响应时间直接决定了整个流程的总耗时。这条链路的设计重点在于最小化每一步的延迟,以保证良好的用户体验。
  • 异步流程 (“授信”): 这条链路被消息队列(RabbitMQ)切分为两个阶段。
    1. 第一阶段(请求接收): 从Merchantrisk-entry再到消息队列,这是一个非常快速的、非阻塞的过程。risk-entry的职责是快速验证请求并将其可靠地投递到MQ,然后立即返回,释放前端资源。
    2. 第二阶段(后台处理): 由phi-job消费任务开始,这是一个完全独立于用户交互的后台工作流。phi-risk作为编排者,可能会并行或串行地调用Irsphi-modelschedualDrools等多个下游服务。这个阶段的设计重点在于处理的吞吐量和可靠性。即使某个下游服务暂时不可用,通过MQ的重试机制,任务最终也能够被处理。
  • 人机结合流程 (“人工审核”): 该流程的特点是引入了数据库作为任务队列和状态持久化的媒介,并由外部调度系统xxlJob驱动。这使得长时间、需要外部输入的任务(人工操作)得以实现。流程通过MQ将最终结果广播出去,完成了与自动化流程的解耦和衔接。

这种清晰的调用链路划分,使得系统在面对不同业务需求时能够采用最合适的交互模式。它不仅是技术选型的结果,更是对业务本质深刻理解后,在系统设计层面的体现。通过将复杂的、耗时的计算任务异步化,平台确保了面向用户的服务始终保持高响应性,同时保证了后台决策流程的深度和广度,实现了用户体验和风险控制的双赢。

第五章 “变量平台”:集中化的特征工程枢纽

随着业务的深化,风险策略对特征变量的依赖呈爆炸式增长,变量总数超过1000个。传统的在代码中硬编码变量逻辑的开发模式,逐渐暴露出诸多问题,成为制约策略迭代速度和系统稳定性的瓶颈。为了应对这一挑战,“变量平台”应运而生。它不仅仅是一个技术工具的升级,更是一次对特征工程生产关系的战略性重构。

业务驱动力与核心痛点

构建独立的变量平台,旨在解决以下四大核心痛点:

  1. 逻辑分散与重复:相同的变量逻辑可能因为不同的业务场景,被重复实现在不同的系统或代码模块中。这不仅造成了研发资源的浪费,也导致了逻辑不一致的风险,维护成本极高。
  2. 业务逻辑不透明:变量的具体计算逻辑深埋于代码中,对于风险策略师和业务分析师来说是一个“黑盒”。他们无法直观地查看、理解和验证变量逻辑,沟通成本高昂,且容易出现需求理解偏差。
  3. 版本管理缺失:变量逻辑的迭代历史只能通过查询Git提交记录来追溯,缺乏一个面向业务的、清晰的版本管理和变更历史查询途径。这对于模型治理、风险审计和问题排查都极为不利。
  4. 敏捷性不足:新增或修改一个变量,都需要走完整的软件开发生命周期(需求、开发、测试、发布),由工程师介入。这个过程通常以周为单位,严重拖慢了风险策略的迭代速度,无法适应瞬息万变的市场环境。

技术架构解析

变量平台采用经典的三层架构设计,实现了功能与角色的清晰分离。

  • Web端:提供给风险策略师、数据分析师和开发工程师使用的图形化界面。用户可以在Web端完成变量的定义、逻辑配置(支持SQL或Go)、版本管理、测试用例上传和查看计算结果等所有操作。
  • Backend (variables-platform-service): 后端服务层,是整个平台的大脑。它提供了一系列API,支撑Web端的所有功能,并为计算客户端(Client)提供服务。其核心职责包括变量元数据和逻辑的CRUD、版本控制、计算任务的编排与下发、以及测试任务的管理。
  • Client: 一个轻量级的Go语言计算引擎包,被嵌入到需要使用变量的业务系统(如risk-decision服务)中。Client在启动时会从Backend拉取所有已发布的变量及其计算逻辑,并在内存中构建计算图。当业务系统需要计算变量时,Client会根据请求,在本地高效地执行计算,无需每次都远程调用Backend。

基于DAG的计算引擎

变量平台的核心是其基于**有向无环图(DAG)**的计算引擎。

  1. 图的构建:平台中的每一个变量(或获取原始数据的节点)都被视为图中的一个节点。变量之间的依赖关系(如此前VarLogic中的dependons)则构成了图的边。当策略师在Web端配置变量时,平台后台会自动解析这些依赖关系,维护着一张全局的变量依赖图。
  2. 执行计划生成:当计算客户端(Client)收到计算请求时(例如,需要计算变量V_c,而V_c依赖V_aV_b),它会从内存中的全局DAG中,裁剪出与目标变量相关的一个子图。然后,通过拓扑排序算法,生成一个线性的执行计划(execution plan)
  3. 计算执行Calculator模块会严格按照执行计划的顺序,依次执行计算任务。这确保了在计算任何一个节点之前,它的所有前置依赖节点都已经被计算完成,从而保证了结果的正确性。

这种基于DAG的引擎,能够以极高的效率处理具有复杂依赖关系的成百上千个变量的计算任务。

关键机制与特性

  • 逻辑统一与多语言支持:平台支持使用SQL和Go两种语言来定义变量逻辑。这使得数据分析师可以用他们熟悉的SQL进行快速的数据ETL和特征提取,而工程师则可以用Go来实现更复杂的计算逻辑,实现了技术与业务的无缝协作。
  • 自动化测试与验证:平台内置了完善的测试框架。用户可以上传包含输入参数和预期输出的测试用例文件。Backend会启动一个测试任务,使用指定的变量版本运行这些用例,并将实际计算结果与预期值进行比对,生成详细的测试报告。这为变量逻辑的正确性提供了强有力的保障,使得上线更有信心。
  • 版本管理与灰度发布:平台对每一个变量的逻辑都进行严格的版本控制。任何修改都会生成一个新的版本,旧版本仍然保留,可以随时回滚。更重要的是,平台支持灰度发布,允许新版本的变量逻辑先在小部分流量上运行,与旧版本进行“双跑”(shadow mode)验证,待结果稳定后再全量切换。
  • 动态更新与热加载:为了避免每次变量逻辑更新都需重启线上服务,平台采用了一套基于Redis Pub/Sub的动态更新机制。当一个新版本的变量DAG在后台发布后,Backend会通过Redis的发布/订阅模式,向所有在线的Client实例推送一个更新通知。Client收到通知后,会异步地从Backend拉取最新的DAG,并在内存中“热替换”旧的计算图。整个过程对线上服务无感知,实现了变量逻辑的近实时部署。

战略意义与影响

变量平台的建立,其意义远超一个技术工具。它是一项战略性投资,从根本上改变了风险策略的生产方式。

它成功地将风险策略的迭代周期核心服务的部署周期进行了解耦。在此之前,策略的敏捷性受限于工程的发布排期。一个简单的变量修改,也需要工程师的介入和漫长的发布流程。变量平台将特征工程从一项纯粹的“开发任务”转变为一项可配置的、面向业务的“策略运营任务”。风险策略师可以直接在平台上定义、测试和发布新变量,无需编写工程代码或等待版本发布,从而将策略的迭代速度从“周”级别提升到“天”甚至“小时”级别。

这种敏捷性的提升,为业务带来了巨大的竞争优势。在快速变化的金融市场中,能够更快地发现风险、部署新策略,意味着更低的坏账率和更高的盈利能力。同时,平台提供的版本控制、自动化测试和血缘追溯能力,极大地增强了风险策略的治理水平和审计能力,这在日益强调合规的金融行业中至关重要。因此,变量平台是整个风险中台从一个“业务支撑系统”迈向“业务赋能平台”的关键一步。

第六章 战略规划与未来路线图

一个卓越的技术平台不仅要解决当下的问题,更要具备前瞻性的视野,为未来的业务发展和技术挑战做好布局。通过分析多个规划文档,可以清晰地看到海外风险中台未来发展的四大战略方向。这些举措共同指向一个目标:构建一个更智能、更敏捷、更透明、更可靠的次世代风险管理平台。

战略方向一:风险系统血缘 — 实现端到端的可追溯性

  • 当前挑战:在复杂的风控流程中,一个最终的决策结果(如信用额度credit_limit)是经过了海量数据输入、上百个变量计算、多个模型评分和一系列规则判断后才产生的。当出现数据偏差或需要解释某个决策的原因时,要从最终结果反向追溯到最初的源头数据(例如,某个第三方API返回的特定字段),过程极其困难和耗时,缺乏清晰的依赖关系展示。
  • 解决方案:构建一个“风险系统血缘”系统。该系统旨在自动解析和记录从原始数据表(tb_loan)、三方API(3rd_a),到中间变量(v_a, v_b),再到模型(m_a),最后到决策规则(drools_a)和最终输出(rating, credit_limit)的全链路依赖关系,形成一个完整的、可视化的数据血缘图谱。变量平台内置的DAG结构,为实现字段层面的血缘关系提供了天然的基础。
  • 战略价值:血缘系统是实现决策可解释性数据治理的基石。它能帮助团队快速定位数据质量问题,高效排查线上故障,并为满足监管机构对模型决策的解释要求提供强有力的技术支持。同时,通过分析血缘关系,可以清晰地识别出哪些上游字段已不再被任何下游流程使用,从而及时进行清理,释放宝贵的计算资源。

战略方向二:Drools管理系统 — 提升策略变更的安全与效率

  • 当前挑战:目前,Drools规则文件的更新和上线流程较为原始,依赖手动发布和版本切换,过程“生硬”。这其中蕴含着巨大风险:首先,缺乏系统的灰度和双跑机制,一个有逻辑问题的规则包一旦上线,可能瞬间对全量用户造成影响;其次,策略规则之间相互作用,数量庞大,手动构造测试用例难以覆盖所有场景,回归测试的工作量巨大且容易遗漏。

  • 现状:高度依赖人工的上线流程:当前的规则上线流程需要策略人员登录Drools的后台管理界面(Business Central),手动执行一系列操作:找到并下载最新的规则包(通常是.jar文件),在本地解压并修改Excel规则文件,再手动上传、验证语法、设置新版本号并构建。整个过程涉及多个手动步骤,容易因人为失误(如版本号错误、忘记合并其他人的修改)而导致生产问题。部署过程也分为使用Apollo配置中心和不使用两种,都需要人工在测试和生产环境分别操作container,流程复杂且风险高。

  • 解决方案:开发一个可视化的Drools管理系统。该系统将提供规则的版本管理、灰度发布、一键回滚等核心功能。更重要的是,它将集成一个批量测试框架,允许策略分析师在上线新规则前,使用海量的历史数据对新规则包进行回归测试,自动评估其对通过率、授信额度等核心业务指标的影响,确保变更的安全可控。

  • 战略价值:该系统旨在将规则管理的“高危手动操作”转变为“安全的自动化流程”。它极大地降低了策略上线的风险,并赋予业务团队更强的自主性和信心去进行频繁的策略优化,从而提升了整个风险体系的敏捷性安全性

战略方向三:流式计算 — 迈向实时特征与监控

  • 当前挑战:传统的风险特征计算模式多为批处理或在请求到来时实时计算(On-demand)。这种模式无法有效支持对时间高度敏感的特征,例如“用户在过去5分钟内的申请次数”或“该设备在过去1小时内关联的不同账户数”。此外,现有的监控体系多为事后统计,存在滞后性,难以在风险发生的第一时间发出预警。
  • 解决方案:引入以Flink等为代表的流式计算框架。通过消费来自数据库Binlog、业务日志、MQ等源头的实时数据流(通常汇集在Kafka中),在预定义的时间窗口内进行聚合、统计等计算,从而生成实时特征。这些实时特征可以被风控引擎直接用于决策。同时,流计算也为构建实时监控告警系统提供了强大的技术支撑,能够对关键指标(如特征值分布、模型分波动)进行实时监测,一旦发现异常立即告警。
  • 战略价值:流式计算的引入,将使风险中台的感知和反应能力从“分钟级”提升到“秒级甚至毫秒级”。这对于识别快速变化的欺诈模式、捕捉短期的信用风险信号至关重要,是平台实现实时风控能力的关键一步。

战略方向四:AI/LLM集成 — 赋能知识管理与逻辑探索

  • 当前挑战:随着系统复杂度的急剧增加(上千个变量、无数的规则和模型),相关的知识和逻辑细节分散在代码、文档和团队成员的大脑中。新员工的上手成本极高,而资深员工在排查一个陌生的历史逻辑时,也需要花费大量时间阅读代码,知识的传承和检索效率低下。

  • 解决方案:利用大型语言模型(LLM)和LangChain等框架,构建一个内部的“风控知识问答精灵”。通过将整个代码库、技术文档、需求文档等作为本地知识库对模型进行训练或提供上下文,创建一个智能问答系统。届时,开发和业务人员可以用自然语言提问,例如“计算tasdeeg类特征需要哪些上游数据源?”或“cashloan老客评级V3.0相比V2.5更新了哪些规则?”,系统便能快速、准确地给出答案。

  • 战略价值:LLM的集成旨在解决系统复杂性带来的认知过载问题。它将极大地降低信息获取成本,提升团队的工作效率和知识传承的有效性,是利用前沿AI技术提升研发效能的有益探索。

结论:迈向智能化、自动化的成熟平台

综合来看,这四大战略方向并非孤立的技术项目,它们共同勾勒出风险中台从一个高效的“决策自动化引擎”向一个成熟的“智能化风险治理平台”演进的清晰路径。血缘系统解决“可追溯性”,Drools管理系统解决“变更安全性”,流式计算解决“实时性”,而LLM集成则解决“知识可及性”。这些举措表明,团队的关注点正在从实现核心功能,转向解决更高阶的、围绕着平台全生命周期的管理、治理和效率问题。这一系列布局的成功实施,将构建起强大的技术壁垒,使公司能够在全球化竞争中,以更快、更准、更安全的方式管理风险,从而获得持续的竞争优势。