建立可靠性工程体系框架的重点是研究复杂系统是如何被可靠地构建起来、系统是如何工作、故障是如何发生发展并被消除的。
1、理解可靠性和互联网SRE的关系
认识到互联网服务的可靠性/稳定性的工作本质就是软件可靠性工程,而不是单项的开发技术和运维技能。
传统软件可靠性深入研究了软件可靠性的诸多根本问题,只是限于软件形态、发展阶段、关注重点不一样,无法适应互联网软件产品的新情况,但其核心的思路是可以借鉴的。软件可靠性工程研究和实践已经基本跳出纯模型论,更加注重工程实践,在软件可靠性设计、分析、测试、工程管理等方面进行了较为系统的研究,在某些软件中取得了显著成效。虽然其方法不能完全适用于互联网,但其系统性的分析方法和研究成果值得我们学习借鉴,例如如何对影响软件可靠性的因素进行研究、如何开发可靠的软件、如何验证软件的可靠性方法等。
2、借鉴传统可靠性工程的关键方法
在学习传统可靠性和互联网可靠性工作的基础上,参考、借鉴并整合为新的可靠性工程框架来指导互联网可靠性工作。
- 结合软件生命全周期进行可靠性工作
可靠性工程是为了达到系统可靠性要求而进行的有关设计、管理、试验、开发和生产等一系列工作的总和,它与系统整个生命周期内的全部可靠性活动有关。软件有自己的生命周期,运维是其中一个阶段。可靠性要跨越运维和开发阶段,研究从软件的需求、设计、开发、测试、交付部署/发布、持续运行到下线等各个阶段的可靠性工作。
预防故障是最重要的第一步,在设计阶段就把故障消灭掉是成本最低的,也是最能体现公司架构和技术能力的,好的设计可以实现“一次把事情做正确”的目的。很多公司都有架构师,要对网站服务进行高可用、高可靠的设计。在预防阶段有很多已知的技术和方法,如可靠性设计方法、单元测试、代码审查、设计评审、可靠性估计、故障模式及影响分析等,充分测试是为了预防和减少把故障带到线上。这些技术方法是为了尽可能在早期把存在的Bug、故障隐患暴露并消除。
- 对可靠性过程和结果进行定性与定量的分析评估
现代互联网软件可靠性目前还是以工程实践为主,缺少通过定性定量分析、度量和管理的方法,也有人借鉴传统的定量指标MTBF、MTTR等,不过在互联网行业的使用范围和认可程度并不高。传统可靠性的学科式研究中大量使用了定量分析,虽然这些定量分析方法和指标不太适用于互联网软件,但我们可以参照其方法研究适用于互联网时代的定性、定量分析方法和指标,改变当前行业只讨论工作方法而缺少量化评估效果的现状。
3、将物理可靠性的6种能力作为通用的可靠性工程框架
物理可靠性工程中的部分方法与互联网软件可靠性方法非常类似,如可靠性设计能力、分析能力、可测试能力、保障能力、修复能力、环境适应能力、人机可靠性等。结合互联网的实践特点,我们抽象出互联网软件可靠性最重要的6种能力,包括可靠性的设计能力、观测能力、修复能力、保障能力、可靠性试验与反脆弱能力、可靠性管理能力等,这套框架能把当前所流行的绝大部分稳定性方面的实践方法纳入进来,也充分参照了传统物理可靠性的工程体系,具有一定的完备性,同时整合了传统软件可靠性工程研究的影响软件可靠性的因素及应对方法。