系统韧性研究(1)| 何谓「系统韧性」?
过去十年,系统韧性作为一个关键问题被广泛讨论,在数据中心和云计算方面尤甚,同时它对赛博物理系统也至关重要,尽管该术语在该领域不太常用。大伙都希望自己的系统具有韧性,但这到底意味着什么?韧性与其他质量属性(如可用性、可靠性、鲁棒性、风险应急能力、安全防御能力和柔性服务能力)有何关系?韧性是这些质量属性的一部分还是全部,是它们的超集,亦或其他云云?在确保系统具备韧性与否之前,我们首先要解开这些问题的答案,并确切地吃透:到底什么才是系统韧性。
作为赛博物理系统韧性需求开发工作的一部分,我最近完成了关于韧性的现有标准和文献的研究。我的研究发现:“韧性”这个术语通常在非正式场合使用彷佛它有明显的含义,在这些场合,它被定义为相似但又略微不同的解释。
我的另一个发现是,韧性一词其实有着两种截然不同的含义。本文是由7篇组成的系列文章中的第一篇,重点关注系统韧性而不是组织韧性,后者的范围要大得多——组织韧性主要涉及业务连续性,包括人员、信息、技术和设施的管理。
01
什么赋予系统以韧性?
一般而言,如果一个系统在逆境中持续执行任务(即,如果它在可能导致中断的过度压力下提供所需的能力),那么它就是有韧性的。有韧性很重要,因为无论一个系统设计得多么好,现实迟早都会破坏这个系统。软件或硬件中的遗留缺陷最终将导致系统无法正确执行所需功能,或导致系统无法满足一个或多个质量要求(例如,可用性、可靠性、鲁棒性、风险应急能力、安全防御能力和柔性服务能力)。无风险应急方案或风险应急方案失效将导致事故的发生,攻击者可能会通过未知或未修复的安全漏洞危害到系统,外部环境异常(例如断电或温度过高)也会中断服务。
由于这些不可避免的破坏,可用性和可靠性是不充分的,因此系统也必须具有韧性。它必须能够抵御逆境并提供连续性服务,即便是在不利事件和条件造成干扰后也需要运行在降级模式。它还需要能够迅速从这些干扰可能造成的伤害中恢复。就像Timex(始创于1854年的美国钟表品牌)的老广告一样,一个有韧性的系统可以做到“受虐千百遍运转如初恋。”
然而,系统韧性的本身比前面的解释要复杂得多。系统韧性不是一个简单的布尔函数(即系统不是简单的“具有韧性或不具有韧性”)。没有一个系统能够100%抵御所有不良事件或情况。韧性总体而言是一个程度的问题,通常不能用单一的有序量表来衡量。换言之,说系统A比系统B更有韧性可能是个伪命题。
想要充分理解韧性,必须将其组成部分进行分解、还原。为了表现出韧性,系统必须包含控制逻辑:对不良事件和条件的检测,对干扰的正确响应和干扰过后的迅速恢复。因为韧性会假设不利事件和条件一定会发生,如何防止不利情况的发生并不在韧性的范围内。
一些韧性控制逻辑支持检测,而其它控制逻辑支持响应或恢复。因此,一个系统可能在某些方面具有韧性,但在其他方面则不然。系统A可能是在某些特定不良事件的检测方面最有韧性的,而系统B可能在某些特定特性事件的响应方面,是最具韧性的;以此类推,系统C可能是在从某些不良事件造成的特定伤害中恢复方面,是最有韧性的。
了解系统抵御逆境的范围边界非常重要:
- 在中断的情况下,系统必须继续提供哪些关键功能/服务?
- 哪些类型的逆境会干扰这些关键能力的交付(即,系统必须能够容忍哪些不利事件和条件)?
- 什么资产受到什么类型/级别的破坏会导致中断?
以上几点引出了对系统韧性的更详细、更细致的定义:
系统在一定程度上具有韧性,能够快速有效地保护其关键能力免受不利事件和条件造成的干扰。
前面的定义隐含着不良事件和条件会发生的想法。系统韧性是指当这些潜在的破坏性事件发生和条件存在时,系统会做什么。系统是否检测到这些事件和情况?一旦检测到它们,系统是否正确响应?之后系统是否恢复正常?
一些组织将“避免”不良事件和条件的发生纳入系统韧性范围。然而,“避免”并不在系统韧性的定义范围内,这是具有误导性和不恰当性的。避免或预防逆境并不能使系统更有韧性,相反,避免减少了对韧性的需求,因为如果逆境从未发生,系统就不需要有韧性。
图1说明了前文关于系统韧性定义中的关键概念之间的关系。韧性系统使用防护的韧性技术来被动抵御不利事件和条件,或主动检测这些不利情况对其作出反应,并从其造成的伤害中恢复,从而保护其关键能力(和相关资产)免受伤害。这些不利事件和条件中的每一个都与以下次要质量特征之一有关:鲁棒性、安全性、网络安全(包括防篡改)、军事生存能力、能力、寿命和互操作性。我们接下来会在本系列的第二篇文章中展开讨论。
↑图1:系统韧性定义中的关键概念
图2显示了通过韧性控制的有序应用来管理不良事件并恢复的时间线。
↑图2:韧性时间线示例
要理解系统韧性的全部范围和复杂性,重要的是要理解前文定义的关键词含义,以及它们在上图中的关系。
保护由以下四个功能组成:
① 抵御能力是指系统在不利事件或条件下被动防止或最大限度减少伤害的能力。被动防御的韧性技术包括模块化架构(该架构可防止模块之间的故障传播)、避免单点失败,以及电气设备的屏蔽、使计算机和网络设备免受电磁脉冲(EMP)的干扰。
检测是系统主动检测(通过检测技术)的能力:
- 关键能力的丧失或降级
- 对实现关键能力所需资产的危害
- 可能对关键能力或相关资产造成伤害的不利事件和条件
② 反应是指系统对正在进行的不良事件的发生做出积极反应或对不良条件的存在做出反应的能力(通过反应技术实现反应)。在检测到逆境时,系统可能会停止或避免不利事件,消除不利条件,从而消除或最大限度地减少进一步的伤害。反应技术包括采用异常处理、降级操作模式以及冗余投票等
③ 恢复是指系统在不良事件结束后主动从伤害中恢复的能力(通过恢复技术实现恢复)。恢复可以是完全的,即系统恢复到完全运行状态,所有损坏/销毁的资产都已修复或更换。恢复也可以是部分恢复(例如,使用冗余资源恢复全部服务而不进行更换/修复)或最小恢复(例如仅提供有限服务的降级模式操作)。恢复还可能包括系统的演变或调整(例如,通过重新配置自身),以避免未来发生不良事件或条件。
系统功能是系统在逆境造成中断的情况下必须继续提供的关键服务。
④ 资产是有价值的物品,必须加以保护,使其免受不利事件和条件造成的伤害,因为它们实现了系统的关键功能。在所有不利事件和条件下,通常不可能完全防止对所有资产造成损害。因此,通常会对资产进行优先级排序,以便检测、反应和恢复首先集中精力保护最重要的资产。与韧性相关的资产包括:
- 系统组件:系统的组件子系统、硬件、软件(如应用程序、基础设施、操作系统和固件)、网络(如设备、无线电和电缆)和设施
- 系统数据:系统存储、生成和操作的数据
- 系统外部资产:系统负责保护其免受伤害的任何系统外部资产(如人员、财产、环境、资金和声誉)
对这些资产造成的危害包括:
- 对系统功能的危害:服务完全或部分丧失以及服务被盗
- 对系统组件的危害:硬件或软件的破坏、损坏、盗窃或未经授权的逆向工程
- 对数据的危害:访问丢失(可用性违规)、损坏(完整性违规),未经授权的披露(机密性和匿名性违规)和交易抵赖(不抵赖违规),以及关键程序信息的逆向工程(CPI)(防篡改违规)
- 对系统外部资产的危害:资金损失、声誉损失、业务损失以及环境损害或破坏
不良事件是指由于其压力而可能通过对相关资产造成伤害来破坏关键能力的事件。这些不良事件(及其相关质量属性)包括以下情况的发生:
- 不利的环境事件,如系统外部电力损失以及地震或野火等自然灾害(鲁棒性,特别是环境耐受性)
- 输入错误,如操作员或用户错误(鲁棒性,特别是容错性)
- 满足要求的外部可见故障(鲁棒性,特别是故障容限)
- 事故和未遂事故(安全)
- 网络安全/篡改攻击(网络安防与反篡改)
- 恐怖分子或敌对军事力量的人身攻击(生存能力)
- 负载过大导致的负载峰值和故障(容量)
- 过度老化和磨损导致的故障(寿命)
- 通信丢失(互操作性)
不利条件是指由于其压力性质而可能干扰或导致关键能力中断的条件。这些不利条件包括以下情况的存在:
- 恶劣的环境条件,如过高的温度和恶劣的天气(鲁棒性,特别是环境耐受性)
- 系统内部故障,如硬件和软件缺陷(鲁棒性,特别是容错性)
- 安全隐患(安全)
- 网络安全威胁和漏洞(网络安防和反篡改)
- 军事威胁和弱点(生存能力)
- 过载(容量)
- 过度老化和磨损(长寿)
- 降级通信(互操作性)
值得注意的是,防篡改(AT)是一种特殊情况,乍一看可能与韧性无关。AT的目标是防止对手对机密软件等关键程序信息(CPI)进行逆向工程。防篡改专家通常认为,在这种情况下,对手将获得包含要进行逆向工程的CPI的系统的物理占有权,确保系统在篡改的情况下继续运行是无关紧要的。然而,篡改也可以远程尝试(即,无需首先获得系统的占有权)。在对手无法访问的情况下,AT对策可能是检测对手远程尝试访问和复制CPI,然后通过将CPI归零进行响应,此时系统将不再可操作。因此,远程篡改确实具有韧性影响。
02
总结与预告
本文阐述了系统韧性质量属性的详细而细致的定义,是关于系统韧性系列文章的开篇。在本系列的第二篇文章中,我将就这个定义阐明系统韧性与其他密切相关的质量属性之间的关系。敬请期待。
相关文章:

