关于 principle-make-operations-idempotent
这是一项用于设计可安全重试的状态变更操作的开发技能,适用于重复运行或进程崩溃后的恢复。它强调比较当前状态与目标,并检查操作能否收敛到相同结果。
主要功能
- 01设计可安全重试的操作
- 02协调当前状态与目标
- 03识别遗留的过期状态
- 04检查崩溃后的恢复行为
适用场景
- 01设计可重复执行的命令
- 02处理被中断的生命周期操作
- 03检查处理循环的重试安全性
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ericlitman/ open-pstack --skill principle-make-operations-idempotent安装后在 Claude Code 中输入/principle-make-operations-idempotent确认已加载。
详细介绍
让操作具备幂等性
设计操作时,应确保无论执行多少次,或上一次执行停在何处,最终都会收敛到正确状态。每个会修改状态的操作都应回答:“如果执行两次会怎样?如果上一次执行到一半时崩溃了会怎样?”
原因: 命令、生命周期操作和处理循环都运行在崩溃、重启和重试司空见惯的环境中。如果部分状态会影响下一次运行的结果,每次重启都会变成一次调试。
思路: 根据当前状态推导每一步,而不是根据上一次运行原本打算做什么。读取当前状态,将其与目标状态进行比较,只应用差异。以这种方式编写的步骤可以安全地重复执行,因为重复执行时已无事可做。
运行留下的任何内容,例如锁、临时文件、写了一半的记录或已认领的任务,都必须能被下一次运行识别为过期。判断过期时,应依据无论上一次运行停在何处都始终成立的证据,而不只是常见情况下的证据。如果标记无法由下一次运行判断,每次崩溃都会导致需要手动清理。例如,先写入临时路径,再将其重命名到目标位置;或者根据内容而非创建顺序比较产物。
测试:
- 如果连续执行两次,会怎样?
- 如果上一次运行在每个可能的时刻崩溃,会怎样?
- 重新执行能否收敛到相同的最终状态?
如果任何一个答案都“取决于留下了什么状态”,那么该操作就需要一个协调步骤。
评论
支持 Markdown