自动化与队列
自动化与队列
每一次运行——无论是定时、触发、手动发起还是重试——都是运行台账 sys_run 中的一行。排队的运行带有到期时间,在声明的时间点之间没有任何东西检查条件。
排队的运行
事件触发器在触发它的写入所用的同一条语句中写入排队的运行,ctx.schedule 与 bolt.start 也会写入一行。没有延迟的运行在提交后立即到期。五分钟或更远之后的到期时间,以及周期为五分钟或更长的 cron 时间槽,会向上取整到五分钟的时间桶,因此相近的运行共享一次唤醒。
deadlines 端口
宿主在内存中为每个工作区保存一个下一次到期时刻,并设置一个定时器。排入运行的写入会顺带通告其到期时间;到期时,一次调度会运行该工作区所有到期的运行,并用同一次读取得到的下一个到期时间完成结算。空闲的工作区不会产生任何查询,重启后只需一次读取即可恢复。
一次调用
每一次租户调用——transform、查询或操作、自动化运行、集成代码体(数据源的 read 或 map、出站规则的 build 或 run)、自定义字段校验、Agent 工具调用——都在一个全新的隔离环境中运行,总访客 CPU 时间最多 2 秒(I/O 等待不计入),内存 256 MiB。每次 I/O 响应的空闲期限为 20 秒,流式进度会刷新期限。具体操作可以有更短的限制;整个租户调用没有总的挂钟时间限制。
副作用与重试
运行的每个外部副作用都按其内容或显式的 once 键记入日志,因此重试的运行不会重复发送,也不会为模型调用付两次费用。运行只重试暂时性失败,且次数不超过其 retry 的声明;默认只尝试一次。
并发
在同一时刻到期的事件运行会合并它们的 ids。concurrency: { max } 限制同一自动化的并行运行数,租户调用按先进先出的顺序准入。