自动化与队列
自动化与队列
工作区由函数组成。宿主把每次调用准入一个 isolated-vm 上下文,并限制连续占用 CPU 的时段,而不是限制整个函数的墙钟时间。一个全新上下文只服务一次调用;容量槽位存续到调用结束,随后一切归零。基础设施队列是集成与通知定时任务的独立计时器——不是函数的运行方式。
任务队列
集成导入、拉取、通知、会话标题,以及超过内联时限的工具调用,都是持久化的 bolt_task 行,与触发它们的变更写在同一事务中。宿主绑定 tasks 端口并拥有计时、认领与重试循环——租约过期后,已死宿主的工作会被重新认领。编写者不会选择该队列。自动化、Agent、页面与集合操作都是被准入的函数。契约见 设施 。
分派
HTTP、webhook、cron 或 resume 都进入同一条准入路径。槽位空闲时挂载已就绪的上下文并立即运行,否则请求等待后运行。租户代码等待模型、数据库或其它设施 I/O 时,guest 线程被搁置、实际 CPU 计量暂停——槽位与上下文仍被保留;设施回复后,同一次调用继续执行。显式游标续作才是后续的一次新调用。
HTTP / webhook / cron / resume
│
▼
HOST ADMIT
capacity slot held for the whole invocation
free slot? run now : queue, then run
│
▼
ISOLATED-VM CONTEXT (the guest)
one fresh context per invocation;
page · find · create · one chunk · one step
│
┌──────┼──────────────────┐
▼ ▼ ▼
return await facility not done
or model I/O (more rows)
│ │ │
▼ ▼ ▼
reply cpuTime pauses; save cursor
slot + context later invocation
retained until
settle 宿主 CPU 时段
Colony 最多允许租户代码连续占用 guest 线程时间 2,000 毫秒(COLONY_EXECUTION_COMPUTE_MS),随后必须让出。每次设施回复都会开始一个新的 CPU 时段。这不是墙钟超时:冷启动、排队以及等待模型或数据库设施都不消耗该 CPU 时段;这些等待仍会保留本次调用的上下文与容量槽位,直至调用结束。
保证
- 宿主在进程计算预算内并发准入调用。槽位占满时,下一次准入等待后运行;有界队列也满时返回可重试的容量失败。
- 无效的 cron 在启动时失败,绝不在运行时悄悄失败。
- 超过连续 CPU 时段只会中断那一次调用;其 isolate 保持可用,未提交事务会回滚。完成、失败或取消都会释放上下文,并在其后预备下一个全新上下文——调用之间没有任何租户堆常驻。
开发与生产
在所有环境中队列都是持久行:被认领的工作带五分钟租约并在运行期间续期,重试按退避进行,已死宿主的认领在租约到期后被重新认领。Colony 用一次性工作线程做产物检查,用全新的 isolated-vm 上下文运行每一次租户调用——不存在进程内运行租户代码的模式。