高性能之道 : SRE 視角下的運維架構實踐

王力等

  • 出版商: 電子工業
  • 出版日期: 2023-06-01
  • 定價: $708
  • 售價: 8.5$602
  • 語言: 簡體中文
  • 頁數: 384
  • 裝訂: 平裝
  • ISBN: 7121454580
  • ISBN-13: 9787121454585
  • 相關分類: DevOps雲端運算
  • 立即出貨

買這商品的人也買了...

相關主題

商品描述

本書從實踐出發,包括了作者參與並主導的3家電商互聯網公司架構從0到1的構建經歷,
從多個角度講解穩定、性能、效率、成本四大職責落地經驗,
並結合Mikey金字塔進行了部分創新,很多內容都可以直接復用於實際工作。
本書分為7篇,分別是開端篇、監控篇、故障篇、容量篇、全局視角篇、性能篇和擴展篇。
本書適合互聯網行業內的運維人員、SRE和DevOps工程師、架構師、技術團隊負責人及關注用戶體驗的相關閱讀,
也適合掌握了一定的SRE方法論但在實踐中無從下手的讀者閱讀。

目錄大綱

目錄
開端篇弱化邊界感
1章引言3
1.1 運維架構和SRE 3
1.2 理解業務,技術為業務服務5
1.3 不設邊界6
1.4 SRE金字塔6
1.5 總結7
2章重視測試環境和預發布環境8
2.1 提效和維穩的道門檻——測試環境9
2.1.1 低級錯誤9
2.1.2 提效分析10
2.2 “守門員”——預發布環境11
2.2.1 低級錯誤11
2.2.2 提效分析12
2.3 兩大環境問題根本原因溯源12
2.4 微拍堂測試環境治理思路介紹13
2.5 總結17
監控篇底層邏輯的藝術
3章淺談監控系統設計21
3.1 梳理監控體系21
3.2 梳理監控指標22
3.3 變更監控25
3.4 準實時系統監控25
3.5 短時進程追踪工具27
3.6 全鏈路監控27
3.7 商業監控平台的選用建議28
3.8 監控方式:白盒監控與黑盒監控29
3.9 從監控數據中總結規律30
3.10 黃金指標30
3.11 總結31
4章云原生可觀測性開源工具——Kindling 32
4.1 行業現狀32
4.2 Kindling解決方案——關聯內核可觀測性數據的Trace 34
4.3 Kindling探針的架構設計理念37
4.4 Kindling探針架構38
4.4.1 內核態程序:drivers 38
4.4.2 用戶態C/C++程序:kindling-probe 38
4.4.3 用戶態Go程序:kindling-collector 39
4.4.4 程序間通信方式40
4.5 在線Demo介紹41
4.6 案例分享42
4.6.1 安裝43
4.6.2 功能介紹44
4.6.3 穩定性價值47
4.7 總結48
5章高階實戰——打造可持續維護的閉環流程49
5.1 案例:動態觀測SQL質量流程設計50
5.1.1 分析規範難以落地的原因50
5.1.2 監督與管控流程設計51
5.1.3 通知和統計57
5.2 案例:WebP格式圖片的規範和落地實踐57
5.2.1 規範無法持續推廣57
5.2.2 成本和用戶體驗上的雙贏58
5.2.3 計劃實施60
5.2.4 管控機制60
5.2.5 採集數據信息和數據加工處理60
5.2.6 巡檢平台之規範化監督61
5.3 案例:管道通信規範化實踐62
5.3.1 我們每天都在使用管道62
5.3.2 管道示例場景及性能說明64
5.3.3 如何規範管道使用場景66
5.4 標準和規範治理平台67
5.4.1 現狀68
5.4.2 設計思路68
5.5 總結72
6章挖掘Nginx的監控價值73
6.1 URI指紋服務設計73
6.2 Nginx日誌分析指南76
6.2.1 參數白名單76
6.2.2 URI的響應時間和HTTP狀態監控77
6.2.3 URI響應字節數波動分析77
6.2.4 查詢URL請求的項目79
6.2.5 注意HTTPS的透傳80
6.2.6 利用Nginx完成動態全鏈路比例調整81
6.3 總結82
故障篇故障的生命週期
7章事前治理的方法論85
7.1 從故障中總結經驗85
7.2 從系統資源層面和日誌中巡檢異常86
7.3 從標準和規範中尋找閉環之路86
7.4 從業務中挖掘基礎服務的使用問題87
7.5 技術風險防控運營成本87
7.6 總結88
8章變更管控設計思路89
8.1 變更管控89
8.1.1 變更對象89
8.1.2 變更發布90
8.1.3 變更可灰度91
8.1.4 變更可回滾92
8.1.5 變更可監控92
8.1.6 配置項變更92
8.1.7 變更管控思路92
8.2 JumpServer使用的藝術及工單交互96
8.3 變更三板斧:運維團隊的可監控、可灰度、可回滾實踐98
8.3.1 案例:雲服務器資源伸縮穩定性98
8.3.2 案例:CDN OpenResty的變更策略102
8.4 總結106
9章輪值的設計思路107
9.1 值班模式探究108
9.1.1 讓開發人員參與其中108
9.1.2 制定KPI 109
9.1.3 值班人員的邊界探討110
9.2 值班機器人111
9.3 提升值班價值——SRE需求池設計112
9.3.1 結合日常巡檢與非值班時間112
9.3.2 在煩瑣的工作中收集需求112
9.4 總結113
10章故障演練與應急預案114
10.1 故障演練緣由114
10.1.1 更好地面對系統規模增長帶來的複雜性115
10.1.2 提升故障的排查速度115
10.1.3 驗證應急預案的正確性115
10.1.4 驗證基礎設施的穩定性116
10.1.5 驗證監控感知能力116
10.1.6 驗證應急流程的順暢度116
10.2 故障演練流程116
10.2.1 故障演練場景關鍵要素116
10.2.2 故障演練預期117
10.3 應急預案119
10.3.1 應急場景標準化120
10.3.2 梳理應急預案清單120
10.4 總結121
11章應急響應流程實踐122
11.1 收攏故障上報來源122
11.1.1 從技術體系內部發現122
11.1.2 從技術體系外部發現123
11.2 建立應急小組123
11.2.1 人多力量弱123
11.2.2 穩定性接口人和崗位權限123
11.2.3 完善客訴標準化術語124
11.3 故障噪點治理124
11.3.1 報警治理124
11.3.2 設計外部反饋閾值125
11.3.3 收集三方抖動事件125
11.4 控制應急節奏126
11.4.1 舍小保大126
11.4.2 “優先止血”,後續定位根本原因127
11.4.3 及時同步信息,減少信息差127
11.5 應急“止血”的常見作127
11.5.1 代碼回滾127
11.5.2 重啟128
11.5.3 時序監控下的限流、熔斷、擴容129
11.5.4 業務降級130
11.5.5 阻斷慢查詢131
11.5.6 網絡與運營商131
11.5.7 重識監控132
11.6 總結132
12章靜態容災降級系統133
12.1 荊棘之路134
12.2 設計之路136
12.3 架構流程圖138
12.3.1 反向代理系統138
12.3.2 日誌分析系統138
12.3.3 後台系統——利用URI指紋服務138
12.3.4 爬蟲系統139
12.3.5 容災的緩存系統140
12.3.6 基於時間的版本用途140
12.3.7 異地容災141
12.4 核心代碼解說142
12.4.1 Ngx_Lua應用142
12.4.2 爬蟲和日誌分析系統的關係143
12.4.3 完全容災和部分容災功能144
12.5 靜態容災的智能關閉方案145
12.5.1 從日誌分析系統複製請求145
12.5.2 利用GoReplay複製流量145
12.5.3 利用Nginx的mirror鏡像功能146
12.5.4 灰度驗證容災系統緩存——閉環設計147
12.6 替換爬蟲的新思路148
12.7 總結148
13章基於OpenResty的動態限流設計思路150
13.1 常見反向代理限流方案缺點分析150
13.2 動態限流設計思路151
13.3 多維度限流154
13.4 智能感知響應能力動態控速設計方案157
13.5 屏蔽慢請求帶來的服務阻塞159
13.6 總結160


