菜单

可靠性工程

相关源文件

可靠性工程包含各种方法、实践和工具,用于确保系统在不同条件下保持运行、高性能和弹性。本页面记录了 DevOps 环境下的可靠性实践,重点关注混沌工程、测试策略和事件管理。

有关监控和指标收集的信息,请参阅 可观察性和监控。有关安全相关的可靠性问题,请参阅 安全实践

可靠性工程的核心组成部分

来源:topics/chaos_engineering/README.md, images/sre_checklist.png

站点可靠性工程 (SRE)

站点可靠性工程将软件工程原理应用于基础设施和运营问题。SRE 通过标准化实践和流程为可靠系统奠定基础。

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随机终止实例云环境
LitmusKubernetes 混沌实验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 实践的关键组成部分。通过实施站点可靠性工程原则、混沌工程实验、全面的测试策略、有效的监控和可观察性以及事件管理流程,组织可以构建和维护在不利条件下仍然具有弹性、高性能并提供出色用户体验的系统。