系统韧性研究(7)| 韧性系统的16大指导原则

不良事件和条件可能会中断系统,导致系统无法提供必要的功能和服务。正如我在本系列的前几篇文章中所概述的那样,韧性是大多数系统的一个基本质量属性,因为它们提供了关键的能力和服务,尽管存在着不可避免的困难,但这些能力和服务必须继续。这些逆境通常是不可避免的,并以多种形式出现。典型的例子包括编码缺陷(鲁棒性)、危害和事故(安全)、漏洞和攻击(网络安全和可生存性)、过度负载(容量)、长寿命(寿命)和通信丢失(互操作性)。

在本系列的第一篇文章中,我将系统韧性定义为系统快速有效地保护其关键能力免受不利事件和条件危害的程度。

第二篇文章确定了以下八个次要质量属性,对可能破坏关键系统的不利因素进行了分类:鲁棒性、安全性(被动)、网络安全(主动)、防篡改、生存性、容量、寿命和互操作性。

第三篇文章涵盖了系统韧性需求的工程设计,以及如何使用它们来推导这些次级质量属性的相关需求。

第四篇文章提出了一个用于分类韧性技术的本体,并澄清了韧性要求和韧性技术之间的关系。

该系列的第五篇文章给出了一个相对全面的韧性技术列表,并用它们执行的韧性功能(即抵抗、检测、反应和恢复)进行了注释。

第六篇文章帮助读者验证系统的架构、设计或实现是否满足其韧性要求以及鲁棒性、安全性、网络安全、防篡改、生存性、容量、寿命和互操作性的次要要求。

第七篇文章亦即本系列最后一篇文章,将前面六篇文章中的信息提取为以下16个指导原则,以帮助系统和软件工程师开发韧性系统。

原则01

专注于关键任务能力

系统通常支持许多功能,这些功能因系统的任务和功能而异。一些能力对系统任务的成功至关重要,而另一些能力可能只起到支持作用,或有避免中断任务的变通办法。类似地,并不是所有与能力相关的需求都是相等的。一些是任务成功所必需的,而另一些则不是。

系统韧性的目标是确保关键任务能力不会因不利条件和事件而中断。实现这一目标是为什么识别和理解任务关键能力是设计韧性系统的起点。

原则02

识别关键资产

每个关键任务功能都是由相关的关键资产实现的,包括系统组件、系统数据和潜在的系统外部数据源/接收器(例如,外部系统和外部数据库)以及将系统连接到这些数据源/接收器的外部网络。为了保护关键任务能力免受干扰,工程师必须保护相关的关键资产,这就是为什么识别关键任务能力所依赖的关键资产非常重要。

原则03

专注于共同关键资产

单个关键资产通常支持多个关键任务能力。因此,未能保护这些通用关键资产可能会导致多个关键任务能力的中断。避免这些中断是韧性工程应专注于公共关键资产(如共享服务/组件、网络和数据存储库)的原因。

原则04

专注于破坏性伤害

不利条件和事件会以多种方式损害关键资产。然而,某些条件或事件可能不会中断任务关键能力。因此,韧性工程应专注于破坏任务关键能力的危害。

原则05

期待逆境

许多不利因素是不可避免的,特别是在当今动荡的网络环境中。因此,韧性工程活动应基于存在不利条件和将发生不利事件的假设。

原则06

考虑所有类型的逆境

这种考虑应包括不利条件和不利事件,以及与所有八个次要质量属性相关的不利因素:鲁棒性、安全性(被动)、网络安全性(主动)、防篡改性、生存性、容量、寿命和互操作性。通常,系统韧性专注于单个质量属性(特别是鲁棒性、被动安全性或主动安全性),因为系统韧性需求主要由个体可靠性、安全或安全工程师驱动。

原则07

假设多重逆境

逆境并不总是孤立地发生,可能会相互影响。有时,它们同时发生或快速连续发生。不利条件的存在通常会导致相关的不良事件。大多数事故都是由一连串的逆境或逆境网络造成的。例如,网络安全攻击可能会导致导致事故的故障或失效。类似地,事故可能会产生一个漏洞,使网络安全攻击能够成功。

原则08

预计逆境随时间变化

逆境随时间而变化。此外,新的不利因素(例如新的安全威胁和漏洞)经常被发现。维护和更新系统通常会改变逆境的发生概率和负面后果。因此,韧性工程从未完成,而是一项长期的活动。

原则09

识别并优先处理潜在逆境

为了防止任务关键能力中断,必须保护系统免受大量潜在不利条件和事件的影响。必须识别和理解潜在的不利因素。然而,潜在不利因素的数量通常很大,以至于在实践中只能解决一个子集。风险分析通常用于根据这些不利情况的发生概率和它们可能造成的危害程度来对其进行优先级排序。

原则10

抵御逆境