14章故障复盤161
14.1 复盤前161
14.2 复盤中161
14.3 复盤後164
14.4 自省164
14.5 跨部門分享165
14.6 故障庫165
14.7 總結165
容量篇性能與成本間的平衡
15章成本優化169
15.1 成本優化事前準備169
15.1.1 目標的製定和價值體現170
15.1.2 IT成本與人力成本的權衡170
15.1.3 提升對系統的理解171
15.1.4 評估優化前後的數據統計及業務影響171
15.1.5 從用戶體驗看待成本優化173
15.1.6 梳理業務和資源的關係173
15.2 公有云基礎資源優化實踐174
15.2.1 成本管理白皮書174
15.2.2 合理化資源使用率177
15.2.3 自建產品和雲產品的使用場景優化178
15.2.4 基於業務場景的成本控制179
15.3 總結180
16章智能伸縮平台181
16.1 彈性伸縮平台關鍵路徑盤點181
16.2 基礎設施建設182
16.2.1 基於Pod的HPA傳統模式182
16.2.2 基於Cluster-Autoscaler的Node伸縮184
16.3 基於業務場景的實戰189
16.3.1 定時伸縮189
16.3.2 基於預測的彈性伸縮191
16.4 風險控制體系199
16.4.1 動態限流觸發規則199
16.4.2 擴容節點失敗和業務降級200
16.5 總結200
17章容量規劃201
17.1 容量規劃現狀201
17.2 容量規劃建設思路202
17.2.1 建設核心202
17.2.2 建設思路203
17.3 應用系統容量規劃說明204
17.4 基於巡檢模式的容量評估流程205
17.4.1 對流量來源的梳理205
17.4.2 對容量對象的梳理206
17.4.3 收集日常關鍵性數據207
17.5 對容量規劃關注點的梳理210
17.5.1 壓力測試210
17.5.2 業務放量212
17.5.3 大促活動213
17.5.4 業務214
17.5.5 關注運營活動計劃214
17.5.6 尖刺限流215
17.6 總結215
18章編程能力216
18.1 養成寫偽代碼的習慣216
18.2 養成管理代碼的習慣217
18.3 編程能力分級218
18.4 編程能力更深層的價值探討219
18.4.1 如何看待PHP短連接問題219
18.4.2 理解Redis和Memcached在業務場景上的區別220
18.4.3 進程、線程、協程在Linux系統中的表現221
18.4.4 探究阻塞和非阻塞、異步和同步在系統中的表現223
18.4.5 共享內存224
18.4.6 嘗試一些導致進程崩潰的作224
18.4.7 學習系統的業務架構225
18.4.8 給自己的代碼做閉環實踐226
18.4.9 參與業務開發日常226
18.5 熟悉編程語言特性226
18.6 通過系統分析倒推應用配置問題227
18.6.1 通過access函數發現PHP性能問題227
18.6.2 Java連接池失效228
18.7 總結229
全局視角篇運維破圈
19章開啟測試視角233
19.1 測試人員的職責邊界233
19.2 壓力測試234
19.2.1 壓測黑名單思維235
19.2.2 壓測利器Wrk 235
19.2.3 流量鏡像工具GoReplay 235
19.3 自動化測試監控平台設計237
19.3.1 “牽一發而動全身”的迭代238
19.3.2 OpenDiffy介紹238
19.3.3 變更管控的支撐系統OpenDiffy+GoReplay 239
19.4 破壞性測試探究239
19.5 從前端的體驗“找碴兒” 240
19.5.1 基於瀏覽器特性的服務優化240
19.5.2 從圖片加載中尋找優化方法241
19.5.3 數據埋點的發送頻率242
19.5.4 域名的使用限制243
19.5.5 請求重複性243
19.5.6 PageSpeed Insights分析頁面的加載243
19.5.7 定期的內耗分析245
19.6 總結245

