買這商品的人也買了...
-
$360$281 -
$653實現領域驅動設計 (Implementing Domain-Driven Design)
-
$534$507 -
$534$507 -
$828$787 -
$580$435 -
$1,000$790 -
$648$616 -
$780$616 -
$654$621 -
$580$435 -
$505分佈式系統架構與開發:技術原理與面試題解析
-
$680$537 -
$654$621 -
$654$621 -
$820$697 -
$774$735 -
$768$730 -
$474$450 -
$680$537 -
$600$468 -
$580$458 -
$580$458 -
$880$695 -
$680$530
相關主題
商品描述
這是一本從開發流程、技術棧、典型問題解決方案和開發規範等維度全面講解服務端開發的著作。
它衍生自作者在某著名互聯網科技公司內部講授的高口碑課程,
是作者近10年服務端開發經驗的總結,同時融合了業界在服務端開發方面的寶貴項目經驗和實踐智慧。
本書理論與實踐結合,擺脫編程語言、框架、中間件及傳統編程思想的束縛,
全景式、體系化地闡述了服務端開發,核心內容包括以下兩個部分。
第1部分:服務端開發的技術和方法
首先,介紹了服務端開發的職責、技術棧、核心流程和進階路徑;然後,從需求分析、抽象建模、系統設計、
數據設計和非功能性設計5個方面展開,結合案例深入講解了服務端開發的實操方法和重難點,
為讀者呈現出服務端開發的全景圖,幫助讀者快速、體系化地掌握服務端開發的相關知識和方法。
第2部分:服務端典型問題的解決方案
針對高並發、高性能、高可用、緩存、數據一致性、冪等、秒殺等服務端開發實踐中的典型問題,
給出了對應的解決方案和開發規範,同時還結合案例深入分析了不同方案的優缺點。
此外,還總結了接口設計、日誌打印、異常處理、代碼編寫、代碼註釋等落地層面的行業案例和規範。
目錄大綱
第一部分技術與方法
第1章走進服務端開發 2
1.1 服務端開發概述 2
1.1.1 服務端開發的定義 2
1.1.2 服務端開發的職責 4
1.2 服務端開發技術棧 5
1.2.1 編程語言5
1.2.2 開發工具 6
1.2.3 開發框架 8
1.2.4 數據庫與數據存儲 10
1.2.5 中間件 14
1.2.6 操作系統 16
1.2.7 應用部署 19
1.2.8 運維監控 22
1.3 服務端開發核心流程24
1.3.1 需求分析 24
1.3.2 抽象建模 26
1.3.3 系統設計 27
1.3.4 數據設計 30
1.3.5 非功能性設計 31
1.4 服務端開發進階路徑 33
1.4.1 構建能力模型33
1.4.2 專業知識體系化 34
1.4.3 掌握學習方法 35
1.4.4 技術與業務同行 36
1.4.5 樹立正確的觀念 37
第2章需求分析 39
2.1 需求分類 39
2.1.1 產品需求 40
2.1.2 技術需求 40
2.2 需求分析的流程 40
2.2.1 學習領域知識 41
2.2.2 明確業務目標 42
2.2.3 明確業務用例 43
2.2.4 梳理用例場景 44
2.2.5 構建業務模型 45
2.2.6確認業務規則47
2.2.7 確認需求 47
2.3 需求分析的常用方法 48
2.3.1 功能分析法 48
2.3.2 數據流分析法 51
2.3.3 面向對象分析法 55
2.4 需求分析的重點和難點 56
2.4. 1 統一語言56
2.4.2 識別問題 57
2.4.3 數據分析 58
2.4.4 細節陷阱 59
第3章抽象建模 61
3.1 抽象思維 61
3.1.1 軟件世界中的抽象 61
3.1.2 提升抽象思維的方法63
3.2 建模方法 65
3.2.1 問題空間和解決方案空間 65
3.2.2 什麼是領域模型 66
3.2.3 為什麼要建立領域模型 68
3.2.4 典型的建模方法 69
3.2.5 建模應遵循的3個原則 71
3.3 用例建模法知識儲備 73
3.3.1 建模基礎 73
3.3.2 什麼是用例 74
3.3.3 挖掘用例的5個步驟 75
3.3.4 繪製用例圖的6個要素78
3.4 用例建模法的4個實施步驟 80
3.4.1 提取模型 80
3.4.2 補充屬性 81
3.4.3 關係抽象 82
3.4.4 模型驗證 84
3.5 建模小結 85
第4章系統設計87
4.1 大話系統設計 87
4.1.1 戰術編程腐蝕系統 87
4.1.2 系統複雜化的3個特徵 88
4.1.3 系統複雜化的3個誘因 89
4.1.4 複雜化應對之道 90
4.2 總體架構 91
4.2 .1 什麼是架構91
4.2.2 架構推演 92
4.2.3 設計功能域 94
4.2.4 設計功能域協作 95
4.2.5 明確數據邊界 96
4.2.6 架構約束考量 97
4.2.7 邏輯架構粒度 98
4.2. 8 小結98
4.3 內部分層 99
4.3.1 什麼是分層 99
4.3.2 功能域內部分層 101
4.3.3 分層原則 103
4.3.4 小結 105
4.4 詳細設計 106
4.4.1 設計內容 106
4.4.2 設計原則 107
4.4.3 設計模式 109
4.4.4 小結110
4.5 一圖胜千言 111
4.5.1 繪圖工具 111
4.5.2 “4 1”模型 112
4.5.3 C4模型 112
第5章數據設計 117
5.1 數據設計概述 117
5.1.1 數據設計的步驟117
5.1.2 概念數據模型 118
5.1.3 邏輯數據模型 119
5.1.4 物理數據模型 120
5.2 數據庫的分類 120
5.2.1 關係型數據庫 121
5.2.2 NoSQL數據庫 122
5.2.3 NewSQL數據庫 123
5.3 常用數據庫及其適用場景124
5.3.1 常用的關係型數據庫 124
5.3.2 常用的NoSQL數據庫 127
5.3.3 存儲選型 130
5.4 存儲架構演進 131
5.4.1 單機模式 131
5.4.2 獨立主機 131
5.4.3 讀寫分離 132
5.4.4 垂直拆分 132
5.4.5 水平拆分 134
5.4.6 複合存儲方案 136
5.5 物理數據表設計137
5.5.1 表設計 137
5.5.2 字段設計 139
5.5.3 索引設計 140
5.5.4 語句設計 142
第6章非功能性設計 145
6.1 穩定性設計 145
6.1.1 什麼是穩定性 145
6.1.2 容量評估147
6.1.3 壓測摸底 151
6.1.4 風險識別 152
6.1.5 限流方案 152
6.1.6 降級方案 155
6.1.7 監控告警 157
6.2 預案設計 158
6.2.1 為什麼要做預案 158
6.2.2 如何做預案159
6.3 可測性設計 160
6.3.1 可操作 160
6.3.2 可灰度 161
6.3.3 可壓測 162
6.4 資金安全設計 162
6.4.1 資損風險分析 162
6.4.2 資損防控三部曲 163
6.4.3 一致性 164
6.4.4 冪等 166
6.4.5 數據核對 167
6.4.6 數據監控 169
6.4. 7 應急止損170
6.5 其他非功能性設計 170
6.5.1 兼容性 171
6.5.2 異常/補償 172
6.5.3 擴展性 174
第二部分解決方案
第7章高並發問題及解決方案 176
7.1 高並發概述176
7.1.1 並發 176
7.1.2 CPU密集型與I/O密集型177
7.1.3 高並發 178
7.2 資源擴展策略 179
7.2.1 垂直擴展 179
7.2.2 水平擴展 180
7.2.3 負載均衡 183
7.3數據緩存策略187
7.3.1 本地緩存 187
7.3.2 分佈式緩存 194
7.3.3 CDN 197
7.3.4 多級緩存 199
7.3.5 案例解析 200
7.4 流量削峰策略 202
7.4.1 消息隊列削峰 202
7.4.2 客戶端削峰 205
7.5 服務降級策略 206
7.5.1 降級範圍 207
7.5.2 降級的分類 207
7.6 限流策略 208
7.7 基本原則 208
第8章緩存的典型問題及解決方案 210
8.1 緩存預熱 210
8.1.1 應用啟動預熱策略 210
8.1.2 任務調度預熱策略 211
8.1.3 模擬請求預熱策略 215
8.1.4 小結 215
8.2 緩存淘汰216
8.2.1 LRU 216
8.2.2 LFU 217
8.2.3 ARC 217
8.2.4 FIFO 219
8.3 緩存更新 219
8.3.1 Cache Aside模式 220
8.3.2 Read/Write Through模式 222
8.3.3 Write Behind Caching模式 223
8.3 .4 小結224
8.4 緩存雪崩 224
8.4.1 緩存常駐策略 224
8.4.2 多級緩存策略 224
8.4.3 過期時間優化策略 225
8.4.4 加鎖重建策略 226
8.5 緩存穿透 227
8.5.1 緩存空值策略 227
8.5.2 布隆過濾器策略 227
8.5.3 布穀鳥過濾器策略231
8.6 緩存熱點 232
8.6.1 前置緩存策略 232
8.6.2 熱點散列策略 233
第9章緩存數據與數據庫數據一致性問題及解決方案 235
9.1 CAP 理論簡介 235
9.1.1 CAP定義解讀235
9.1.2 三個核心需求不可兼得 236
9.2 緩存數據與數據庫數據不一致的原因 238
9.2.1 操作時序導致數據不一致 238
9.2.2 操作失敗導致數據不一致 239
9.2.3 不可實現的絕對一致性241
9.3 延時雙刪 242
9.3.1 原理及實施步驟 242
9.3.2 如何確定延時 243
9.3.3 優點與不足 244
9.4 基於binlog異步刪除緩存 244
9.4.1 MySQL主從同步原理 244
9.4.2 感知數據庫變更 246
9.4.3 客戶端訂閱變更 246
9.4.4 消息隊列訂閱變更 247
9.4.5 刪除緩存 249
9.5 自動過期加失敗補償 250
第10章分佈式系統冪等問題及解決方案 251
10.1冪等概述251
10.1.1 冪等場景舉例 251
10.1.2 什麼是冪等 252
10.1.3 為什麼需要冪等 253
10.1.4 並發與冪等 254
10.2 冪等實現四部曲 255
10.2.1 副作用分析 255
10.2 .2 冪等號設計255
10.2.3 冪等數據持久化設計 258
10.2.4 冪等處理流程設計 259
10.3 典型冪等策略 261
10.3.1 唯一索引策略 261
10.3.2 悲觀鎖策略 263
10.3.3 分佈式鎖策略264
10.3.4 其他策略 266
10.4 冪等號生成 266
10.4.1 客戶端與服務端冪等 266
10.4.2 服務端系統間冪等 268
10.5 冪等注意事項 268
第11章秒殺系統關鍵問題及解決方案 271
11.1 主要技術難點 271
11.1.1 高並發 271
11.1.2 高可用 273
11.1.3 一致性 273
11.1.4 反作弊 274
11.2 電商平台的庫存運作全景圖 275
11.2.1 庫存模型275
11.2.2 扣減模式 276
11.2.3 扣減執行流程 276
11.2.4 庫存查詢 277
11.2.5 核心鏈路 277
11.3 庫存架構演進 279
11.3.1 獨立主機 279
11.3.2 分庫分錶280
11.3.3 熱點處理 280
11.4 庫存單元化 282
11.4.1 中心化烏雲 282
11.4.2 優化困境 285
11.4.3 單元封閉 285
11.4.4 全局庫存與局部庫存 287
11.4.5庫存回收難點 290
11.4 .6 全局庫存可見性292
第12章常見性能瓶頸及解決方案 294
12.1 軟件性能概述 294
12.1.1 如何理解軟件性能 294
12.1.2 軟件性能評價指標 295
12.1.3 性能瓶頸與分析要素 296
12.2 CPU 296
12.2.1 線程與進程 297
12.2.2 CPU使用率 300
12.2.3 平均負載 302
12.2. 4 CPU使用率與平均負載的差異 304
12.2.5 瓶頸表徵及解決方案 305
12.3 內存 307
12.3.1 內存使用率 308
12.3.2 特殊內存 309
12.3.3 內存回收 310
12.3.4 瓶頸表徵及解決方案 311
12.4 磁盤312
12.4.1 Linux I/O棧 313
12.4.2 磁盤交互 315
12.4.3 主要性能指標 318
12.4.4 瓶頸表徵及解決方案 319
第13章高可用問題及解決方案 321
13.1 高可用概述 321
13.1 .1 什麼是高可用321
13.1.2 為什麼需要高可用 322
13.1.3 穩定性與高可用 323
13.2 高可用設計原則 324
13.2.1 減少潛在風險的數量 324
13.2.2 減小故障的影響範圍 324
13.2.3 縮短故障的影響時間 325
13.3 接入層高可用 326
13.3.1 負載均衡 326
13.3.2 Keepalived 327
13.3.3 ECMP 328
13.4 業務層高可用 329
13.4.1 無狀態服務 329
13.4.2 集群部署 331
13.4.3 依賴處理 332
13.4.4 重試機制 333
13.4.5 冪等設計 334
13.4.6 服務降級 334
13.4.7 服務限流335
13.4.8 監控預警 335
13.5 數據層高可用 336
13.5.1 副本機制 337
13.5.2 數據複製模式 337
13.5.3 利用Raft算法實現數據複製 338
13.5.4 利用Raft算法實現故障轉移 345
13.5. 5 數據分片347
13.5.6 緩存高可用 348
第14章服務端開發實用規範 349
14.1 實用API設計規範 349
14.1.1 明確邊界 349
14.1.2 “命令,不要去詢問”原則 351
14.1.3 單一職責原則 353
14.1.4 不要基於實現設計API 355
14.1.5 異常模式或錯誤碼模式 355
14.1.6 避免使用帶有標識的參數 357
14.1.7 API如其名 358
14.1.8 建立文檔 358
14.1.9 統一風格 359
14.2 實用日誌規範 359
14.2.1 基本規範 359
14.2.2 級別規範 360
14.2.3 格式規範 360
14.2.4其他規範361
14.3 實用異常處理規範 362
14.3.1 異常處理機制 362
14.3.2 常用處理規範 363
14.4 實用代碼編寫規範 364
14.4.1大道至簡 364
14.4.2重複有度 365
14.4.3 快速失敗原則 367
14.5 實用註釋規範369
14.5.1 複雜的邏輯 370
14.5.2 晦澀的算法 370
14.5.3 特殊的常量 371
14.5.4 非常規寫法 371
14.5.5 對外API 372
14.5.6 法律文件 373