Skip to main content

别让出图拖垮业务进程:worker 池、分批渲染与离线包

无头浏览器出图要拆出业务进程:编排、进程级池、分批落盘,以及气隙机可解压即跑的离线包。

「用无头浏览器出图」很常见。真正少见的是把交付契约写清楚:同架构离线包(目标机禁止再装依赖)+ 进程级 worker 池 + 分批落盘防 OOM。

能力拆分

能力要点
探活渲染忙时健康检查仍要能响应
批渲染入参为图表任务列表 → PNG 落指定路径
进程级池多路 HTTP 共用一池,避免过订阅;单任务超时防挂死占池
主路径前端只触发并轮询 → 后端异步收集 option + 分批渲染 → 临时目录 → 流式打 ZIP → 对象存储
离线与目标机同 OS/CPU 打包;解压即跑;禁止目标机再装包(原生画布 ABI)

为什么要拆进程

出图是 CPU 绑定,不宜与事务 API 抢同一进程。契约应是「批任务 + 落盘路径」,而不是一次 HTTP 返回全部图片内容。

离线环境里,「拷过去又被要求安装/下载」几乎总会发生——所以离线包约定不是锦上添花,而是交付底线。原生依赖 ABI 不对齐时,任何「到现场再 npm install」都会翻车。

可复用的落点

  1. 出图与业务 API 进程隔离。
  2. 契约是批任务 + 路径,不是巨型响应体。
  3. 离线难点在原生依赖 ABI,不在业务逻辑本身。