20章開啟用戶視角246
20.1 內外兼顧246
20.1.1 內部用戶247
20.1.2 外部用戶248
20.2 建立反饋機制249
20.2.1 優化客服反饋機制249
20.2.2 與客服合作的案例分享249
20.2.3 獎勵機制250
20.2.4 關注輿情250
20.3 產品體驗——谷歌SRE的高階思維251
20.3.1 不僅僅是體驗251
20.3.2 交互煩瑣252
20.3.3 無人問津252
20.3.4 ROI 252
20.4 防禦體系的“誤傷”指南253
20.4.1 WAF“誤傷” 253
20.4.2 內部風控“誤傷” 254
20.5 關注客戶端環境254
20.5.1 客戶端機型配置254
20.5.2 網絡255
20.6 總結255
21章開啟前端和App開發人員視角256
21.1 概述256
21.2 為什麼要解決性能問題257
21.3 緩存257
21.3.1 強緩存257
21.3.2 協商緩存259
21.4 網絡請求261
21.4.1 HTTP/2.0 261
21.4.2 DNS預解析262
21.4.3 預先建立連接262
21.4.4 服務器應該避免過多重定向263
21.5 客戶端計算263
21.6 預加載265
21.7 梳理技術風險265
21.7.1 請求阻塞式串行加載266
21.7.2 埋點發送過於頻繁266
21.7.3 弱網下的資源加載降級266
21.7.4 撥測266
21.8 總結267
22章DNS應用場景實踐268
22.1 利用DNS完成故障轉移268
22.2 使用HTTPDNS提升訪問穩定性271
22.3 提升測試、A/B測試等環境的切換效率273
22.4 域名反向解析用途實踐273
22.5 內部DNS系統高可用實踐274
22.5.1 兩次DNS故障275
22.5.2 問題和思考276
22.5.3 改進措施278
22.5.4 配置及驗證279
22.5.5 監控283
22.6 總結284
性能篇SRE進階之路
23章高並發網關價值探究287
23.1 通用功能介紹287
23.2 網關中的聚合模式288
23.2.1 Lura啟示錄289
23.2.2 APISIX中的batch-requests插件289
23.2.3 從GraphQL發現的技術實踐思路291
23.3 兼顧緩存的網關設計思路293
23.3.1 APISIX的proxy-cache插件293
23.3.2 利用聚合拼接緩存資源293
23.3.3 鑑權和緩存剝離294
23.4 總結295
24章高性能Varnish緩存系統296
24.1 HTTP緩存對後端服務的價值分析296
24.2 CDN緩存和Varnish緩存的共存模式298
24.3 安裝Varnish和所需模塊299
24.4 配置文件概覽300
24.5 穩定性建設所依賴的功能300
24.5.1 神聖模式300
24.5.2 寬限模式——異步緩存更新302
24.5.3 更安穩的軟清除303
24.6 實踐304
24.6.1 動態緩存時間配置304
24.6.2 熱Key及系統的緩存實踐305
24.6.3 後端服務故障轉移306
24.6.4 高並發下Varnish啟動參數優化307
24.6.5 Varnish配置模板優化實踐307
24.6.6 測試環境緩存系統的干擾事件309
24.7 總結309
25章SRE漏斗優化法則310
25.1 SRE性能優化之漏斗優化法則311
25.2 漏斗優化法則的技術棧梳理312
25.2.1 減少訪問量312
25.2.2 減少返回的數據313
25.2.3 減少交互次數313
25.2.4 降低CPU、內存使用率314
25.2.5 提升資源利用率314
25.3 總結315
26章awesome性能分析工具316
26.1 站在巨人的肩膀上工作316
26.1.1 系統性能分析常見清單317
26.1.2 bcc-tools工具清單319
26.1.3 火焰圖320
26.2 Netdata 320
26.3 總結321
27章性能優化實踐錦集322
27.1 TIME_WAIT優化方案擴展322
27.2 利用Ngx_Lua縮短請求鏈路323
27.3 eBPF在Kubernetes上的應用325
27.3.1 kubectl-trace 325
27.3.2 使用前提325
27.3.3 使用優點325
27.3.4 使用場景326
27.3.5 安裝326
27.4 善用CDN 327
27.4.1 靜態加速327
27.4.2 動態加速328
27.4.3 緩存過期保護策略328
27.5 記一次中台服務優化實戰329
27.5.1 尋找優化目標330
27.5.2 抽絲剝繭——嘗試優化方案331
27.5.3 使用go pprof火焰圖發現端倪333
27.5.4 回顧复盤337
27.6 總結337
擴展篇在團隊間搭建橋樑
28章業務開發人員視角下的技術風險341
28.1 了解業務開發人員342
28.1.1 工作內容342
28.1.2 廢棄十年如一日343
28.1.3 重構並非易事343
28.1.4 發布前的檢查清單344
28.1.5 站在巨人的肩膀上編程344
28.1.6 拒偽需求345
28.2 大淘客之旅346
28.2.1 對話高層,達成共識346
28.2.2 對話業務線負責人347
28.2.3 重識目標,各個擊破347
28.2.4 技術氛圍和激勵政策348
28.2.5 “曲線救國”的技術路線348
28.3 總結351
29章SRE視角全篇總結352
29.1 齊心協力353
29.1.1 關鍵要素353
29.1.2 華山論劍353
29.2 競品分析—— 後1公里355
29.3 故障降級系統——來自監控的溝通藝術355
29.3.1 抽象業務形態355
29.3.2 抽象監控觸發條件357
29.3.3 收攏零散性的自愈任務357
29.4 重識CMDB價值357
29.5 總結358