94 lines
3.2 KiB
Markdown
94 lines
3.2 KiB
Markdown
---
|
||
title: "Self-Healing System"
|
||
type: concept
|
||
tags: [DevOps, Reliability, Automation]
|
||
sources: [engineering-devops-automator]
|
||
last_updated: 2026-05-01
|
||
---
|
||
|
||
# Self-Healing System
|
||
|
||
## 定义
|
||
自愈系统是指能够自动检测故障、触发恢复机制,在无需人工干预的情况下恢复到正常运行状态的系统。核心目标是减少 MTTR(Mean Time To Recovery),提升系统可用性。
|
||
|
||
## 自愈机制层次
|
||
|
||
### 1. 基础设施层
|
||
- **自动扩缩容**:基于指标自动增加/减少实例
|
||
- **健康检查 + 自动替换**:检测到不健康实例后自动终止并启动新实例
|
||
- **多可用区部署**:单可用区故障不影响整体服务
|
||
|
||
### 2. 应用层
|
||
- **优雅降级**:部分功能不可用时,核心功能继续运行
|
||
- **熔断器(Circuit Breaker)**:防止故障级联传播
|
||
- **重试机制 + 指数退避**:临时故障自动恢复
|
||
|
||
### 3. 数据层
|
||
- **自动备份**:定期备份数据库
|
||
- **故障转移**:主库故障自动切换到备用库
|
||
- **数据一致性检查**:定期校验数据完整性
|
||
|
||
## 在 DevOps Automator 中的应用
|
||
DevOps Automator 的自愈设计:
|
||
```terraform
|
||
# AWS Auto Scaling Group 自愈配置
|
||
resource "aws_autoscaling_group" "app" {
|
||
health_check_type = "ELB" # ELB 健康检查
|
||
health_check_grace_period = 300 # 启动后 5 分钟内不进行健康检查
|
||
|
||
lifecycle {
|
||
create_before_destroy = true # 新实例就绪后再终止旧实例
|
||
}
|
||
}
|
||
|
||
# CloudWatch Alarm 自动恢复
|
||
resource "aws_cloudwatch_metric_alarm" "high_cpu" {
|
||
alarm_name = "app-high-cpu"
|
||
comparison_operator = "GreaterThanThreshold"
|
||
threshold = 80
|
||
alarm_actions = [aws_sns_topic.alerts.arn]
|
||
# 自动触发扩展或通知
|
||
}
|
||
```
|
||
|
||
## Kubernetes 自愈能力
|
||
- **ReplicaSet**:维持期望的 Pod 副本数,Pod 崩溃自动重启
|
||
- **Liveness Probe**:检测应用无响应后自动重启容器
|
||
- **Readiness Probe**:标记 Pod 为不可用,自动从 Service 中移除
|
||
- **Horizontal Pod Autoscaler**:基于 CPU/内存自动扩缩容
|
||
|
||
## 自愈 vs 人工干预
|
||
|
||
| 场景 | 自愈 | 人工干预 |
|
||
|------|------|----------|
|
||
| 实例崩溃 | ✅ 自动重启/替换 | - |
|
||
| 内存泄漏(渐进式) | ✅ 自动扩展缓解 | 人工分析根因 |
|
||
| 配置错误 | ❌ 需回滚配置 | ✅ 人工修复 |
|
||
| 外部依赖故障 | ⚠️ 降级/重试 | ✅ 人工处理 |
|
||
| 灾难性故障 | ⚠️ 部分可恢复 | ✅ 必需 |
|
||
|
||
## 相关概念
|
||
- [[Observability]]:自愈的前提是能够检测故障
|
||
- [[Zero-Downtime Deployment]]:自愈能力支撑零停机部署
|
||
- [[Kubernetes]]:K8s 提供丰富的自愈机制
|
||
|
||
## 最佳实践
|
||
1. **监控先行**:没有可观测性就没有自愈
|
||
2. **渐进式自愈**:从简单场景开始,逐步增加复杂度
|
||
3. **设置边界**:明确哪些情况必须人工介入
|
||
4. **记录和告警**:即使自愈成功,也要通知运维团队
|
||
5. **测试自愈机制**:定期演练故障场景
|
||
|
||
## 关键指标
|
||
- **MTTR**:平均恢复时间(越短越好)
|
||
- **自愈成功率**:自愈成功的故障数 / 总故障数
|
||
- **MTTA**:平均确认时间(检测到告警到开始处理)
|
||
|
||
## Aliases
|
||
- Self-Healing
|
||
- 自愈系统
|
||
- Automatic Recovery
|
||
- 自动恢复
|
||
- Fault Tolerance
|
||
- 容错
|