3. 模型服务架构设计:整体架构、请求流程、组件职责

在授信场景中,模型服务架构需要同时满足高并发、低延迟、可解释性和灰度发布等核心要求。本节从整体架构、请求流程和组件职责三个维度展开,帮助理解生产级模型服务的运行机制。

3.1 整体架构分层

授信模型服务通常采用四层架构:接入层、路由层、计算层、存储层。各层职责清晰,通过异步消息与同步RPC混合通信,兼顾实时性与吞吐量。

架构设计原则: 接入层无状态可水平扩展;路由层按模型版本与流量权重分发;计算层隔离不同模型实例;存储层统一管理特征与结果。
授信模型服务四层架构 授信模型服务四层架构 接入层(API Gateway) 统一入口 · 鉴权 · 限流 · 协议转换 · 请求校验 路由层(Model Router) 版本路由 · 灰度分流 · 流量复制 · 超时熔断 计算层(Model Worker) 模型加载 · 特征工程 · 推理计算 · 结果后处理 支持 TensorFlow / PyTorch / ONNX / PMML 多引擎 存储层(Storage) 特征存储(Redis/Feature Store) · 结果存储(MySQL/ES) · 模型文件(S3/HDFS)

3.2 请求流程详解

一次完整的授信模型调用请求,从客户端发起至结果返回,经历6个关键阶段。每个阶段都有明确的超时控制和异常处理策略。

阶段 组件 核心动作 耗时参考
1. 请求接入 API Gateway 鉴权、参数校验、限流判断 < 5ms
2. 路由分发 Model Router 根据模型版本号/流量标签选择目标Worker < 2ms
3. 特征准备 Model Worker 从特征存储拉取实时特征,执行特征工程 10~50ms
4. 模型推理 Model Worker 加载模型图,执行前向计算 20~200ms
5. 结果后处理 Model Worker 分数映射、拒绝原因编码、可解释性输出 < 5ms
6. 结果回写 Storage 异步写入结果表,更新缓存 < 10ms(异步)
性能目标: 授信场景通常要求 P99 延迟 < 500ms,吞吐量 > 1000 QPS/节点。特征准备和模型推理是主要耗时瓶颈,需重点优化。

3.3 组件职责与交互

各组件在架构中承担独立职责,并通过同步RPC(gRPC/Thrift)和异步消息(Kafka/RabbitMQ)两种方式协作。下面列出核心组件的职责边界。

  • API Gateway: 统一入口,负责协议转换(HTTP/gRPC)、请求鉴权、限流降级、请求日志。无状态,支持弹性伸缩。
  • Model Router: 维护模型版本注册表,根据路由策略(权重、灰度标签、AB Test)将请求分发到对应Worker。支持流量镜像用于线上验证。
  • Model Worker: 模型推理的执行单元。每个Worker进程加载一个模型实例,支持热加载与优雅退出。内部包含特征工程模块、推理引擎、后处理模块。
  • Feature Store: 实时特征存储,通常基于Redis或内存网格,提供毫秒级特征查询。支持特征版本管理与回滚。
  • Result Store: 结果持久化存储,用于事后分析、报表、模型监控。通常使用Elasticsearch或ClickHouse。
  • Monitor & Alert: 横切组件,采集各层指标(延迟、QPS、错误率、模型分数分布),触发告警规则。
组件交互时序图 组件交互时序图(简化) Client Gateway Router Worker FeatureStore 请求 路由查询 分发 拉取特征 特征数据 推理计算 返回结果 响应

3.4 关键设计要点

避坑提醒: 授信场景中,模型版本管理不当会导致线上线下分数不一致。务必在路由层实现版本一致性校验,确保请求特征与模型训练时的特征版本对齐。
  1. 灰度发布: 新模型版本先切 1% 流量,观察分数分布、拒绝率、逾期率等业务指标,确认无异常后再逐步放量。
  2. 超时控制: 每个阶段设置独立超时(如特征查询 50ms、推理 200ms),避免单点故障拖垮整个链路。
  3. 可解释性输出: 模型服务需同时返回分数和拒绝原因码(如 SHAP 值、特征贡献度),满足监管合规要求。
  4. 降级策略: 当特征存储不可用时,使用离线预计算特征兜底;当模型 Worker 全部异常时,返回规则引擎评分作为降级方案。

3.5 架构对比:单体 vs 微服务

维度 单体架构 微服务架构(推荐)
部署粒度 所有模型打包为一个服务 每个模型独立部署,支持多版本共存
扩展性 整体扩缩容,资源浪费 按模型流量独立扩缩容,资源利用率高
灰度能力 需整体发布,风险高 支持按版本、按标签精细灰度
故障隔离 一个模型异常可能拖垮全部 故障隔离在单个Worker内,不影响其他模型
运维复杂度 低,适合小团队 较高,需服务发现、配置中心、链路追踪
推荐实践: 在授信场景中,建议采用微服务架构,但初期可先以“单体+多Worker进程”过渡,待模型数量超过 5 个后再拆分独立服务。