E6 · 出版卷 28

作业、工作流与可复现性

参数、依赖、状态、重试与输出

*参数、依赖、状态、重试与输出*

包含作业状态、重试、检查点与不可变输出的工作流依赖图
包含作业状态、重试、检查点与不可变输出的工作流依赖图

学习目标

本课是通用、机构中立内容,不使用任何真实公司、个人、矿权、项目或可识别地点。通用角色只描述职责,SYN-ARCH 标识符明确表示合成教学证据。

  • 界定由“参数、依赖、状态、重试与输出”治理的决定。
  • 在选择实现前建立相关边界、状态与合同模型。
  • 定义可测不变量、故障证据与安全发布后果。
  • 基于合成证据产出一份可回放工作流清单与作业状态合同并为其权衡辩护。

决策边界

把作业建模为有边界的变换,声明输入、参数、环境、代码身份、政策与预期输出。把工作流建模为依赖图,边上传递制品与完成条件。提交、调度、执行、批准与发布是不同职责。只有重复执行不会静默复制副作用或替换已验证输出时,重试才安全。长计算需要检查点,其有效性绑定相同输入与执行合同。系统应明确报告不确定和部分结果,不能把流程完成自动转换为科学接受。

核心概念

使用有限状态模型,例如已接受、排队、运行、待审、成功、失败、取消与已取代,并定义允许转换及终态含义。执行成功、输出验证与发布应分开。幂等表示同一逻辑请求产生一个声明效果,不等于不会重复消耗资源。重试要区分瞬时、永久、政策与数据错误。一次运行内的工作流图应无环,即使外部计划会重复触发。动态扇出记录发现的任务、排序规则与依赖证据,使回放不依赖不可见队列状态。

系统模型与合同

工作流清单记录工作流身份与版本、运行身份、请求角色、提交时间、输入制品身份与摘要、规范化参数、任务图、执行环境身份、资源类别、重试政策、检查点、预期输出合同、验证关口与保留政策。每个事件追加状态、时间、行动或执行角色身份、尝试次数、关联身份与原因。输出先进入候选区,获得摘要与验证结果,再通过原子清单更新成为不可变发布制品。清单可导出完成回放所需的全部非秘密信息。

不变量与验收标准

| 不变量 | 测试证据 | 发布后果 | |---|---|---| | 每次运行都声明不可变输入、规范化参数与工作流修订。 | 合同测试与反例记录 | 阻止发布 | | 状态转换遵循声明的作业状态合同。 | 回放比较与摘要检查 | 隔离制品 | | 重试不能创建重复发布副作用。 | 基于角色的验收追踪 | 把决定返回为未解决 | | 执行成功始终与验证和批准分离。 | 故障注入与恢复记录 | 保留上一已验证版本 | | 发布输出通过一份完整不可变清单连接。 | 依据声明证据的领域审查 | 记录明确评审发现 |

量化工程

对工作流图,关键路径时长是依赖加权最长路径,而不是全部任务时长之和。排队、执行、验证与发布延迟应分别报告。重试放大为 R_t=n_{attempts}/n_{jobs},同时报告错误类别与最终结果。按输入和版本分组测量任务成功率、检查点恢复距离、重复副作用数、孤儿输出数与来源完整度。若承诺完全确定性,则按输出摘要比较可复现性;若并行或数值执行允许有界变化,则比较声明的科学容差与结构不变量。

数据质量、证据与不确定性

复现证据包含不可变输入、规范化参数、任务图、变换身份、环境声明、随机种子或随机政策、日志、验证发现与输出清单。把外部参考数据捕获为版本化输入,不能假设其永远可用或不变。故障注入覆盖执行节点丢失、超时、重复投递、迟到事件、部分输出、依赖不可用与检查点损坏。回放报告区分完全一致、容差等价、结构等价与不可复现结果,并解释哪种变化来源属于预期。

互操作性与版本

作业合同定义提交模式、规范参数表示、输入版本规则、接受状态、进度语义、取消行为、重试类别、结果链接与问题响应。客户端使用稳定运行身份轮询或订阅,而不是从文件名猜测状态。完成响应链接到不可变输出清单与验证状态。工作流修订获得新身份或声明版本;历史运行始终指向其确切修订。检查点属于私有实现制品,除非明确约定其可移植性、模式与有效性。

安全与专业责任

分别授权提交、观察、取消、批准与输出获取。执行身份只获得任务所需输入与目标,且不能批准自身结果。参数验证防止路径、命令、表达式与资源注入。秘密通过受控运行机制引用,绝不嵌入清单、日志或检查点。按工作负载类别限制处理器、内存、存储、图规模与执行时长。审计记录区分请求角色、批准角色与执行身份,同时尽量减少个人数据。

运行流程与可观测性

监测状态转换年龄、按资源类别划分的队列深度、活动尝试、重试原因、检查点健康、依赖等待、输出验证与孤儿候选制品。协调过程比较清单、执行状态与存储状态,避免事件丢失使运行永久含糊。取消尽可能协作完成,并记录是否仍有副作用。恢复从保留事件回放幂等转换。工作流代码、基础环境、依赖或政策变化时,在接受新运行前回放受控语料;旧执行器退役后,历史运行仍须可解释。

集成检查点

把“作业、工作流与可复现性”制品连接到本卷前面的架构。追踪一个合成对象从来源身份穿过新边界到达已审查输出,再把一个拒绝或故障追溯到最早被违反的不变量。更新架构决定记录,写明所选方案、备选方案、假设、证据、后果、责任角色、评审状态与重新考虑触发条件。只有另一位审查者无需口头说明即可重建成功路径与阻断路径,检查点才通过。

合成案例

SYN-ARCH-07 并行生成曲面瓦片。一个执行节点写出结果后、报告成功前超时,自动重试又写出第二个对象,工作流随后发布两者。修订设计分配一个逻辑任务身份,把每次尝试输出写入候选位置,只提升清单引用且验证通过的摘要。被终止节点从兼容检查点恢复。相同输入与参数回放后,几何在声明容差内等价,每个任务只有一个发布成员,并保留完整状态事件历史。

练习与考核

  1. 哪些身份与制品足以回放该运行?
  2. 哪些故障类别可安全重试,为什么?
  3. 执行、验证、批准与发布如何分离?
  4. 当精确摘要可能不同时,哪些证据定义等价输出?

考核制品:一份可回放工作流清单与作业状态合同。提交时附来源清单、验收证据、未解决风险,并简要说明为何没有选择一个合理备选方案。

常见失败模式

  • 未保留输入与环境身份却把脚本称为可复现。
  • 不区分永久性或副作用就重试所有失败。
  • 把进程退出当成科学输出接受。
  • 在完整清单与验证原子就绪前发布文件。
  • 从存储路径或日志文本推断作业状态。

来源与延伸阅读