跳到主要内容

BioF3 API / Worker 分离(多计算节点)

目标

  • API 进程:HTTP、登录、权限、Copilot、任务入队(写 SQLite tasks 表)
  • Worker 进程:只认领 pending 任务、跑 Docker/R,可多实例、多机
  • 共享biof3.db(含 tasks 表)+ 同一 BIOF3_TEMP_DIR(NFS 或单机路径)

环境变量

变量说明默认
BIOF3_RUN_MODEapi | worker | allall
BIOF3_WORKER_ID认领任务时的 worker 标识主机名
BIOF3_DB_PATHSQLite 路径r-server/biof3.db
BIOF3_WORKER_POLL_MSworker 轮询间隔2000
R_MAX_CONCURRENT_TASKS每个 worker 同时跑几个 R 任务3

单机(与现在一致)

cd r-server
BIOF3_RUN_MODE=all node server.js
# 或 pm2 只起一个 biof3-r-server

分离部署(推荐生产演进)

Dell 计算节点 A

BIOF3_RUN_MODE=worker BIOF3_WORKER_ID=dell-a node worker.js
# pm2: biof3-worker-a

Dell 计算节点 B(第二台或同机第二个进程)

BIOF3_RUN_MODE=worker BIOF3_WORKER_ID=dell-b node worker.js

API(仍在 Dell 或迁到 ECS 小机)

BIOF3_RUN_MODE=api node server.js

注意api 模式不在本机 drainQueue;必须有至少一个 worker.js 在跑。

共享存储

  • BIOF3_DB_PATH 三台必须指向同一份 biof3.db(NFS 挂载或后续迁 PostgreSQL)。
  • BIOF3_TEMP_DIR / Docker 挂载路径 worker 必须能读写。

接口

  • POST /api/task — 入队(SQLite pending
  • GET /api/task/:id — 查状态(含 workerId
  • GET /api/queue/status — 队列统计 + runMode

认领语义

claimPendingTask(workerId) 在 SQLite 事务内:

  1. 本 worker 已 running 数 < R_MAX_CONCURRENT_TASKS
  2. 取最早一条 pending,改为 running 并写入 worker_id

多 worker 并发时依赖 WAL + 事务,避免双认领。

后续(未在本阶段实现)

  • PostgreSQL 替代 SQLite(多 API 节点必备)
  • Redis 队列(高吞吐)
  • API 与 worker 分属不同 VPC / 机器时的 NFS 与密钥管理
AI 陪学

让 AI 陪我学这一篇

AI 会读这篇文章后给你 3-5 步学习计划, 逐步陪你学完,最后出 1-3 道题验证你掌握得怎么样。 登录后 AI 才能记住你的进度。

静态文件

离线资料下载

手册 HTML / PDF 已在后台预生成,点击后直接下载网站静态资源。