系统韧性研究(1)| 何谓「系统韧性」?
过去十年,系统韧性作为一个关键问题被广泛讨论,在数据中心和云计算方面尤甚,同时它对赛博物理系统也至关重要,尽管该术语在该领域不太常用。大伙都希望自己的系统具有韧性,但这到底意味着什么?韧性与其他质…...

使用Perl脚本编写爬虫程序的一些技术问题解答
网络爬虫是一种强大的工具,用于从互联网上收集和提取数据。Perl 作为一种功能强大的脚本语言,提供了丰富的工具和库,使得编写的爬虫程序变得简单而灵活。在使用的过程中大家会遇到一些问题,本文将通过问答方式,解答一些…...

SAP内部转移价格(利润中心转移价格)的条件
SAP内部转移价格(利润中心转移价格) SAP内部转移价格(利润中心转移价格) SAP内部转移价格(利润中心转移价格)这个听了很多人说过,但是利润中心转移定价需要具备什么条件。没有找到具体的文档。…...

WRF如何批量输出文件添加或删除文件名后缀
1. 批量添加文件名后缀 #1----批量添加文件名后缀(.nc)。#指定wrfout文件所在的文件夹 path "/mnt/wtest1/"#列出路径path下所有的文件 file_names os.listdir(path) #遍历在path路径下所有以wrfout_d01开头的文件,在os.path…...

