电子书 编程

站点可靠性工程手册(英文版电子书)

¥1.00 已售 0
✓ 自动发货 ✓ 永久有效 ✓ 售后保障

资源介绍

SRE 基础概念​ 定义:SRE 是一套将软件工程方法应用于 IT 基础设施和运营的原则与实践,旨在创建高可靠性和可扩展性的软件系统。​ 起源:2003 年由 Google 提出,最初为解决大规模系统的可靠性问题,后逐渐被广泛采用。​ 定位:作为开发与运营之间的桥梁,与 DevOps 有相似原则但实践不同,部分组织中两者为独立团队,部分则角色重叠。​ 核心原则:​ 可观测性(通过监控识别系统漏洞)​ 自动化(消除手动重复任务)​ 服务级别目标(SLO)、服务级别协议(SLA)等指标设定​ 度量(定义指标衡量系统性能)​ 风险管理(识别潜在故障并减轻影响)​ 事件管理(建立明确的事件处理标准)​ 变更管理(规范开发和测试人员的变更发布流程)​ SRE 在软件开发生命周期(SDLC)中的作用​ 传统模型局限:瀑布模型为线性流程,各阶段孤立,难以应对需求变化;早期敏捷方法虽解决部分问题,但开发与运营团队仍存在隔阂。​ SRE 的融入:​ 规划阶段:提供生产环境的实际数据(如流量、可扩展性等),辅助需求分析和设计。​ 设计阶段:分享客户负载等洞察,助力架构设计,如推荐合适的数据库和服务器容量。​ 测试阶段:参与测试评审,进行负载和混沌测试,识别潜在问题。​ 部署与监控阶段:监控生产环境,处理技术工单,快速排查和解决问题。​ SRE 的核心支柱​ SLO、SLI 和 SLA:​ SLI(服务级别指标):定量衡量服务可靠性的实际数据,如吞吐量、延迟等。​ SLO(服务级别目标):组织内部设定的系统运行标准。​ SLA(服务级别协议):对客户承诺的服务可靠交付标准,包括 uptime、响应性等。​ 监控:收集系统指标以了解性能,包括主动监控和被动监控,常用工具如 ELK、Prometheus、Grafana 等。​ 应急响应:即事件管理系统,包括事件识别、记录、分类、优先级划分和响应等阶段,确保及时处理用户请求和故障。​ 变更管理:规划、测试和部署代码或配置变更,控制变更风险,确保系统质量。​ SRE 与 DevOps 的关系​ 共同点:​ 结构化方法(明确各阶段任务、角色和流程)​ 自动化(减少手动工作,提高效率)​ 质量控制(确保部署到生产环境的代码质量)​ 度量(通过指标衡量性能)​ 变更管理(规范变更流程) 构建有效的 SRE 解决方案​ 构建可扩展、可靠和可用的系统:​ 可扩展性:通过水平扩展(增加节点)和垂直扩展(提升现有节点资源)实现,需根据场景选择合适方式。​ 可靠性:通过设计评审、代码审查、测试(单元测试、回归测试等)和自修复能力(自动检测和修复问题)确保。​ 可用性:通过分布式系统、数据复制、地理分布和定期维护实现系统持续可用。​ 容量规划和成本管理:​ 容量类型:软件和硬件容量、劳动力容量、产品容量。​ 规划策略:滞后策略(需求增加后再扩容)、领先策略(提前预估需求并扩容)、匹配策略(结合前两者)。​ 成本管理:使用开源软件、按需缩放基础设施、合理管理劳动力等。​ 测试的重要性:包括单元测试、功能测试、性能测试、混沌测试等,可确保系统质量、安全性,节省成本并提升客户满意度。​ 监控和可观测性工具:选择合适的工具(如 Prometheus、Grafana 等),实现对系统的实时监控和问题排查。​ 事件管理流程:建立完善的事件记录、分类、优先级划分和响应流程,使用先进工具实现自动化。​ 自动化减少工作负担:自动化手动重复任务,如自动告警、自动恢复等,提高效率并减少人为错误。​ CAMS 模型:​ 文化(Culture):建立共同的愿景、目标和标准,促进团队协作。​ 自动化(Automation):消除重复工作,提高生产力。​ 度量(Measurement):通过指标评估绩效,识别改进空间。​ 分享(Sharing):促进团队成员间的知识共享和透明沟通。​ 反模式(Anti-patterns)​ 软件工程中的反模式:​ spaghetti 代码(结构混乱的代码)​ 黄金锤子(过度依赖一种工具解决所有问题)​ 船锚(保留不必要的代码)​ 死代码(不再使用但未移除的代码)​ 上帝对象(一个对象负责过多功能)​ 复制粘贴编程(未经修改地复制代码)​ SRE 中的常见反模式:​ 告警配置错误(如错误的告警对象、重复告警)​ 工单处理不当(如低优先级告警创建工单)​ 无自动化修复(手动处理可自动化的问题)​ 无变更管理流程(随意进行系统变更)​ 不切实际的期望(如追求 100% 可用性)​ 无无责事后分析(聚焦于指责而非解决问题)​ 反模式的类型及解决方法:涉及服务设计、监控可观测性、发布部署、变更管理等多个方面,需通过识别问题、制定标准和流程等方式解决。​ 成功的 SRE 实践案例​ 避免告警疲劳:在项目规划和实施阶段,合理配置告警,避免不必要的告警干扰。​ 提高可观测性:通过在代码中集成合适的指标,使用有效的监控工具,实现对系统的全面观测。​ 通过自动化减少人工工作:如自动化数据同步、自动故障转移等,提高效率。​ 实施根本原因分析(RCA):对问题进行深入分析,从根源上解决,避免重复出现。​ 建立强大的事件管理:明确事件处理流程,确保及时响应和解决问题。​ SRE 早期参与 SDLC:从规划阶段就融入 SRE,提供生产环境视角,优化系统设计。​ SRE 最佳实践​ 软件设计和代码:遵循良好的设计原则,进行代码审查,编写测试用例,做好文档记录等。​ DevOps 和 SRE 的核心价值:两者都强调协作、自动化、度量和反馈循环,共同致力于构建稳定可靠的系统。​ 业务与 SRE:SRE 通过度量系统性能、管理事件等方式,帮助业务实现目标,提高客户满意度。​ SRE 工具包​ 事件管理工具:如 ServiceNow、PagerDuty 等。​ 变更管理工具:如 ServiceNow、Jira 等。​ 告警和监控工具:如 ELK、Prometheus 等。​ 发布和部署工具:如 Jenkins、Ansible 等。​ 混沌测试工具:如 Litmus、Chaos Monkey 等。​ SRE 的日常工作和职业发展​ 技能要求:软件编码(Python、Java 等)、自动化 / 脚本编写、ITIL 知识、CI/CD 管道设计、云计算知识等。​ 职责:监控系统、排查问题、处理事件、进行变更管理、参与系统设计等。​ 职业路径:可从软件开发者、测试人员、DevOps 工程师等转型,需不断学习相关技能和工具。​ SRE 的未来​ 随着云原生技术的发展,SRE 的作用将更加重要,聚焦于系统可靠性。​ 技术栈不断演进,SRE 需持续学习新工具和框架。​ 与 DevOps 的协作将更加紧密,可能形成统一团队。​ 人工智能将在 SRE 中发挥更多作用,如自动识别故障根源等。​ 注重多元化和包容性,促进团队协作和创新。Site Reliability Engineering Handbook