通常可以对系统进行架构、设计和实现,以抵御某些不利因素,例如,被动地防止这些不利因素干扰任务关键能力。这种被动抵抗有时比主动检测、反应和恢复相同不利因素的韧性技术更有效(甚至不需要)。另一方面,纵深防御可能导致使用被动和主动复原技术来保护关键任务能力免受相同的不利影响。

原则11

检测逆境

要对逆境做出反应并从中恢复,首先必须检测到它们。该步骤不仅包括检测不良事件,还包括检测不良条件,以便相关反应可以防止相关不良事件。

一些朋友可能认为,规定反应和回收的要求就足够了,检测被理解为必要的(即检测要求可能源自反应或回收要求)。然而,单独调用检测增加了识别适当的检测技术并将其纳入系统的可能性。

原则12

应对逆境

明确“应对逆境”和“从逆境中恢复”之间的区别很重要。在可行的情况下,通过阻止逆境损害关键资产来做出反应。该反应可能在完全或部分恢复之前发生。所以,一个系统应该包括对逆境做出反应的韧性技术,以最大限度地减少它们可能造成的中断的持续时间和范围。

原则13

从逆境中恢复

在系统对逆境做出反应之后——并且没有对关键资产造成进一步的伤害——从中断任务关键能力的伤害中完全(或至少部分)恢复很重要。然而,根据造成的危害和系统的位置(例如火星探测车上的车轮电机故障),实现这一目标可能不现实,甚至也不可能。

原则14

假设组件有故障、失效或受损

如果在系统更新过程中未及时更换或消除,所有系统组件最终都会出现故障。正如我在前一篇关于验证和验证的博客文章中所讨论的,测试永远不会是穷尽的。因此,可以安全地假设软件(通常实现系统的大多数功能)具有一定程度的潜在缺陷,这些缺陷可能会中断系统的功能。组件可靠性的缺乏会影响韧性和可用性。

原则15

比起手动韧性更喜欢自主韧性

重要的是限制任务关键能力的任何中断的持续时间。因此,由于与自动韧性技术的响应时间相比,人类的反应时间相对较长,因此自主韧性通常优于手动韧性。此外,由于位置原因(例如在卫星和行星探测器和火星“漫游者”),并不总是可能包括人类的检测、反应和恢复。

另一方面,人类和自动恢复技术通常有不同的最佳点,因此,在可行的情况下,应结合自动恢复技术和人类监督。

原则16

平衡分层防御和复杂性

当避免任务关键能力中断至关重要时,通常使用分层深度防御。然而,每一种额外的韧性技术都会增加系统复杂性,而过多的复杂性反而会降低韧性。因此,韧性工程必须平衡韧性技术的数量和类型与它们增加到系统架构、设计和实现中的复杂性。

17总结与展望

系统韧性是大多数系统的基本质量属性,特别是那些对被动安全、主动安全以及业务至关重要的系统。我在这一系列文章中的目标是强调系统韧性的重要性,并为读者提供该主题的相对完整的概述。

在这一系列的7篇文章中,我概述了什么是系统韧性,它与其他质量属性的关系,以及它对需求、架构和验证(特别是测试)的影响。从概念模型开始,本系列确定了不同类型的韧性相关需求、用于提高韧性的许多架构和设计技术,以及用于验证系统充分处理逆境的程度的相关测试技术。

希望所有系统利益相关者能获取有用的信息,并为当下以及未来的关键系统开发工作提供实际指导。

截至2020年退休,我个人在美国软件工程研究所(SEI)已经工作了17个年头,整个职业生涯更是做了40多年的系统和软件工程师。我以SEI技术说明的形式完成了这七篇系统韧性文章,这是该系列的最后一篇文章,希望能对诸位有所帮助。

我们江湖再见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/237095.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前沿重器[39] | 对话式推荐系统——概念和技术点

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…

Java设计模式-单例(Singleton)设计模式的概述及实现

目录 🐶1 设计模式概述 🐶2 何为单例模式 🐶3 实现思路 🐶4 饿汉式实现代码 🐶5 懒汉式实现代码 🐶6 对比两种模式(特点、优缺点) 🐶7 单例模式的优点及应用场景 &…

Python中的魔力编程:掌握面向对象之道

Python中的面向对象编程 背景: ​ 最近在看一些代码的时候,对类中的一些内置方法不是很懂,因此出一篇文章来细说一下,希望大家看完后对Python中类有一个清楚的认识。 基础铺垫: ​ 面向对象的三个特点:…

【设计模式--结构型--享元模式】

设计模式--结构型--享元模式 享元模式定义结构实现案例优缺点使用场景 享元模式 定义 运用共享技术来有效的支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅减少需要创建的对象数量,避免大量相似的对象的开销,从而提高系统资源的利用率。 …

创建并测试第一个django项目并解决过程中遇到的问题

Django 是一个高级 Python Web 框架,它鼓励快速开发和简洁、实用的设计。它由经验丰富的开发人员构建,解决了 Web 开发的大部分麻烦,因此您可以专注于编写应用程序,而无需重新发明轮子。它是免费和开源的。 目录 一、django项目 …

