为自愈设置安全边界
已完成在明确权限、验证和停止条件下,自动执行已知恢复操作。区分运行时恢复与软件修改。
检验理解控制器已经重启任务处理进程两次。队列继续增长,数据库也无法访问。策略应该怎么处理?完成练习
你将学到什么
- 区分自愈与永久软件修复。
- 定义有边界的恢复策略和独立成功检查。
- 识别自动化何时必须停止并升级处理。
恢复已知状态
自愈会自动检测已定义故障,并尝试获授权的恢复操作。例如,重启故障进程或替换不健康实例。操作必须适合故障和服务的状态模型。
Kubernetes 可以替换失败的工作负载实例,并使实际状态符合声明状态。但这不能修正错误的应用逻辑,也不能解决所有存储故障。基础设施恢复与软件正确性需要不同检查。参见 Kubernetes 自愈。
先定义目标,再选择机制。恢复导出意味着符合条件的工作能够正确完成。容器正在运行,只是一个前提。
区分三类修改
| 修改类型 | 示例 | 所需决定 |
|---|---|---|
| 运行时恢复 | 替换一个失败的无状态任务处理进程 | 可由预先批准的恢复策略授权 |
| 软件修复 | 修复导致任务处理进程停止的内存泄漏 | 审查、测试、发布控制和生产验证 |
| 策略修改 | 提高允许的重启频率或扩大访问范围 | 策略负责人的明确批准 |
智能体可以在恢复后提出修复,但这个提议是新的软件变更,不能从恢复控制器继承无限权限。
检查失败时,控制器也不得修改自己的成功标准。否则,系统可能报告改善,却没有改善服务。
启用前写明恢复策略
以下策略是虚构的。数字用于说明设计选择,不是推荐默认值。
| 策略字段 | 虚构导出任务处理进程规则 |
|---|---|
| 触发条件 | 任务处理进程心跳缺失 90 秒,且存在排队工作 |
| 前提条件 | 另一个任务处理进程健康;依赖检查通过;不存在疑似入侵或完整性故障 |
| 允许操作 | 使用当前获批制品替换一个任务处理进程 |
| 状态保护 | 任务使用持久存储和经过验证的幂等键 |
| 限制 | 15 分钟内最多替换两次;任何时候最多同时替换一个 |
| 冷却期 | 替换后,须等待五分钟才能再次尝试 |
| 成功条件 | 合成测试任务正确完成,受影响队列开始缩短 |
| 停止并升级处理 | 任意前提不成立、达到上限,或无法验证成功 |
使用最小权限身份。记录策略版本、触发证据、操作、资源和结果。提供独立禁用控制器的方法。明确接收升级请求的人工负责人。
既测试成功恢复,也测试失败路径
重试可能重复副作用。任务处理进程可能保存文件后,在确认任务之前停止。允许再次执行前,验证幂等性。参见云原生故障示例。
重试也可能加重依赖过载。限制尝试次数,使用超时和适当退避。避免所有实例同步重试。AWS 解释了退避和抖动为何有助于减少这种放大效应。参见重试指南。
用三种情况测试虚构策略。单个任务处理进程停止时,应能恢复。数据库不可用时,应阻止重复替换。完整性故障尚不明确时,应停止自动化,并请求响应决定。
也检查遥测缺失。没有心跳,可能是任务处理进程故障,也可能是采集路径故障。控制器需要足以支持操作的证据,而不是对 AI 解释的信心。
衡量策略是否有帮助
记录已验证恢复、失败尝试、升级处理、重复工作,以及用户受影响的时长。在相似条件下,将它们与先前运维方式比较。
将底层缺陷保留为工程工作。反复重启内存泄漏进程,可以减少当前影响,但泄漏仍然存在。继续学习持续自我改进,将观察转化为持久修复。
完成练习
为本课虚构导出任务处理进程设计恢复策略。规定触发条件、排除项、允许操作、重试上限、冷却期、成功检查和升级处理负责人。测试它面对数据库不可用和原因未知的数据完整性故障时的行为。
下载工作表(Markdown)取消勾选将删除此浏览器保存的全部进度。
进度保存在此浏览器中。无需账户,不追踪使用情况。
来源与延伸阅读
- Kubernetes: Self-Healing ↗
- AWS Builders’ Library: Timeouts, retries, and backoff with jitter ↗
- Google SRE: Automation at Google ↗