可靠性工程包含各种方法、实践和工具,用于确保系统在不同条件下保持运行、高性能和弹性。本页面记录了 DevOps 环境下的可靠性实践,重点关注混沌工程、测试策略和事件管理。
有关监控和指标收集的信息,请参阅 可观察性和监控。有关安全相关的可靠性问题,请参阅 安全实践。
来源:topics/chaos_engineering/README.md, images/sre_checklist.png
站点可靠性工程将软件工程原理应用于基础设施和运营问题。SRE 通过标准化实践和流程为可靠系统奠定基础。
| 原则 | 描述 | 实现 |
|---|---|---|
| 服务水平目标 (SLOs) | 系统可靠性目标 | 为可用性、延迟等设定可衡量目标 |
| 错误预算 | 可接受的不可靠程度 | 计算方式为 100% - SLO |
| 监控 | 实时系统可见性 | 实施指标、日志记录和警报系统 |
| 自动化 | 减少手动干预 | 创建自愈系统和自动化工具 |
| 减轻重复性劳动 | 消除重复性的运营任务 | 自动化经常性维护工作 |
| 无责事后复盘 | 关注改进,而非指责 | 标准化的事件回顾流程 |
| 容量规划 | 确保充足的资源 | 实施主动扩展策略 |
来源:images/sre_checklist.png
混沌工程涉及故意引入受控故障,以在生产环境导致中断之前识别弱点。
来源:topics/chaos_engineering/README.md
| 工具 | 目的 | 最佳用途 |
|---|---|---|
| AWS Fault Injection Simulator | 注入 AWS 资源故障 | AWS 环境 |
| Azure Chaos Studio | 注入 Azure 资源故障 | Azure 环境 |
| Chaos Monkey | 随机终止实例 | 云环境 |
| Litmus | Kubernetes 混沌实验 | Kubernetes 平台 |
| Chaos Mesh | 云原生混沌实验 | Kubernetes 平台 |
来源:topics/chaos_engineering/README.md, images/logos/chaos_engineering.png
全面的测试对于确保系统在各种条件下的可靠性至关重要。
| 测试类型 | 目的 | 实施工具 |
|---|---|---|
| 负载测试 | 在预期负载下验证行为 | JMeter, Gatling, k6 |
| 压力测试 | 识别瓶颈 | Locust, Apache Bench |
| 故障注入 | 测试故障处理 | 混沌工程工具 |
| 弹性测试 | 验证恢复能力 | 自定义脚本,混沌工具 |
| 灾难恢复 | 测试从灾难性故障中恢复 | 基础设施自动化工具 |
有效的监控和可观察性提供了系统行为的洞察,并有助于在问题影响用户之前识别潜在问题。
| 指标类别 | 关键指标 | 目的 |
|---|---|---|
| 可用性 | 正常运行时间百分比,错误率 | 衡量系统可访问性 |
| 性能 | 延迟,吞吐量,饱和度 | 衡量响应时间和容量 |
| 质量 | 错误率,客户体验 | 衡量用户影响 |
| 资源利用率 | CPU,内存,磁盘,网络 | 衡量资源消耗 |
即使有强大的可靠性实践,事件仍会发生。有效的事件管理对于最小化影响和防止再次发生至关重要。
| 严重性 | 描述 | 响应时间 | 示例 |
|---|---|---|---|
| SEV-1 | 严重,服务中断 | 即时 | 完全中断,数据丢失 |
| SEV-2 | 高,重大影响 | < 30 分钟 | 主要功能不可用 |
| SEV-3 | 中等,部分影响 | < 2 小时 | 性能下降 |
| SEV-4 | 低,影响最小 | 下一个工作日 | 外观问题,边缘情况 |
| 实践 | 描述 | 实现 |
|---|---|---|
| 纵深防御 | 多层保护 | 冗余,故障转移,速率限制 |
| 优雅降级 | 在故障期间保持核心功能 | 功能标志,断路器 |
| 冗余 | 关键组件的多个实例 | 负载均衡,复制服务 |
| 不可变基础设施 | 重建而非修复 | 基础设施即代码,容器 |
| 正确测试 | 全面的测试覆盖 | CI/CD 集成,自动化测试 |
| 自动化恢复 | 自愈系统 | 健康检查,自动扩展,自动重启 |
| 文档 | 文档齐全的系统和流程 | 运行手册,架构图 |
下表概述了可用于验证系统弹性的常见混沌实验
| 实验类型 | 描述 | 验证 |
|---|---|---|
| 服务终止 | 随机终止服务实例 | 系统继续运行 |
| 网络延迟 | 引入网络延迟 | 超时得到优雅处理 |
| 依赖项故障 | 模拟第三方服务中断 | 断路器激活 |
| 资源耗尽 | 消耗内存/CPU/磁盘 | 设置了正确的资源限制 |
| 区域故障 | 模拟云区域中断 | 跨区域故障转移工作正常 |
| 数据库故障 | 模拟数据库连接问题 | 应用程序得到优雅处理 |
来源:topics/chaos_engineering/README.md
下图展示了可靠性工程实施的成熟阶段
来源:images/sre_checklist.png
| 类别 | 工具 |
|---|---|
| 负载测试 | JMeter, Gatling, k6, Locust |
| 混沌工程 | Chaos Monkey, Gremlin, Chaos Mesh, Litmus |
| 监控 | Prometheus, Grafana, Datadog, New Relic |
| 日志记录 | ELK Stack, Loki, Fluentd |
| 追踪 | Jaeger, Zipkin, OpenTelemetry |
| 事件管理 | PagerDuty, OpsGenie, ServiceNow |
来源:topics/chaos_engineering/README.md
可靠性工程是现代 DevOps 实践的关键组成部分。通过实施站点可靠性工程原则、混沌工程实验、全面的测试策略、有效的监控和可观察性以及事件管理流程,组织可以构建和维护在不利条件下仍然具有弹性、高性能并提供出色用户体验的系统。