官宣!「湾区之光群星演唱会」拉开2024新年音乐华丽序幕!

万众期待,群星荟萃!青春宝安时尚湾区——湾区之光群星演唱会即将在2024年1月5日闪耀亮相深圳宝安。 华语歌坛巨星天后齐聚一堂,携手多位实力唱将,共同呈现一场无与伦比的演唱会盛宴!在深情而又充满力量的歌声之中&…

孩子还是有一颗网安梦——Bandit通关教程:Level 0 → Level 1

🕵️‍♂️ 专栏《解密游戏-Bandit》 🌐 游戏官网: Bandit游戏 🎮 游戏简介: Bandit游戏专为网络安全初学者设计,通过一系列级别挑战玩家,从Level0开始,逐步学习基础命令行和安全概念…

LabVIEW开发矿井排水监控系统

LabVIEW开发矿井排水监控系统 针对矿井水害对煤矿安全生产构成的威胁,设计了一种基于嵌入式PLC和LabVIEW的矿井排水监控系统。该系统结合了PLC的可靠控制与单片机的应用灵活性,有效克服了传统排水方法中的不足,如测量不准确、效率低下等问题…

Java:字符流 文件输出 与 读入 方法

Java:字节流 文件输出与读入方法 并 实现文件拷贝 文章目录 字符流FileReaderFileWrite 字符流 字符流底层就是字节流。 字符流 字节流 字符集 特点: 输入流:一次读入一个字节,遇到中文时,一次读多个字节。 输出流…

图-数据结构

图的介绍 如果你有学过《离散数学》,那么对图的概念一定不陌生,在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边连接(结对)。顶点用圆圈表示,边就是这些圆圈之间的连线。注意&a…

Design patterns--代理模式

设计模式之代理模式 我们使用Qt开发大型应用程序时,经常遇见大型程序启动时需要加载一些配置信息、用户末次操作信息,以及算法模型等数据时比较费时,笔者在程序启动时设计欢迎页或加载页等窗体来提示用户程序正在加载某些数据,加载…

【Java数据结构 -- 顺序表】

List和ArrayList与顺序表 一. List1.1 List介绍2.1 常见接口介绍3.1 List的使用 二. ArrayList与顺序表1.线性表2.顺序表2.1 接口的实现2.2 顺序表的创建2.3 顺序表的打印2.4 顺序表的插入2.5 顺序表的按索引位置插入数据2.6 判断顺序表是否包含某个数2.7 返回顺序表某个数的索…

谁会成为第一个MoE大模型基座呢?重磅!Mixtral MoE 8x7B!!!

文章目录 谁会成为第一个MoE大模型基座呢?重磅!Mixtral MoE 8x7B!!!前言重磅!Mixtral MoE 8x7B!!!Mixtral是啥模型介绍模型结构长啥样?表现如何?可…

Python从入门到精通五:Python数据容器

数据容器入门 为什么学习数据容器 思考一个问题:如果我想要在程序中,记录5名学生的信息,如姓名。 如何做呢? 学习数据容器,就是为了批量存储或批量使用多份数据 Python中的数据容器: 一种可以容纳多份…

HCIA-H12-811题目解析(10)

1、【单选题】DHCP客户端在租期到达哪个比例时第一次发送续租报文? 2、【单选题】在WLAN中用于标识无线网络, 区分不同的无线网络的是? 3、【单选题】我们在笔记本电脑上搜索可接入无线网络时,显示出来的网络名称实际是 4、【单…

哪些原因导致MES管理系统实施项目失败

在制造业中,实施MES管理系统是一种提高生产效率、降低成本、提升质量的重要手段。然而,许多MES管理系统实施项目并未取得预期的成功,甚至失败。本文将探讨导致MES管理系统实施项目失败的原因。 1、需求不明确 在MES实施项目中,需…

Java-异常(一)-异常的概述和常见异常的举例

🐶b站视频 124-异常处理-异常的概述与常见异常的举例_哔哩哔哩_bilibili 目录 b站视频 5.1 异常概念 5.2 Error 示例代码 5.3 Exception异常划分 ❓面试题:常见的异常有哪些?举例说明 🐶5.1 异常概念 在使用计算机语言进行…

基于SSM的校园心理健康网站的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

PostGIS学习教程十二:地理

PostGIS学习教程十二:地理 坐标为"地理(geographics)“形式或者说是” 纬度(latitude)/经度(longitude)"形式的数据非常常见。 与Mercator(墨卡托)、UTM&…

【jitterbuffer】2:OnCompleteFrameCallback 送去FrameBuffer 处理的流程

【jitterbuffer】2:OnCompleteFrameCallback 送去FrameBuffer 处理的流程 基于m98版本。 WebRtc Video Receiver(六)-FrameBuffer原理 大神有个详细的论述。 Finder的FID设计 H.264 没有FID,使用RtpSeqNumOnlyRefFinder ,比较复杂,要做出决定 RtpSeqNumOnlyRefFinder cla…