系统韧性研究(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 否 …...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...