系统韧性研究(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技术说明的形式完成了这七篇系统韧性文章,这是该系列的最后一篇文章,希望能对诸位有所帮助。

我们江湖再见。

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

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

相关文章

文件搜索项目知识介绍

项目背景SQLite介绍SQLite、驱动包下载SQLite使用SQLite和MySQL区别 JDBC搭配SQLiteJDBC原理-创建连接JDBC原理-关闭连接添加和发送SQLJDBC-事务开启和提交 打包.exe文件线程池线程数量问题 项目背景 需求上:因为Windows的文件搜索工具搜索速度十分的慢&#xff1b…

虚幻学习笔记11—C++结构体、枚举与蓝图的通信

一、前言 结构体的定义和枚举类似,枚举的定义有两种方式。区别是结构体必须以“F”开头命名,而枚举不用。 额外再讲了一下蓝图生成时暴露变量的方法。 二、实现 2.1、结构体 1、定义结构体 代码如下,注意这个定义的代码一定要在“UCLASS()”…

从零构建属于自己的GPT系列6:模型本地化部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:数据预处理 从零构建属于自己的GPT系列2:模型训…

ThinkPHP连接ORACLE数据库教程

目录 概念基本步骤详细操作问题排除参考 概念 要连接Oracle数据库,必须有两个东西,一个PHP官方写的扩展,一个Oracle官方写的客户端PHP是通过扩展去操作oralce客户端连接的服务端数据库,所以两个都不能少,而且版本必须…

大数据讲课笔记1.4 进程管理

文章目录 零、学习目标一、导入新课二、新课讲解(一)进程概述1、基本概念2、三维度看待进程3、引入多道编程模型(1)CPU利用率与进程数关系(2)从三个视角看多进程 4、进程的产生和消亡(1&#xf…

5V低压步进电机驱动芯片GC6150,应用于摄像机,机器人 医疗器械等产品中。具有低噪声、低振动的特点

GC6150是双通道5V低压步进电机驱动器,具有低噪声、低振动的特点,特别适用于相机变焦对焦系统、万向架、摇头机等精度、低噪声STM控制系统,该芯片为每个通道集成了一个256微步的驱动器。通过SPI & T2C接口,客户可以方使地调整驱…

Python+Appium自动化测试之元素等待方法与重新封装元素定位方法

在appium自动化测试脚本运行的过程中,因为网络不稳定、测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待的方法来避免这种…

下降路径最小和/最小路径和(dp问题)

1.状态表示 2.状态转移方程 3.初始化 4.填表 从上往下 5.返回值 dp表最后一行的最小值 ------------------------------------------------------------------------------------------------------------------------------- 1.状态表示 2.状态转移方程 3.初始化 4.填表 上…

【教程】app备案流程简单三部曲即可完成

APP备案流程包括以下步骤: 1. 开发者实名认证:在提交备案申请之前,开发者需要通过移动应用开发平台进行实名认证。这个步骤需要提供身份证号码、姓名、联系方式等信息,并上传相关证件照片或扫描件。 2. 应用信息登记&#xff1a…

使用 PyTorch 完全分片数据并行技术加速大模型训练

本文,我们将了解如何基于 PyTorch 最新的 完全分片数据并行 (Fully Sharded Data Parallel,FSDP) 功能用 Accelerate 库来训练大模型。 动机 随着机器学习 (ML) 模型的规模、大小和参数量的不断增加,ML 从业者发现在自己的硬件上训练甚至加…

小程序域名SSL证书能用免费的吗?

众所周知,目前小程序要求域名强制使用https协议,否则无法上线。但是对于大多数开发者来说,为每一个小程序都使用上付费的SSL证书,也是一笔不小的支出。那么小程序能使用免费的SSL证书吗? 答案是肯定的。目前市面上可选…

HCIP---RSTP/MSTP

文章目录 目录 文章目录 前言 一.RSTP诞生背景 二.RSTP对比STP的快速收敛机制 端口角色变化 接口状态变化 RSTP-BPDU 指定端口- P/A机制 BPDU发送变化 端口状态快速切换 优化拓扑变更机制 三.MSTP MSTP诞生背景 MSTP相关概念 MSTP配置 总结 前言 STP协议虽然能够解决环…

记录 | xftp远程连接两台windows

1、打开openssh 设置 -> 应用 -> 可选功能 -> 添加功能 -> OpenSSH 客户端,将 ssh 客户端安装将两台电脑的 ssh 开启,cmd 中输入 net start sshd2、配置 win10 账号密码 3、进行 xftp 连接

租一台服务器多少钱决定服务器的价格因素有哪些

租一台服务器多少钱决定服务器的价格因素有哪些 大家好我是艾西,服务器这个名词对于不从业网络行业的人们看说肯定还是比较陌生的。在21世纪这个时代发展迅速的年代服务器在现实生活中是不可缺少的一环,平时大家上网浏览自己想要查询的信息等都是需要服…

加减乘除简单吗?不,一点都不,利用位运算实现加减乘除(代码中不含+ - * /)

文章目录 🚀前言🚀异或运算以及与运算🚀加法的实现🚀减法的实现🚀乘法的实现🚀除法的实现 🚀前言 这也是阿辉开的新专栏,知识将会很零散不成体系,不过绝对干货满满&…

多维时序 | MATLAB实现SAO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现SAO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现SAO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现SAO-CNN-B…

CommonJs模块化实现原理ES Module模块化原理

CommonJs模块化实现原理 首先看一个案例 初始化项目 npm init npm i webpack -D目录结构如下: webpack.config.js const path require("path"); module.exports {mode: "development",entry: "./src/index.js",output: {path: p…

硬件开发笔记(十六):RK3568底板电路mipi摄像头接口原理图分析、mipi摄像头详解

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/134922307 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

Redis缓存主要异常及解决方案

1 导读 Redis 是当前最流行的 NoSQL数据库。Redis主要用来做缓存使用,在提高数据查询效率、保护数据库等方面起到了关键性的作用,很大程度上提高系统的性能。当然在使用过程中,也会出现一些异常情景,导致Redis失去缓存作用。 2 异常类型 异常主要有 缓存雪崩 缓存穿透 缓…

【sqli靶场】第二关和第三关通关思路

目录 前言 一、sqli靶场第二关 1.1 判断注入类型 1.2 判断数据表中的列数 1.3 使用union联合查询 1.4 使用group_concat()函数 1.5 爆出users表中的列名 1.6 爆出users表中的数据 二、sqli靶场第三关 2.1 判断注入类型 2.2 观察报错 2.3 判断数据表中的列数 2.4 使用union联合…