Ubuntu右上角不显示网络的图标解决办法
一.line5改为true sudo vim /etc/NetworkManager/NetworkManager.conf 二.重启网卡 sudo service network-manager stop sudo mv /var/lib/NetworkManager/NetworkManager.state /tmp sudo service network-manager start...

AM@数列极限
文章目录 abstract极限👺极限的主要问题 数列极限数列极限的定义 ( ϵ − N ) (\epsilon-N) (ϵ−N)语言描述极限表达式成立的证明极限发散证明常用数列极限数列极限的几何意义例 函数的极限 abstract 数列极限 极限👺 极限分为数列的极限和函数的极限…...

Vue-2.3v-model原理
原理:v-model本质上是一个语法糖,例如应用在输入框上,就是value属性和input事件的合写。 作用:提供数据的双向绑定 1)数据变,视图跟着变:value 2)视图变,数据跟着变input 注意&a…...

左手 Serverless,右手 AI,7 年躬身的古籍修复之路
作者:宋杰 “AI 可以把我们思维体系当中,过度专业化、过度细分的这些所谓的知识都替代掉,让我们集中精力去体验自己的生命。我挺幸运的,代码能够有 AI 辅助,也能够有 Serverless 解决我的运营成本问题。Serverless 它…...

计算mask的体素数量
import numpy as np import nibabel as nib # 用于处理神经影像数据的库 # 从文件中加载mask图像 mask_image nib.load(rE:\mask.nii.gz) # 获取图像数据 mask_data mask_image.get_fdata() # 计算非零像素的数量,即白质骨架的体素总数 voxel_count np.count_no…...

