系統韌性研究(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.pswp.cn/news/215964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215964.shtml
英文地址,請注明出處:http://en.pswp.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客戶端連接的服務端數據庫,所以兩個都不能少,而且版本必須…

【數組】-Lc34-在排序數組中查找元素的第一個和最后一個位置(二分查找 + 兩邊擴展)

寫在前面 最近想復習一下數據結構與算法相關的內容,找一些題來做一做。如有更好思路,歡迎指正。 目錄 寫在前面一、場景描述二、具體步驟1.環境說明2.代碼 寫在后面 一、場景描述 給定一個按照升序排列的整數數組 nums,和一個目標值 target。…

大數據講課筆記1.4 進程管理

文章目錄 零、學習目標一、導入新課二、新課講解(一)進程概述1、基本概念2、三維度看待進程3、引入多道編程模型(1)CPU利用率與進程數關系(2)從三個視角看多進程 4、進程的產生和消亡(1&#xf…

5V低壓步進電機驅動芯片GC6150,應用于攝像機,機器人 醫療器械等產品中。具有低噪聲、低振動的特點

GC6150是雙通道5V低壓步進電機驅動器,具有低噪聲、低振動的特點,特別適用于相機變焦對焦系統、萬向架、搖頭機等精度、低噪聲STM控制系統,該芯片為每個通道集成了一個256微步的驅動器。通過SPI & T2C接口,客戶可以方使地調整驅…

Python+Appium自動化測試之元素等待方法與重新封裝元素定位方法

在appium自動化測試腳本運行的過程中,因為網絡不穩定、測試機或模擬器卡頓等原因,有時候會出現頁面元素加載超時元素定位失敗的情況,但實際這又不是bug,只是元素加載較慢,這個時候我們就會使用元素等待的方法來避免這種…

C++ c_str()用法

標準庫的string類提供了3個成員函數來從一個string得到c類型的字符數組:c_str()、data()、copy(p,n)。 c_str()是Borland封裝的String類中的一個函數,它返回當前字符串的首字符地址。換種說法,c_str()函數返回一個指向正規C字符串的常量指針(…

下降路徑最小和/最小路徑和(dp問題)

1.狀態表示 2.狀態轉移方程 3.初始化 4.填表 從上往下 5.返回值 dp表最后一行的最小值 ------------------------------------------------------------------------------------------------------------------------------- 1.狀態表示 2.狀態轉移方程 3.初始化 4.填表 上…

【CVPR 2022】解讀 Controllable Animation of Fluid Elements in Still Images:光流法視頻生成

Diffusion Models視頻生成-博客匯總 前言:用戶輸入箭頭,就能讓圖像動起來,這是經典的Animating任務。CVPR 2022中的一篇經典論文《Controllable Animation of Fluid Elements in Still Images》使用光流法做這種image-to-video任務,很多做法值得借鑒,這篇博客詳細這篇論文…

【教程】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協議雖然能夠解決環…

TypeScript中的函數注釋

一. 概覽 函數注釋主要分為顯示注釋、類型推斷、隱式的any&#xff0c;現在來詳細總結下 二. 顯示注釋 舉個例子 let str1: string hello,jacklet intArr: number[] [1,2,3] let strArr&#xff1a;Array<string> [1,2,3]function test(a: number,b: number): num…

記錄 | xftp遠程連接兩臺windows

1、打開openssh 設置 -> 應用 -> 可選功能 -> 添加功能 -> OpenSSH 客戶端&#xff0c;將 ssh 客戶端安裝將兩臺電腦的 ssh 開啟&#xff0c;cmd 中輸入 net start sshd2、配置 win10 賬號密碼 3、進行 xftp 連接

MATLAB安裝

親自驗證有效&#xff0c;多謝這位網友的分享&#xff1a; https://blog.csdn.net/xiajinbiaolove/article/details/88907232

租一臺服務器多少錢決定服務器的價格因素有哪些

租一臺服務器多少錢決定服務器的價格因素有哪些 大家好我是艾西&#xff0c;服務器這個名詞對于不從業網絡行業的人們看說肯定還是比較陌生的。在21世紀這個時代發展迅速的年代服務器在現實生活中是不可缺少的一環&#xff0c;平時大家上網瀏覽自己想要查詢的信息等都是需要服…

加減乘除簡單嗎?不,一點都不,利用位運算實現加減乘除(代碼中不含+ - * /)

文章目錄 &#x1f680;前言&#x1f680;異或運算以及與運算&#x1f680;加法的實現&#x1f680;減法的實現&#x1f680;乘法的實現&#x1f680;除法的實現 &#x1f680;前言 這也是阿輝開的新專欄&#xff0c;知識將會很零散不成體系&#xff0c;不過絕對干貨滿滿&…