【為何寫作本書】
互聯(lián)網(wǎng)已經(jīng)成為社會運行的基礎(chǔ)設(shè)施,支撐起人們的衣食住行與日常工作生活。互聯(lián)網(wǎng)也已深入生產(chǎn)端,如工廠、碼頭、礦山等都離不開軟件管理和自動化控制。互聯(lián)網(wǎng)平臺服務(wù)如此重要,一旦發(fā)生故障,會造成巨大影響。軟件故障輕則影響用戶體驗和導(dǎo)致生活不便,重則可能造成巨大的經(jīng)濟損失,如證券交易平臺故障導(dǎo)致無法進行交易,電商平臺故障造成數(shù)億元的經(jīng)濟損失,航空系統(tǒng)故障導(dǎo)致服務(wù)關(guān)閉,公有云故障造成眾多公司的業(yè)務(wù)無法正常開展等。
如何保證互聯(lián)網(wǎng)平臺服務(wù)的可靠性和穩(wěn)定性成為整個行業(yè)面臨的難題。谷歌提出的SRE(網(wǎng)站可靠性,本意是軟件可靠性工程)方法被業(yè)界奉為解決這一難題的經(jīng)典,其他各種概念也層出不窮,如混沌工程、智能運維、可觀測性等。但很多新人,甚至資深工程師、管理者在實際工作中仍很迷茫。我認為一個重要原因是當(dāng)前互聯(lián)網(wǎng)軟件可靠性沒有完整的知識體系、工程體系和理論體系。不完整的知識體系讓新人甚至工作多年的工程師缺乏全面認識,以至于在做可靠性工作時摸不著頭緒;不完整的工程體系讓技術(shù)團隊很難進行統(tǒng)一規(guī)劃,只能參考業(yè)界熱門概念或者最佳實踐;不完整的理論體系使得整個行業(yè)靠大廠實踐摸索,小廠模仿大廠,工程師靠踩坑積累經(jīng)驗,導(dǎo)致行業(yè)的整體工程能力提升緩慢,缺少對問題本質(zhì)和規(guī)律的研究。
本書嘗試系統(tǒng)性地討論如何建立互聯(lián)網(wǎng)軟件可靠性工程體系。首先,本書參考傳統(tǒng)可靠性工程及軟件可靠性工程體系,把傳統(tǒng)可靠性工程中的六性(可靠性、維修性、測試性、保障性、安全性、環(huán)境適應(yīng)性)轉(zhuǎn)化為互聯(lián)網(wǎng)軟件可靠性工程中的六種能力(可靠性設(shè)計能力、觀測能力、修復(fù)能力、保障能力、反脆弱能力、管理能力)。然后,本書通過這六種能力把可靠性相關(guān)的工作組織起來,比較清晰地描繪出互聯(lián)網(wǎng)軟件可靠性工程的體系全貌,并將六種能力對應(yīng)到六個工作方向上。最后,本書深入探討了各種能力如何建設(shè)、如何度量、如何改進等。本書也較為系統(tǒng)地總結(jié)了互聯(lián)網(wǎng)軟件可靠性工程的發(fā)展過程,參考了可靠性工程方法來討論當(dāng)前行業(yè)面臨的突出問題,初步分析、總結(jié)了各種故障的規(guī)律,并提出了可靠性是和故障作斗爭的觀點。
【本書主要特點】
本書具有以下幾個特點。
1)整體性。本書較完整地介紹了互聯(lián)網(wǎng)軟件可靠性工程體系,并結(jié)合互聯(lián)網(wǎng)平臺軟件的技術(shù)特點、業(yè)務(wù)特點,把互聯(lián)網(wǎng)SRE相關(guān)工作總結(jié)為六種能力,幫助工程師快速理解SRE體系全貌。
2)重視度量。書中對各種能力都進行了定性與定量的評估。度量才能真正了解現(xiàn)狀,才能推動改進,才能見到改進的效果。
3)從原理出發(fā)。本書較為全面地總結(jié)了互聯(lián)網(wǎng)平臺軟件的故障特點和故障規(guī)律。研究規(guī)律是我們學(xué)習(xí)SRE相關(guān)工作的必經(jīng)之路。通過研究規(guī)律,我們不僅可以積累經(jīng)驗,而且能更深刻地了解故障的本質(zhì)。
本書在寫作時引用了大量虎牙直播的實踐案例,這些案例對一些中小型平臺建設(shè)應(yīng)該有一定的參考價值。
【本書讀者對象】
*本書是一本涉及互聯(lián)網(wǎng)軟件開發(fā)、架構(gòu)設(shè)計、運維等全流程可靠性建設(shè)的書,適合的讀者主要分為下面幾類:
*互聯(lián)網(wǎng)行業(yè)運維工程師、研發(fā)工程師、架構(gòu)師
*關(guān)注軟件系統(tǒng)可靠性的管理者
*關(guān)注軟件可靠性的研究者、計算機專業(yè)師生等
【本書主要內(nèi)容】
本書一共7章。
第1章介紹互聯(lián)網(wǎng)軟件可靠性基礎(chǔ)知識,講述物理設(shè)備可靠性工程和傳統(tǒng)軟件可靠性工程的發(fā)展過程、基本理論,引出互聯(lián)網(wǎng)軟件可靠性的概念、問題,希望能讓讀者了解SRE的由來、發(fā)展,從更廣闊的視角去學(xué)習(xí)、研究、認識互聯(lián)網(wǎng)的軟件可靠性工程體系。
第2章提出了互聯(lián)網(wǎng)軟件可靠性工程的基本框架,分別介紹了SRE的六種能力(對應(yīng)傳統(tǒng)可靠性工程的六性),然后重點介紹了互聯(lián)網(wǎng)軟件可靠性的度量方法,以評估當(dāng)前的能力現(xiàn)狀及不足。
第3章介紹互聯(lián)網(wǎng)軟件可靠性設(shè)計與分析方法,從可靠性角度討論架構(gòu)設(shè)計的原則,分析可靠性設(shè)計的相關(guān)因素和故障模式,并詳細介紹了互聯(lián)網(wǎng)軟件系統(tǒng)的可靠性架構(gòu)實踐,包括業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、系統(tǒng)架構(gòu)、部署架構(gòu)、基礎(chǔ)設(shè)施架構(gòu)等的可靠性設(shè)計與實踐。
第4章介紹了可靠性觀測能力建設(shè)與實踐,較為全面地討論了互聯(lián)網(wǎng)軟件觀測能力的相關(guān)話題,總結(jié)了監(jiān)控技術(shù)的發(fā)展,并結(jié)合大量實踐場景介紹了互聯(lián)網(wǎng)軟件觀測能力。
第5章介紹了故障修復(fù)能力建設(shè)與實踐,以及可靠性工作中的綜合保障能力建設(shè)與實踐。
第6章介紹了可靠性試驗與反脆弱能力建設(shè)與實踐,這是對互聯(lián)網(wǎng)混沌工程的再思考。
第7章介紹了可靠性管理能力,對互聯(lián)網(wǎng)軟件開發(fā)團隊、運維團隊的技術(shù)領(lǐng)導(dǎo)者,以及希望轉(zhuǎn)型為可靠性工程師的傳統(tǒng)運維人員、開發(fā)人員有一定參考價值。
第1章 互聯(lián)網(wǎng)軟件可靠性概論 1
1.1 為什么要研究互聯(lián)網(wǎng)軟件可靠性
工程 1
1.1.1 大型互聯(lián)網(wǎng)企業(yè)的典型案例
回顧 1
1.1.2 研究互聯(lián)網(wǎng)服務(wù)可靠性的
迫切性和重要性 3
1.1.3 研究軟件可靠性工程是未來更
復(fù)雜的軟件產(chǎn)品發(fā)展的需要 3
1.2 什么是可靠性工程 3
1.2.1 可靠性與可靠性工程概述 4
1.2.2 可靠性工程發(fā)展的3個階段 4
1.2.3 傳統(tǒng)物理可靠性工程方法 6
1.3 軟件可靠性工程 9
1.3.1 軟件可靠性工程的概念 9
1.3.2 軟件可靠性工程發(fā)展的兩個
階段 10
1.4 互聯(lián)網(wǎng)軟件的可靠性 16
1.4.1 相關(guān)名詞介紹 16
1.4.2 互聯(lián)網(wǎng)軟件可靠性工程現(xiàn)狀及
挑戰(zhàn) 18
1.4.3 互聯(lián)網(wǎng)軟件可靠性工程方法
發(fā)展的3個階段 21
1.5 互聯(lián)網(wǎng)軟件可靠性工程的工作
思路 26
1.5.1 理解軟件可靠性的3個核心
問題 26
1.5.2 建立可靠性工程體系框架的
思路 30
1.6 本章小結(jié) 31
第2章 互聯(lián)網(wǎng)軟件可靠性工程及
可靠性度量 32
2.1 軟件生命周期的可靠性工作 32
2.1.1 互聯(lián)網(wǎng)軟件生命周期的可靠性
工作及原則 33
2.1.2 需求階段的可靠性工作 34
2.1.3 設(shè)計與實現(xiàn)階段的可靠性
工作 35
2.1.4 測試與驗證階段的可靠性
工作 37
2.1.5 部署與發(fā)布階段的可靠性
工作 38
2.1.6 持續(xù)運行階段的可靠性
工作 39
2.2 故障生命周期的可靠性工作 41
2.2.1 監(jiān)控故障 42
2.2.2 故障定界定位 42
2.2.3 修復(fù)故障 43
2.3 可靠性工程6種能力綜述 44
2.4 互聯(lián)網(wǎng)軟件可靠性度量與評價 45
2.4.1 可靠性度量介紹 45
2.4.2 可靠性度量和分析方法 47
2.4.3 軟件可靠性度量過程 54
2.4.4 如何制定可靠性目標 58
2.5 本章小結(jié) 60
第3章 互聯(lián)網(wǎng)軟件可靠性設(shè)計與
分析 61
3.1 為什么要進行可靠性設(shè)計 61
3.1.1 什么是可靠性設(shè)計 61
3.1.2 可靠性是設(shè)計出來的 62
3.2 可靠性設(shè)計原則與通用方法 64
3.2.1 可靠性設(shè)計的原則 64
3.2.2 可靠性設(shè)計的4種方法 65
3.3 軟件可靠性架構(gòu)模型 68
3.4 可靠性分析與架構(gòu)風(fēng)險 72
3.5 可靠性分配 74
3.5.1 可靠性分配的目的 74
3.5.2 可靠性分配的原則 75
3.5.3 可靠性分配的方法 75
3.6 架構(gòu)分層設(shè)計及其可靠性方法 76
3.6.1 可靠性視角的分層架構(gòu) 77
3.6.2 業(yè)務(wù)架構(gòu)的可靠性設(shè)計 78
3.6.3 應(yīng)用架構(gòu)的可靠性設(shè)計 78
3.6.4 系統(tǒng)架構(gòu)的可靠性設(shè)計 85
3.6.5 部署架構(gòu)的可靠性設(shè)計 92
3.6.6 基礎(chǔ)設(shè)施架構(gòu)的可靠性設(shè)計 97
3.6.7 可靠性相關(guān)能力的設(shè)計 99
3.7 架構(gòu)可靠性評審 99
3.7.1 評審目的 99
3.7.2 評審過程 100
3.7.3 評審方法 101
3.8 可靠性預(yù)計 102
3.9 本章小結(jié) 103
第4章 可靠性觀測能力建設(shè)與
實踐 104
4.1 建設(shè)觀測能力的目的 104
4.2 排查、監(jiān)控、觀測技術(shù)的發(fā)展 107
4.2.1 登錄服務(wù)器通過系統(tǒng)命令
排查問題 107
4.2.2 集中式監(jiān)控系統(tǒng)與日志系統(tǒng) 110
4.2.3 可觀測性 115
4.2.4 觀測能力與監(jiān)控 116
4.2.5 建立綜合的觀測能力 117
4.3 監(jiān)控觀測的感知場景與感知
方式 118
4.3.1 業(yè)務(wù)可靠性感知 119
4.3.2 影響范圍及原因定界定位 121
4.3.3 幫助理解復(fù)雜系統(tǒng)結(jié)構(gòu)并
自動建模 126
4.3.4 智能告警條件的數(shù)據(jù)感知 129
4.3.5 根因推薦與排查診斷、決策 131
4.3.6 容量感知與彈性 135
4.3.7 人的感知與決策能力 137
4.3.8 場景化的固化大盤 138
4.3.9 巡檢與非實時分析 140
4.4 觀測能力設(shè)計 141
4.4.1 設(shè)計原則 141
4.4.2 設(shè)計方法 143
4.5 觀測能力要求與度量 148
4.5.1 定性要求與分析 148
4.5.2 定量要求與分析 150
4.6 觀測能力建設(shè)實踐 154
4.7 本章小結(jié) 157
第5章 故障修復(fù)、綜合保障能力建設(shè)與實踐 158
5.1 軟件故障修復(fù)能力概述 158
5.1.1 什么是軟件故障修復(fù)能力 158
5.1.2 修復(fù)能力是現(xiàn)代軟件系統(tǒng)的
重要能力 159
5.1.3 研究故障規(guī)律是修復(fù)能力的
基礎(chǔ) 159
5.2 軟件故障修復(fù)能力設(shè)計與建設(shè) 160
5.2.1 設(shè)計原則 160
5.2.2 預(yù)案平臺的設(shè)計 163
5.2.3 變更型故障快速修復(fù) 167
5.2.4 災(zāi)難型故障快速修復(fù) 171
5.2.5 容量型故障快速修復(fù) 175
5.2.6 應(yīng)急協(xié)同 177
5.3 運維保障能力 184
5.4 修復(fù)能力的度量和要求 188
5.4.1 定性要求 188
5.4.2 定量要求與評估 189
5.5 修復(fù)能力及保障能力建設(shè)實踐 193
5.5.1 虎牙音視頻修復(fù)能力實踐 193
5.5.2 預(yù)案平臺建設(shè)實踐 194
5.5.3 虎牙帶寬資源保障能力
實踐 196
5.6 本章小結(jié) 196
第6章 可靠性試驗與反脆弱能力
建設(shè)與實踐 197
6.1 互聯(lián)網(wǎng)軟件可靠性試驗與反脆弱
能力概述 197
6.1.1 什么是可靠性試驗與反脆弱
能力 198
6.1.2 為什么要反脆弱 199
6.2 軟件系統(tǒng)的脆弱性因素分析 200
6.2.1 環(huán)境、產(chǎn)品、人的關(guān)系 201
6.2.2 脆弱性因素分析 202
6.3 反脆弱能力建設(shè)與分析 212
6.3.1 應(yīng)對脆弱性的思路 213
6.3.2 反脆弱能力建設(shè)原則 213
6.3.3 環(huán)境脆弱性的可靠性試驗:
混沌工程 214
6.3.4 軟件系統(tǒng)自身的可靠性試驗:
故障注入 218
6.3.5 人為因素反脆弱設(shè)計:
故障演練 221
6.3.6 變更型故障反脆弱設(shè)計:
變更管控 222
6.4 可靠性試驗與反脆弱能力的
要求 223
6.4.1 定性要求 223
6.4.2 定量要求 226
6.5 實踐案例 227
6.6 本章小結(jié) 230
第7章 可靠性管理能力 231
7.1 可靠性管理工作概述 231
7.2 軟件可靠性工作規(guī)劃及目標
管理 235
7.3 故障治理 237
7.3.1 故障復(fù)盤 238
7.3.2 故障評審定級 243
7.3.3 定期回顧可靠性 247
7.4 人員與團隊管理 248
7.4.1 可靠性工程師團隊 248
7.4.2 團隊轉(zhuǎn)型 250
7.5 以SRE方式運維業(yè)務(wù) 254
7.5.1 以SRE方式接手現(xiàn)有業(yè)務(wù) 255
7.5.2 接手新業(yè)務(wù) 256
7.6 本章小結(jié) 257