VR全景营销颠覆传统营销,让消费者身临其境
随着VR的普及,各种VR产品、功能开始层出不穷,并且在多个领域都有落地应用,例如文旅、景区、酒店、餐饮、工厂、地产、汽车等,在这个“内容为王”的时代,VR全景展示也是一种新的内容表达方式。 VR全景营销让消费者沉浸式…...

FreeRTOS学习笔记——四、任务的定义与任务切换的实现
FreeRTOS学习笔记——四、任务的定义与任务切换的实现 0 前言1 什么是任务2 创建任务2.1 定义任务栈2.2 定义任务函数2.3 定义任务控制块2.4 实现任务创建函数2.4.1 任务创建函数 —— xTaskCreateStatic()函数2.4.2 创建新任务——prvInitialiseNewTask()函数2.4.3 初始化任务…...

js 之让人迷惑的闭包 03
文章目录 一、闭包是什么? 🤦♂️二、闭包 😎三、使用场景 😁四、使用场景(2) 😁五、闭包的原理六、思考总结一、 更深层次了解闭包,分析以下代码执行过程二、闭包三、闭包定义四、…...

10月10日上课内容 Docker--harbor私有仓库部署与管理
Docker--harbor私有仓库部署与管理 ------------------ 1、搭建本地私有仓库 ------------------------------ #首先下载 registry 镜像 docker pull registry #在 daemon.json 文件中添加私有镜像仓库地址 vim /etc/docker/daemon.json { "insecure-registries"…...

Java 序列化和反序列化为什么要实现 Serializable 接口
第一、序列化和反序列化 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 第二、什么时候需要用序列化和反序列化呢? 当我们只在本地JVM里运行下Java实例, 这个时候是不需要什么序列化和…...

vite+vue3+ts中使用require.context | 报错require is not defined | 获取文件夹中的文件名
vitevue3ts中使用require.context|报错require is not defined|获取文件夹中的文件名 目录 vitevue3ts中使用require.context|报错require is not defined|获取文件夹中的文件名一、问题背景二、报错原因三、解决方法 一、问题背景 如题在vitevue3ts中使用required.context时报…...

C#(Csharp)我的基础教程(四)(我的菜鸟教程笔记)-Windows项目结构分析、UI设计和综合事件应用的探究与学习
目录 windows项目是我们.NET学习一开始必备的内容。 1、窗体类(主代码文件窗体设计器后台代码文件) 主窗体对象的创建:在Program类里面: Application.Run(new FrmMain());这句代码就决定了,当前窗体是项目的主窗体。…...

