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

news2024/11/13 15:10:10

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

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

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

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

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

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

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

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

原则01

专注于关键任务能力

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

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

原则02

识别关键资产

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

原则03

专注于共同关键资产

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

原则04

专注于破坏性伤害

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

原则05

期待逆境

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

原则06

考虑所有类型的逆境

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

原则07

假设多重逆境

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

原则08

预计逆境随时间变化

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

原则09

识别并优先处理潜在逆境

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

原则10

抵御逆境

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

原则11

检测逆境

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

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

原则12

应对逆境

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

原则13

从逆境中恢复

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

原则14

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

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

原则15

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

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

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

原则16

平衡分层防御和复杂性

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

17总结与展望

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

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

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

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

我们江湖再见。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

部署Nextcloud详细步骤及优化方法

一、安装PHP8.0以上 我这里使用PHP8.0.30 [rootlocalhost ~]# php -v PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 ) Copyright (c) The PHP Group Zend Engine v4.0.30, Copyright (c) Zend Technologies [rootlocalhost ~]# 安装方法参考 二、安装MY…

台式扫描电镜中的扫描速度和扫描模式如何选择?

台式扫描电镜(SEM)是一种利用电子束扫描样品表面,通过检测样品反射或发射的次级电子、背散射电子、X 射线等信号,来获取样品的形貌、结构、组成和分布等信息的仪器。台式扫描电镜具有体积小、操作简单、样品制备方便、分辨率高、成…

2023年团体程序设计天梯赛——总决赛题

F-L1-1 最好的文档 有一位软件工程师说过一句很有道理的话:“Good code is its own best documentation.”(好代码本身就是最好的文档)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。 输出格式: 在一…

禾匠榜店商城系统 RCE漏洞复现

0x01 产品简介 禾匠榜店商城系统是浙江禾匠信息科技有限公司的一套基于PHP和MySQL的商城系统。 0x02 漏洞概述 禾匠榜店商城系统的api/testOrderSubmit模块下的preview方法存在命令执行漏洞,攻击者可以向服务器写入木马文件,直接获取服务器权限 0x03 漏洞概述 FOFA:bod…

GZ029 智能电子产品设计与开发赛题第6套

2023年全国职业院校技能大赛高职组 “GZ029智能电子产品设计与开发”赛项赛卷六 题目:模拟工业传送带物品检测系统的设计与开发 1 竞赛任务 在智能电视机上播放工业传送带传输物品视频,模拟工业传送带物品检测系统(以下简称物品检测系统&…

Vue路由跳转重定向动态路由VueCli

Vue路由跳转&重定向&动态路由&VueCli 一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话,需要给当前跳转的导航加样式,同时要移除上一个a标签的样式,太麻烦!!! …

web Speech Synthesis 文字语音播报,Audio 播放base64提示音

SpeechSynthesisUtterance基本介绍 SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 SpeechSynthesisUtterance基本属性 SpeechSynthesisUtterance.lang 获取并设置话语的语言SpeechSynthesisU…

FPGA高端项目:UltraScale GTH + SDI 视频解码,SDI转DP输出,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图3G-SDI摄像头LMH0384均衡EQUltraScale GTH 的SDI模式应用UltraScale GTH 基本结构参考时钟的选择和分配UltraScale GTH 发送和接收处理流程UltraScale…

vscode报错cnpm : 无法加载文件 C:\Program Files\nodejs\cnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅

报错 打开powershell 执行 Start-Process powershell -Verb runAs set-ExecutionPolicy RemoteSigned 选择 Y 完成

Zookeeper(服务注册中心)安装以及启动服务

概述 ZooKeeper是一个分布式的开源协调服务,用于管理和协调大规模分布式系统中的各种任务。它提供了一个简单的分层命名空间,以及对数据的强一致性(ACID特性)和高可用性的支持。 ZooKeeper提供了一个类似文件系统的层次结构&…

微服务学习:Nacos微服务架构中的服务注册、服务发现和动态配置Nacos下载

Nacos的主要用途包括: 服务注册与发现:Nacos提供了服务注册和发现的功能,服务提供者可以将自己的服务注册到Nacos服务器上,服务消费者则可以通过Nacos来发现可用的服务实例,从而实现服务调用。 动态配置管理&#xff…

PR分屏模板|Premiere动态多画面多屏特效视频模板剪辑素材

这一个很棒的分屏效果PR幻灯片模板视频素材!为您的视频制作多屏幕动画! 非常易于定制、更改颜色。 仅支持Premier Pro 2024及最新版本。 高清分辨率:19201080/30fps。 持续时间–00:37。 21媒体占位符(照片或视频)。 包…

MySQL数据库,函数与分组

单行函数: 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以嵌套 参数也可以是一列或一个值 数值函数 基本函数: 注:ROUND(x,y)函数的y是负数时,即往高位进行四舍五入,如-3就是按百位…

每天五分钟计算机视觉:VGG网络相对于AlexNet网络有哪些不同?

本文重点 在前面的课程中,我们已经学习了VGG网络模型,也学习了AlexNet网络模型,AlexNet模型先于VGG网络模型产生,所以VGG在一定程度上要优于AlexNet模型,二者来看一下,二者究竟有什么不同? 深度…

解决微信小程序中 ‘nbsp;‘ 空格不生效的问题

在微信小程序开发中,我们经常会使用 来表示一个空格。这是因为在 HTML 中,空格会被解析为一个普通字符,而不会产生实际的空白间距。而 是一种特殊的字符实体,它被解析为一个不可见的空格,可以在页面上产生真正的空…

AI数字人在tiktok平台开播教程!

AI数字人作为一种虚拟形象的代表,正在逐渐走进人们的生活。在小红书这样的短视频平台上,AI数字人也有机会开展直播活动,展示自己的个性魅力,也可以进行直播带货! 数字人在淘宝购物平台开播原理 (1&#xff…

C++ 指针常量和常量指针的区别

指针常量 指针常量:顾名思义它就是一个常量,但是是指针修饰的。 格式为: int * const p //指针常量在这个例子下定义以下代码: int a,b; int * const p&a //指针常量 //那么分为一下两种操作 *p9;//操…

千万别等到被Python错误重试逼疯了,来这里解脱吧!

Python错误重试逼疯多少人?解决办法来了~~~ 前言 01.安装 pip install tenacity 02.使用 (1)使用规则 ● 同一个参数,多个值用 |(或),+(与)进行组合使用 ● 不同参数之间,只有组合使用,通过关键字参数传参即可 (2)@retry()【常用】 ● 【无条件重试】,只要抛出异…

Dockerfile创建镜像介绍

1.介绍 Docker 提供了一种更便捷的方式&#xff0c;叫作 Dockerfile&#xff0c;docker build命令用于根据给定的Dockerfile构建Docker镜像。 docker build语法&#xff1a; # docker build [OPTIONS] <PATH | URL | -> 常用选项说明 --build-arg&#xff0c;设置构建时的…

nginx 前端服务调用后端服务报426

nginx 前端服务调用后端服务报426 在配置文件中加上一句配置 2&#xff1a;外挂出来