4、在线推理架构设计:请求入口、特征服务、模型引擎、结果返回、高可用与容错设计
信用评分 PD 模型的在线推理架构需要支撑高并发、低延迟、高可用的实时评分请求。本章将详细拆解从请求进入系统到最终返回评分结果的完整链路,并重点阐述高可用与容错设计的关键策略。
核心目标: 在毫秒级时间内,稳定、准确地完成一次信用评分推理,并保证系统在部分组件故障时仍能持续服务。
4.1 整体架构总览
一个典型的在线推理架构采用分层解耦设计,主要包含以下四个核心模块:请求入口、特征服务、模型引擎、结果返回。各模块通过异步消息或轻量级 RPC 进行通信,实现高内聚低耦合。
4.2 请求入口层
请求入口是系统的门面,负责接收外部客户端的评分请求。它通常由 API Gateway 和 负载均衡器 组成。
| 组件 | 职责 | 关键技术 |
|---|---|---|
| 负载均衡器 | 将请求分发到多个 API Gateway 实例,避免单点过载。 | Nginx, HAProxy, AWS ALB |
| API Gateway | 统一入口,负责鉴权、限流、协议转换、请求校验。 | Kong, Zuul, Spring Cloud Gateway |
设计建议: 在 API Gateway 层实现 令牌桶 或 漏桶 限流算法,防止突发流量冲垮下游服务。同时,对请求参数进行白名单校验,拦截恶意注入。
4.3 特征服务层
特征服务是推理链路中最复杂、最易出错的环节。它需要从多个异构数据源(如 HBase、Redis、Kafka)中获取原始数据,并实时计算成模型可用的特征向量。
4.3.1 特征服务核心流程
- 特征路由: 根据请求中的用户 ID 或设备 ID,确定需要拉取哪些特征组。
- 数据获取: 并行调用多个数据源(如用户基础信息、近 30 天交易统计、外部征信数据)。
- 特征计算: 执行特征工程逻辑,如 WOE 编码、分箱映射、缺失值填充、归一化。
- 特征组装: 将计算好的特征按照模型输入顺序组装成特征向量(如 JSON 或 Protobuf 格式)。
常见陷阱: 特征穿越(Feature Leakage)——在在线推理时使用了未来数据。例如,计算“近 30 天逾期次数”时,错误地包含了当天的数据。必须在特征服务中严格对齐时间窗口。
4.3.2 特征缓存策略
为降低延迟,对高频访问且变化不频繁的特征(如用户性别、年龄区间)进行本地缓存或分布式缓存(如 Redis)。
| 缓存层级 | 存储介质 | 适用特征 | TTL 策略 |
|---|---|---|---|
| L1 本地缓存 | Caffeine / Guava Cache | 静态特征(性别、注册渠道) | 5-10 分钟 |
| L2 分布式缓存 | Redis Cluster | 半静态特征(近 7 日行为统计) | 30-60 分钟 |
| L3 数据库 | HBase / MySQL | 动态特征(实时交易流水) | 不缓存,实时查询 |
4.4 模型引擎层
模型引擎是推理的核心,负责加载 PD 模型并执行前向计算。它需要支持热加载、多模型版本管理,并保证计算的高效性。
4.4.1 模型引擎架构
模型引擎通常采用 微服务 + 模型容器 的部署模式。每个模型实例是一个无状态的服务,通过 gRPC 或 RESTful API 对外提供推理接口。
4.4.2 模型推理性能优化
- 模型量化: 将模型权重从 FP32 转换为 INT8,推理速度提升 2-4 倍,精度损失可控。
- 批处理: 将多个请求的特征向量合并为一个批次(Batch),利用 GPU 或 SIMD 指令并行计算。
- 模型剪枝: 移除对最终预测贡献较小的树节点或神经元,减小模型体积。
4.5 结果返回层
模型引擎输出的原始违约概率(PD 值)需要经过后处理,才能返回给业务方。结果返回层负责封装、策略映射和日志记录。
4.5.1 结果处理流程
- 评分映射: 将 PD 值通过预设的映射函数转换为标准信用评分(如 300-850 分)。
- 策略决策: 根据评分和业务规则(如黑名单、多头借贷阈值)生成决策建议(通过/拒绝/人工审核)。
- 拒绝原因码: 如果拒绝,返回具体的拒绝原因码(如“R01:收入不满足最低要求”),便于后续优化。
- 异步日志: 将完整的请求-响应链路日志写入 Kafka 或 Elasticsearch,用于离线分析和模型监控。
响应格式示例:
{
"code": 0,
"message": "success",
"data": {
"score": 680,
"pd": 0.023,
"decision": "approve",
"reason_codes": [],
"request_id": "req_20231027_001"
}
}
4.6 高可用与容错设计
在线推理系统必须保证 99.9% 以上的可用性。高可用设计贯穿整个架构,从基础设施到应用层都需要考虑容错。
4.6.1 高可用策略矩阵
| 层级 | 策略 | 实现方式 |
|---|---|---|
| 基础设施 | 多可用区部署 | Kubernetes 跨 AZ 部署 Pod,避免单机房故障 |
| 服务层 | 无状态 + 水平扩展 | 所有服务实例无状态,通过 HPA 自动扩缩容 |
| 数据层 | 主从复制 + 读写分离 | Redis Sentinel / Cluster,MySQL 主从切换 |
| 调用链路 | 熔断 & 降级 | Sentinel / Hystrix,当特征服务超时时返回默认特征 |
| 模型引擎 | 多副本 + 健康检查 | K8s Liveness/Readiness Probe,自动重启异常实例 |
4.6.2 容错设计细节
- 超时控制: 每个下游调用设置严格的超时时间(如特征服务 50ms,模型推理 100ms),避免线程阻塞。
- 重试机制: 对幂等操作(如特征查询)设置最多 2 次重试,重试间隔递增(退避策略)。
- 降级方案: 当特征服务完全不可用时,使用用户最近一次缓存的评分结果,或返回一个保守的默认评分。
- 优雅关闭: 服务停止时,先停止接收新请求,等待正在处理的请求完成(Graceful Shutdown),再销毁资源。
关键指标: 必须监控 P99 延迟 和 错误率。当 P99 延迟超过 500ms 或错误率超过 1% 时,触发告警并自动执行降级策略。
4.7 架构设计总结
一个健壮的在线推理架构,需要在 性能、可用性 和 可维护性 之间取得平衡。通过清晰的模块划分、合理的缓存策略、完善的容错机制,可以构建一个能够应对生产环境复杂挑战的信用评分系统。
最佳实践: 在项目初期就引入 混沌工程 实验,定期模拟特征服务宕机、网络延迟、模型加载失败等故障,验证系统的容错能力是否达到预期。