這是一本從架構、開發(fā)、測試、運維全流程講解如何進行軟件可靠性工程建設的著作,它將幫助讀者構建針對軟件可靠性工程的完整的知識體系、工程體系和理論體系。
本書作者是虎牙科技的SRE架構師,他基于20余年的架構、研發(fā)和運維經(jīng)驗,用4年時間反復打磨,代表中國的工程師總結了中國互聯(lián)網(wǎng)企業(yè)的SRE方法和經(jīng)驗。本書得到了中國SRE奠基人、虎牙科技CEO以及華為、騰訊、阿里、B站、亞馬遜等企業(yè)的10余位技術專家高度評價并一致推薦。
本書參考傳統(tǒng)可靠性工程及軟件可靠性工程體系,把傳統(tǒng)可靠性工程中的六性(可靠性、維修性、測試性、保障性、安全性、環(huán)境適應性)轉化為互聯(lián)網(wǎng)軟件可靠性工程的6種能力(可靠性設計能力、觀測能力、修復能力、保障能力、反脆弱能力、管理能力)。每一項能力都包括:互聯(lián)網(wǎng)SRE體系中的概念、能力的設計、能力建設的原則與方法、能力的度量與改進,以及相應的實踐案例。通過這6種能力把可靠性相關的工作組織起來,6種能力對應6個工作方向,不僅清晰地描繪出互聯(lián)網(wǎng)軟件可靠性工程體系的全貌,而且詳細闡述了每一種能力的獲得方法。
本書基于傳統(tǒng)可靠性和軟件可靠性的研究成果,借鑒和應用它們的成熟理論和工程方法,結合互聯(lián)網(wǎng)軟件的實際情況并加以融合和改進,提出了一套符合互聯(lián)網(wǎng)時代的軟件可靠性工程方法。
此外,本書還介紹了可靠性管理能力,對互聯(lián)網(wǎng)軟件開發(fā)團隊、運維團隊的技術領導者以及希望轉型為可靠性工程師的傳統(tǒng)運維人員、開發(fā)人員應該都有一定參考價值。
適讀人群 :*互聯(lián)網(wǎng)行業(yè)運維工程師、研發(fā)工程師、架構師 *關注軟件系統(tǒng)可靠性的管理者 *關注軟件可靠性的研究者、計算機專業(yè)師生等
(1)作者背景資深:就職于虎牙直播,歷任項目研發(fā)負責人、SRE負責人、架構師,虎牙事故管理委員會委員、基礎保障部架構師委員會委員。
(2)作者經(jīng)驗豐富:擁有20年軟件開發(fā)、架構、運維、SRE經(jīng)驗,為虎牙基于微服務架構的直播業(yè)務、音視頻業(yè)務、海外直播業(yè)務建立了穩(wěn)定的保障體系。
(3)總結中國SRE實踐:作者立足于本土SRE實踐經(jīng)驗,歷時4年精心打磨,幫助讀者構建針對SRE的完整的知識體系、工程體系、理論體系。
(4)全流程講解SRE:從架構、開發(fā)、測試、運維全流程講解如何進行軟件可靠性工程建設,總結了要符合時代要求的SRE方法論體系。
(5)建設SRE六種能力:詳解SRE的6種能力(可靠性設計能力、觀測能力、修復能力、保障能力、反脆弱能力、管理能力)的概念、設計、建設原則與方法、度量與改進。
(6)10余行業(yè)專家推薦:中國SRE奠基人、虎牙科技CEO以及華為、騰訊、阿里、B站、亞馬遜等企業(yè)的10余位技術專家高度評價。
【為何寫作本書】
互聯(lián)網(wǎng)已經(jīng)成為社會運行的基礎設施,支撐起人們的衣食住行與日常工作生活;ヂ(lián)網(wǎng)也已深入生產(chǎn)端,如工廠、碼頭、礦山等都離不開軟件管理和自動化控制;ヂ(lián)網(wǎng)平臺服務如此重要,一旦發(fā)生故障,會造成巨大影響。軟件故障輕則影響用戶體驗和導致生活不便,重則可能造成巨大的經(jīng)濟損失,如證券交易平臺故障導致無法進行交易,電商平臺故障造成數(shù)億元的經(jīng)濟損失,航空系統(tǒng)故障導致服務關閉,公有云故障造成眾多公司的業(yè)務無法正常開展等。
如何保證互聯(lián)網(wǎng)平臺服務的可靠性和穩(wěn)定性成為整個行業(yè)面臨的難題。谷歌提出的SRE(網(wǎng)站可靠性,本意是軟件可靠性工程)方法被業(yè)界奉為解決這一難題的經(jīng)典,其他各種概念也層出不窮,如混沌工程、智能運維、可觀測性等。但很多新人,甚至資深工程師、管理者在實際工作中仍很迷茫。我認為一個重要原因是當前互聯(lián)網(wǎng)軟件可靠性沒有完整的知識體系、工程體系和理論體系。不完整的知識體系讓新人甚至工作多年的工程師缺乏全面認識,以至于在做可靠性工作時摸不著頭緒;不完整的工程體系讓技術團隊很難進行統(tǒng)一規(guī)劃,只能參考業(yè)界熱門概念或者最佳實踐;不完整的理論體系使得整個行業(yè)靠大廠實踐摸索,小廠模仿大廠,工程師靠踩坑積累經(jīng)驗,導致行業(yè)的整體工程能力提升緩慢,缺少對問題本質和規(guī)律的研究。
本書嘗試系統(tǒng)性地討論如何建立互聯(lián)網(wǎng)軟件可靠性工程體系。首先,本書參考傳統(tǒng)可靠性工程及軟件可靠性工程體系,把傳統(tǒng)可靠性工程中的六性(可靠性、維修性、測試性、保障性、安全性、環(huán)境適應性)轉化為互聯(lián)網(wǎng)軟件可靠性工程中的六種能力(可靠性設計能力、觀測能力、修復能力、保障能力、反脆弱能力、管理能力)。然后,本書通過這六種能力把可靠性相關的工作組織起來,比較清晰地描繪出互聯(lián)網(wǎng)軟件可靠性工程的體系全貌,并將六種能力對應到六個工作方向上。最后,本書深入探討了各種能力如何建設、如何度量、如何改進等。本書也較為系統(tǒng)地總結了互聯(lián)網(wǎng)軟件可靠性工程的發(fā)展過程,參考了可靠性工程方法來討論當前行業(yè)面臨的突出問題,初步分析、總結了各種故障的規(guī)律,并提出了可靠性是和故障作斗爭的觀點。
【本書主要特點】
本書具有以下幾個特點。
1)整體性。本書較完整地介紹了互聯(lián)網(wǎng)軟件可靠性工程體系,并結合互聯(lián)網(wǎng)平臺軟件的技術特點、業(yè)務特點,把互聯(lián)網(wǎng)SRE相關工作總結為六種能力,幫助工程師快速理解SRE體系全貌。
2)重視度量。書中對各種能力都進行了定性與定量的評估。度量才能真正了解現(xiàn)狀,才能推動改進,才能見到改進的效果。
3)從原理出發(fā)。本書較為全面地總結了互聯(lián)網(wǎng)平臺軟件的故障特點和故障規(guī)律。研究規(guī)律是我們學習SRE相關工作的必經(jīng)之路。通過研究規(guī)律,我們不僅可以積累經(jīng)驗,而且能更深刻地了解故障的本質。
本書在寫作時引用了大量虎牙直播的實踐案例,這些案例對一些中小型平臺建設應該有一定的參考價值。
【本書讀者對象】
*本書是一本涉及互聯(lián)網(wǎng)軟件開發(fā)、架構設計、運維等全流程可靠性建設的書,適合的讀者主要分為下面幾類:
*互聯(lián)網(wǎng)行業(yè)運維工程師、研發(fā)工程師、架構師
*關注軟件系統(tǒng)可靠性的管理者
*關注軟件可靠性的研究者、計算機專業(yè)師生等
【本書主要內容】
本書一共7章。
第1章介紹互聯(lián)網(wǎng)軟件可靠性基礎知識,講述物理設備可靠性工程和傳統(tǒng)軟件可靠性工程的發(fā)展過程、基本理論,引出互聯(lián)網(wǎng)軟件可靠性的概念、問題,希望能讓讀者了解SRE的由來、發(fā)展,從更廣闊的視角去學習、研究、認識互聯(lián)網(wǎng)的軟件可靠性工程體系。
第2章提出了互聯(lián)網(wǎng)軟件可靠性工程的基本框架,分別介紹了SRE的六種能力(對應傳統(tǒng)可靠性工程的六性),然后重點介紹了互聯(lián)網(wǎng)軟件可靠性的度量方法,以評估當前的能力現(xiàn)狀及不足。
第3章介紹互聯(lián)網(wǎng)軟件可靠性設計與分析方法,從可靠性角度討論架構設計的原則,分析可靠性設計的相關因素和故障模式,并詳細介紹了互聯(lián)網(wǎng)軟件系統(tǒng)的可靠性架構實踐,包括業(yè)務架構、應用架構、系統(tǒng)架構、部署架構、基礎設施架構等的可靠性設計與實踐。
第4章介紹了可靠性觀測能力建設與實踐,較為全面地討論了互聯(lián)網(wǎng)軟件觀測能力的相關話題,總結了監(jiān)控技術的發(fā)展,并結合大量實踐場景介紹了互聯(lián)網(wǎng)軟件觀測能力。
第5章介紹了故障修復能力建設與實踐,以及可靠性工作中的綜合保障能力建設與實踐。
第6章介紹了可靠性試驗與反脆弱能力建設與實踐,這是對互聯(lián)網(wǎng)混沌工程的再思考。
第7章介紹了可靠性管理能力,對互聯(lián)網(wǎng)軟件開發(fā)團隊、運維團隊的技術領導者,以及希望轉型為可靠性工程師的傳統(tǒng)運維人員、開發(fā)人員有一定參考價值。
張觀石
資深運維專家和架構師,擁有20余年軟件開發(fā)、架構、運維、SRE經(jīng)驗。目前就職于虎牙直播,歷任項目研發(fā)負責人、SRE負責人、架構師,虎牙事故管理委員會委員、基礎保障部架構師委員會委員。
為虎牙基于微服務架構的直播業(yè)務、音視頻業(yè)務、海外直播業(yè)務建立了穩(wěn)定的保障體系,多次擔任虎牙英雄聯(lián)盟全球總決賽直播穩(wěn)定性保障負責人。在混合多云架構、可觀測性、預案、變更管控、AIOps等SRE領域有深入研究和豐富經(jīng)驗。
同時,他也是中國信通院分布式系統(tǒng)穩(wěn)定性實驗室高級技術專家,參與編寫了《信息系統(tǒng)穩(wěn)定性保障能力建設指南》!哆\維前線》一書的聯(lián)合作者。多次參與GOPS、MSUP、GDevops技術大會分享。
第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)服務可靠性的
迫切性和重要性 3
1.1.3 研究軟件可靠性工程是未來更
復雜的軟件產(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 相關名詞介紹 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 本章小結 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 設計與實現(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 修復故障 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 本章小結 60
第3章 互聯(lián)網(wǎng)軟件可靠性設計與
分析 61
3.1 為什么要進行可靠性設計 61
3.1.1 什么是可靠性設計 61
3.1.2 可靠性是設計出來的 62
3.2 可靠性設計原則與通用方法 64
3.2.1 可靠性設計的原則 64
3.2.2 可靠性設計的4種方法 65
3.3 軟件可靠性架構模型 68
3.4 可靠性分析與架構風險 72
3.5 可靠性分配 74
3.5.1 可靠性分配的目的 74
3.5.2 可靠性分配的原則 75
3.5.3 可靠性分配的方法 75
3.6 架構分層設計及其可靠性方法 76
3.6.1 可靠性視角的分層架構 77
3.6.2 業(yè)務架構的可靠性設計 78
3.6.3 應用架構的可靠性設計 78
3.6.4 系統(tǒng)架構的可靠性設計 85
3.6.5 部署架構的可靠性設計 92
3.6.6 基礎設施架構的可靠性設計 97
3.6.7 可靠性相關能力的設計 99
3.7 架構可靠性評審 99
3.7.1 評審目的 99
3.7.2 評審過程 100
3.7.3 評審方法 101
3.8 可靠性預計 102
3.9 本章小結 103
第4章 可靠性觀測能力建設與
實踐 104
4.1 建設觀測能力的目的 104
4.2 排查、監(jiān)控、觀測技術的發(fā)展 107
4.2.1 登錄服務器通過系統(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è)務可靠性感知 119
4.3.2 影響范圍及原因定界定位 121
4.3.3 幫助理解復雜系統(tǒng)結構并
自動建模 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 觀測能力設計 141
4.4.1 設計原則 141
4.4.2 設計方法 143
4.5 觀測能力要求與度量 148
4.5.1 定性要求與分析 148
4.5.2 定量要求與分析 150
4.6 觀測能力建設實踐 154
4.7 本章小結 157
第5章 故障修復、綜合保障能力建設與實踐 158
5.1 軟件故障修復能力概述 158
5.1.1 什么是軟件故障修復能力 158
5.1.2 修復能力是現(xiàn)代軟件系統(tǒng)的
重要能力 159
5.1.3 研究故障規(guī)律是修復能力的
基礎 159
5.2 軟件故障修復能力設計與建設 160
5.2.1 設計原則 160
5.2.2 預案平臺的設計 163
5.2.3 變更型故障快速修復 167
5.2.4 災難型故障快速修復 171
5.2.5 容量型故障快速修復 175
5.2.6 應急協(xié)同 177
5.3 運維保障能力 184
5.4 修復能力的度量和要求 188
5.4.1 定性要求 188
5.4.2 定量要求與評估 189
5.5 修復能力及保障能力建設實踐 193
5.5.1 虎牙音視頻修復能力實踐 193
5.5.2 預案平臺建設實踐 194
5.5.3 虎牙帶寬資源保障能力
實踐 196
5.6 本章小結 196
第6章 可靠性試驗與反脆弱能力
建設與實踐 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)品、人的關系 201
6.2.2 脆弱性因素分析 202
6.3 反脆弱能力建設與分析 212
6.3.1 應對脆弱性的思路 213
6.3.2 反脆弱能力建設原則 213
6.3.3 環(huán)境脆弱性的可靠性試驗:
混沌工程 214
6.3.4 軟件系統(tǒng)自身的可靠性試驗:
故障注入 218
6.3.5 人為因素反脆弱設計:
故障演練 221
6.3.6 變更型故障反脆弱設計:
變更管控 222
6.4 可靠性試驗與反脆弱能力的
要求 223
6.4.1 定性要求 223
6.4.2 定量要求 226
6.5 實踐案例 227
6.6 本章小結 230
第7章 可靠性管理能力 231
7.1 可靠性管理工作概述 231
7.2 軟件可靠性工作規(guī)劃及目標
管理 235
7.3 故障治理 237
7.3.1 故障復盤 238
7.3.2 故障評審定級 243
7.3.3 定期回顧可靠性 247
7.4 人員與團隊管理 248
7.4.1 可靠性工程師團隊 248
7.4.2 團隊轉型 250
7.5 以SRE方式運維業(yè)務 254
7.5.1 以SRE方式接手現(xiàn)有業(yè)務 255
7.5.2 接手新業(yè)務 256
7.6 本章小結 257