​外文翻译丨如何衡量软件的弹性?

作者:

Dr. Bill Curtis – Founding Executive Director, CISQ 

来源:

Consortium for Information & Software Quality 

https://www.it-cisq.org/how-to-measure-software-resilience/index.htm

 

 

什么是软件弹性?

 

关于“软件弹性”这一术语的含义,存在着粗糙但不完善的一致意见。软件弹性的一些代表性定义包括:

 

 

CISQ网络弹性峰会——网络弹性是指设计和构建能够抵御恶意攻击并在意外情况下继续运行的软件的能力。

https://www.itcisq.org/cyber-resilience/

 

Samir Nassar,IBM公司——软件解决方案弹性是指一个解决方案在系统的一个或多个部分吸收问题影响的能力,同时继续为业务提供可接受的服务级别。

https://www.ibm.com/developerworks/websphere/techjournal/1407_col_nasser/1407_col_nasser.html

 

沃尔玛实验室Vilas Veeraraghavan——弹性工程的目标是帮助维持一个应用生态系统。在这个系统中,基础设施和依赖性的意外故障对用户体验造成的破坏最小。https://medium.com/walmartlabs/charting-a-path-to-software-resilience-38148d956f4a

 

Adrian Hornsby,亚马逊网络服务——弹性系统接受这样一种观点,即故障是正常的,以我们所称的“部分故障模式”运行系统是完全可以的。

https://medium.com/@adhorn/patterns-for-resilient-architecture-part-1-d3b60cd8d2b6

 

由于“软件弹性”侧重于维护用户功能,“软件弹性”通常被扩展到包括在发生破坏性事件后快速恢复系统。扫描软件弹性的众多定义可以得到以下属性的组合。弹性软件密集型系统可以在以下情况:在其一个或多个组成部件(硬件、软件、网络等)中发生故障,遇到意外输入或外部条件,受到来自内部或外部来源的恶意攻击时,能够做到继续为用户提供有用的功能级别,中断事件发生后,快速恢复中断的功能。

 

弹性与软件质量标准有何关系?

 

“弹性”在任何标准软件产品质量模型中都没有定义。然而,它们大多具有同义的质量属性。软件和系统产品质量的主要模型是ISO/IEC 25010,即将被修订为ISO/iec25010-2。ISO/IEC 25010包括八个质量特性(图1),每一个都细化为子特性“可靠性”是ISO/IEC 25010质量特性。在该特性下,弹性的概念最佳。可靠性下最符合弹性典型描述的子特征是“可用性”、“容错性”和“可恢复性”。

 

图1  ISO/IEC 25010软件产品质量模型

 

ISO/IEC 25023是为质量模型的子特性提供度量的标准。它只列出与系统外部行为相关的度量,如停机时间、事件和恢复速度。它不提供与降低弹性的系统缺陷相关的度量,也不提供与增强弹性的架构组件相关的度量。因此,ISO标准没有提供内部的、结构性的弹性度量,即通过分析软件系统本身来检测和度量与弹性相关的属性的方法。

 

信息与软件质量联盟(CISQ)已制定了OMG批准的规范,作为衡量ISO/IEC 25010(图1中蓝色部分)中八个质量特性中四个的国际标准,即可靠性、安全性、性能效率和可维护性。这些措施是从检测和计算严重违反良好体系结构和编码规范的行为发展而来的。软件产品目前与弹性相关的最佳度量是CISQ的可靠性和安全性度量的组合。这些度量评估软件系统内部的缺陷结构。这些缺陷结构可以降低软件系统的弹性。CISQ措施包括与许多架构组件相关的缺陷。这些缺陷将被包括在提高弹性中。

 

 

弹性是可测量的吗?

 

软件系统弹性评估要求将系统性能度量与弹性阈值进行比较。弹性阈值至少可以由以下三个要素确定:

 

1) 哪些交易或服务对用户至关重要

2) 中断的服务恢复的速度

3) 中断事件期间可能丢失的请求的比例

 

衡量软件密集型系统的弹性性能需要两种不同分析的组合。第一个是静态分析架构元素的存在,这些元素可以增强弹性,并避免降低弹性的缺陷;第二个是动态分析系统在中断事件下的性能。对“弹性”的全面测量超出了静态测量技术的当前状态。因为弹性系统所需的一些架构组件的自动化分析脚本尚未完全定义或开发。然而,许多脚本都处于软件分析的最新水平,尽管有些脚本需要系统级的体系结构分析,特别是与多层分布式系统相关的体系结构分析。目前,自动化脚本尚未涵盖的组件分析通常是通过对系统架构和/或源代码的正式检查来完成的。然而,手动功能不断向自动化转变。

 

由于软件弹性被定义为可持续的行为,一个完整的弹性度量要求系统内部结构的静态分析与系统行为的动态分析相结合。静态分析确定代码中弹性元素的正确设计存在,而动态分析则评估其保持弹性性能的能力。动态执行和相关测试的结果受到其充分模拟实际破坏条件的能力的限制。一种通常被称为“混沌工程”的方法包括工程和评估系统弹性的指导方针、方法和过程。

 

 

哪些架构属性影响弹性?

 

在测量弹性方面的进展将需要对软件密集型系统的架构组件进行分析和测量。

确保软件密集型系统(尤其是具有分布式体系结构的系统)恢复能力所需的一些体系结构属性包括:

 

•冗余——组件(或服务)的复制,以便在一个或多个系统组件出现故障时提高可用性。

 

•负载平衡器——检查服务以确定它们是否能够处理请求,并将处理负载分散到各个服务上。

 

•固有标度——动态扩展以满足需求或负载变化的能力。

 

•基础设施作为代码——通过机器可读的定义文件而不是物理硬件配置或交互配置工具管理和提供计算机数据中心的过程。

 

•不变的基础设施——每次部署都会交换/更换组件,而不是进行就地更新。

 

•应用程序——应用程序独立于以前的请求或会话处理所有客户端请求,不应将任何信息存储在本地磁盘或内存中。这还包括快速释放资源(如内存)。

 

•退避算法——逐步提高重试的速度,从而避免网络拥塞和最终崩溃。

 

•超时——连接的终止会降低性能,而不是因为连接池已用完而冻结。

 

•幂等运算——可以重复操作,而不会重复结果、副作用或应用失败。

 

•断路器——监控生产者和消费者之间的连续故障数量。如果故障次数超过阈值,断路器对象将跳闸,并且生产者调用使用者的所有尝试都将立即失败或返回定义的回退。

 

•缓存——一种硬件或软件组件,用于存储数据,以便能够更快地满足未来对该数据的请求,并可对其进行配置,以提高拒绝服务攻击期间的恢复能力。

 

•输入审查——评估所有输入,以确保它们不有害或恶意。

总之,回弹测量需要三个定量元素的组合:

 

1) 弹性阈值的确定

2) 弹性能力和缺陷的静态分析

3) 现实破坏条件下系统行为的动态分析

 

按照目前静态软件分析的发展速度,大多数与弹性相关的建筑结构的检测和测量应在3-5年内实现自动化。好消息是,使用现有的标准和技术可以检测到软件中影响弹性的某些方面。因此,目前较先进的技术可以提供软件系统弹性的合理估计方法。