Flink: Only supported for operators
Exception in thread "main" java.lang.UnsupportedOperationException: Only supported for operators.at org.apache.flink.streaming.api.scala.DataStream.name(...

NSIDC定义的海冰相关概念
文章目录 相关概念Matlab绘图结果展示 相关概念 NSIDC 表示 “National Snow and Ice Data Center”,即美国国家雪和冰数据中心。NSIDC 是一个位于美国科罗拉多大学波尔得分校的研究中心,致力于收集、管理和分发全球雪和冰的科学数据。 Matlab绘图 cl…...

【码银送书第八期】《Python数据挖掘:入门进阶与实用案例分析》
摘要:本案例将主要结合自动售货机的实际情况,对销售的历史数据进行处理,利用pyecharts库、Matplotlib库进行可视化分析,并对未来4周商品的销售额进行预测,从而为企业制定相应的自动售货机市场需求分析及销售建议提供参…...

微信小程序底部tabBar不显示图标
现场还原 在设置微信小程序底部tabBar导航图标时,无论如何操作均无法显示在界面上 解决思路 问题1 图标类型 一开始以为不支持png类型,但查看官方API仅提示ICON尺寸大小 打开其他项目可以正常展示,排除图标类型问题 iconPath string 否 …...

PostgreSQL基操之角色、表空间、数据库与表
PostgreSQL基操之角色、表空间、数据库与表 角色创建与管理表空间创建与管理数据库创建与管理表创建与管理 角色创建与管理 PostgreSQL数据库里没有User的概念,只有Role的概念。有的Role可以用于登录数据库,这些Role与其他数据库中的用户等价。 --创建…...

【算法|滑动窗口No.1】leetcode209. 长度最小的子数组
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…...

11_博客管理系统_实现过程
项目初始化 创建项目文件夹进入文件夹,执行 npm init -y 命令安装 express 和 mongoose,npm install express mongoose创建项目入口文件,app.js 或 index.js在 app.js 中进行项目搭建配置网站的路由配置网站静态资源目录 配置静态页面 配置…...

安防视频监控平台EasyCVR集成到ios系统不能播放是什么原因?如何解决?
视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流&#…...

hutool实现文件上传与下载
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> 文件上传需要创建一个表 Autowiredprivate SysFileInfoMapper sysFileInfoMapper;Value("${ty.…...

vue3学习源码笔记(小白入门系列)------provide和 inject 跨层级数据传递原理
目录 前言provideinject 总结 前言 需要从父组件向子组件传递数据时,会使用 props。对于层级不深的父子组件可以通过 props 透传数据,但是当父子层级过深时,数据透传将会变得非常麻烦和难以维护。 而依赖注入则是为了解决 prop 逐级透传 的问…...

【Python深度学习】目标检测和语义分割的区别
在计算机视觉领域,语义分割和目标检测是两个关键的任务,它们都是对图像和视频进行分析,但它们之间存在着明显的区别。本文将通过图像示例,详细阐述语义分割和目标检测之间的差异。 一、基本概念 1.1 语义分割(Semantic…...

取消加考!自考专业调整,2026年起执行新计划!
就在2023年10月7日,广东省教育考试院发布《关于广东省高等教育自学考试专业调整有关事项的通知》,自学考试迎来新变化,本次专业调整政策性强,涉及面广,持续时间长,一起来看看具体说明~ 关于广东省高等教育自…...

项目串讲(后端)要讲哪些东西?
刚进入一家公司,leader说给你几天时间,对咱们的公司的项目熟悉熟悉,做一个串讲吧。我很慌,没有串讲过,啥也不知道,不知道该怎么写,不知道讲出来leader满不满意,这些都是我在串讲前的…...

区块链技术在供应链管理中的创新应用
区块链技术以其独特的不可篡改和透明性特点,正在逐步改变供应链管理的传统模式。本文将探讨区块链技术在供应链管理中的创新应用及其带来的效益。 区块链技术的出现为许多行业带来了创新的可能,其中之一就是供应链管理。通过区块链技术,企业可…...