Roog's BLOG & TOOLS

[系统已在线] :: 2026-01-30 16:10:21 :: 终端 v1.0

算法工程化算力方案设计

我们的根本需求其实有两点:

  • 解决不确定的算力需求
  • 解决算法同学工程化能力不足
  • 解决后端同学集成难读过高

硬需求:

  • 入口与流量
    • 流量可视化
  • 进程/部署
    • 自动化算力动态扩缩
    • 自动化部署
  • 健康观测
    • 指标收集与可视化
    • 服务健康查询
  • 韧性

值得一提的是,任何一个硬需求部分都不是一蹴而就的,也许我们需要按照优先级先实现其中一部分,或者实现其中大部分的一个起点

方案A 内部常驻进程算力 + 队列调度

  • 算法部分仅完成function 级别交付
  • 队列调度部分仅完成task 级别交付
    • 上报观测指标
    • 日志记录
    • 幂等/重试/死信/回压
  • 外部调用API
    • 提供RESTful API接口 (必备)
    • 提供统一认证机制 (可选: JWT/OAuth2)
    • 提供流量监控与调度 (接入到可视化的云负载均衡中) (必备)
    • 提供指标观测接口 /metrics ( prometheus) (可选)
    • 提供健康观测接口 /healthz /readyz (可选)

img.png

优点 :

  • 解决方案可以通用化,可以封装成有价值的框架,方便后续其他接入
  • 实现可拆解,按需引入 健康检测/日志收集/指标收集/可视化观测
  • 难读适中
  • 外部运维需求容易拓展
  • 接入云厂商的动态负载较为容易
  • 不依赖云厂商生态

缺点

  • 周期较长
  • 如果有多套服务需要治理,那么框架本身需要维护成本

方案B docker 封装的 serverless api 服务

  • 将环境与代码共同打包至docker image中
  • 使用serverless框架自动部署docker image至云服务

img_1.png

优点

  • 云原生的动态算力扩缩
  • 并发能力近乎无限
  • 无需人工调整算力扩容参数

缺点

  • 及其依赖云厂商能力 (包括日志/监控等)
  • 要求封装较为严格,必须是

无论怎么选,我们一定要交付的三件事

1. 接入规范

  • API规范: /invoke(同步)+ /jobs(异步)+ /healthz /readyz /metrics
  • 交付规范: 必备的Schema:请求/响应/错误/metadata/version
  • SLO规范:服务登记目标的规范 可用性,延时,吞度等目标的具体参数

2. 运行时

  • Python SDK:完成参数校验、错误包装、埋点(耗时/失败率/队列延迟)、日志关联 ID
  • Worker Runtime:统一处理重试、超时、取消、DLQ、回压

3. 手脚架

  • 手脚架生成模板脚本 :一键生成模板仓库:示例函数、Dockerfile、CI、部署 YAML、Grafana dashboard、告警规则
  • 算法同学集成时紧要修改核心函数即可
Tags: