《高性能服務系統構建與實戰》一書由銀文杰 編著,電子工業出版社2017年7月出版
基本介紹
- 書名:高性能服務系統構建與實戰
- 作者:銀文杰
- ISBN:978-7-121-31509-1
- 頁數:440
- 定價:89.00
- 出版社:電子工業出版社
- 出版時間:2017年7月
- 開本:16
內容提要,目錄,
內容提要
影響業務系統性能的因素很多,計算機系統的各個層面都有涉及:從硬體、網路、作業系統、中間件、存儲,直到自身代碼質量。所有技術團隊都曾為解決性能問題、提高性能峰值絞盡腦汁,從千頭萬緒到生不如死。《高性能服務系統構建與實戰》基於作者10餘年工作經歷中踩過的技術神坑,總結整理而成。雖然不能將計算機系統各個層面中影響性能的因素全部介紹完,但還是希望通過討論業務系統負載層、網路通信層解決性能問題的過程,啟發讀者,為讀者在工作中解決性能問題提供借鑑思路。
《高性能服務系統構建與實戰》適合計算機軟體領域中立志在架構師職業路線上長期發展的技術人員閱讀,無論讀者是有一定工作經驗的軟體工程師、運維工程師還是在校大學生,都適合閱讀《高性能服務系統構建與實戰》。《高性能服務系統構建與實戰》知識點橫跨系統架構領域和軟體架構領域,所以為了更好地閱讀《高性能服務系統構建與實戰》,讀者最好曾經使用過Linux作業系統,也最好有Java程式語言的使用能力。
目錄
第一部分 前序
第1 章 那些年一起踩的坑 2
1.1 性能問題 2
1.2 可用性問題 3
1.3 異常處理問題 4
1.4 系統間依賴問題 4
1.5 系統雪崩問題 7
第2 章 業務系統分解 9
2.1 負載層技術 10
2.2 業務層技術 12
2.3 存儲層技術 13
第二部分 負載層技術與設計
第3 章 Nginx 技術 16
3.1 Nginx 中的基本技術理論 16
3.1.1 一致性Hash 算法 16
3.1.2 輪詢與加權輪詢18
3.2 Nginx 的安裝和使用 20
3.3 Nginx 的重要配置講解 22
3.4 Nginx 的重要設定 25
3.4.1 use [ kqueue | rtsig | epoll | select | poll ] 25
3.4.2 worker_processes 和worker_connections 26
3.4.3 max client 的計算方式29
3.5 Nginx 的常用模組 30
3.5.1 gzip 壓縮模組30
3.5.2 rewrite 模組 32
3.5.3 健康檢查模組 34
3.5.4 圖片動態縮略模組 37
第4 章 LVS 技術 41
4.1 網路協定基礎知識 41
4.1.1 鏈路層報文 42
4.1.2 網路層IP 報文42
4.1.3 傳輸層TCP 報文 44
4.2 LVS 的三種工作方式 45
4.2.1 LVS-NAT 工作方式45
4.2.2 LVS-DR 工作方式47
4.2.3 LVS-TUN 工作方式49
4.2.4 LVS 調度方式 52
4.3 LVS 設定實戰 53
4.3.1 LVS-NAT 方式設定53
4.3.2 LVS-DR 模式設定57
4.3.3 ipvsadm 參數匯總 60
第5 章 其他負載層技術 63
5.1 DNS 和智慧型DNS 63
5.2 CDN 網路 65
5.3 Keepalived 67
5.4 不得不提的Tengine 68
第6 章 負載層性能實戰 69
6.1 負載層技術實戰場景 69
6.1.1 負載場景一 69
6.1.2 負載場景二 70
6.1.3 負載場景三 71
6.1.4 負載場景四 72
6.2 方案一:使用Nginx 初步解決性能瓶頸問題 72
6.3 方案二:使用LVS + Keepalived + Nginx 增加吞吐量和穩定性 74
6.4 方案三:使用DNS 和CDN 網路最佳化整體性能 75
第三部分 系統間通信
第7 章 系統間通信:網路I/O 模型 78
7.1 模型 78
7.1.1 信息格式79
7.1.2 網路協定80
7.1.3 通信方式/框架82
7.2 網路I/O 模型:阻塞模式 82
7.2.1 通信模型概要 82
7.2.2 阻塞模式深入分析 87
7.2.3 問題的根源 91
7.3 網路I/O 模型:同步非阻塞模式——對阻塞模式的改進 93
7.3.1 首次改進97
7.3.2 再次改進99
7.3.3 依然存在問題 101
7.4 網路I/O 模型:多路復用(I/O Multiplex) 101
7.4.1 典型的多路復用I/O 實現 102
7.4.2 Java 對多路復用I/O 技術的支持 103
7.4.3 Java NIO 框架簡要設計分析 112
7.4.4 Java 實例改進 114
7.4.5 多路復用I/O 的優缺點 118
7.5 網路I/O 模型:異步I/O 119
7.5.1 Java 對AIO 的支持. 120
7.5.2 Java 提供的 AIO 支持示例 122
7.5.3 還有改進可能 128
7.6 第三方組件:Netty 128
7.6.1 為什麼需要Netty 129
7.6.2 Netty 快速上手 130
7.6.3 Netty 中的重要概念 135
7.7 再次審視Netty 的作用 141
7.7.1 對網路I/O 模型的封裝 142
7.7.2 對數據信息格式的封裝 143
7.7.3 解決了“技術層”框架中的技術問題 146
7.7.4 解決半包問題和粘包問題 148
7.8 不得不提的執行緒池 152
7.8.1 為什麼要使用執行緒池 152
7.8.2 執行緒池基本使用 155
7.8.3 ThreadPoolExecutor 邏輯結構和工作方式 156
7.8.4 執行緒池的等待佇列 159
7.8.5 拒絕任務 165
7.8.6 ThreadPoolExecutor 中常用屬性總結 168
第8 章 RPC 與系統間調用 170
8.1 RPC 技術原理 170
8.1.1 什麼是RPC 170
8.1.2 RPC 要素 171
8.1.3 更泛化的RPC 定義 173
8.1.4 典型的RPC 框架介紹 174
8.1.5 RPC 框架的性能依據 175
8.2 RPC 實踐:Apache Thrift 基本使用 176
8.2.1 IDL 格式概要 177
8.2.2 簡單的Apache Thrift 代碼 181
8.3 RPC 實踐:Apache Thrift 深入分析 185
8.3.1 Apache Thrift 與訊息格式 185
8.3.2 Apache Thrift 與通信模型 190
8.3.3 Apache Thrift 與執行緒池 193
8.4 RPC 實踐:解決異常問題 193
8.4.1 分散式業務的異常解決思路. 195
8.4.2 事務補償的簡單實現 201
8.5 SOA 和服務治理 224
8.5.1 SOA 概述 225
8.5.2 ESB 概述 227
8.5.3 常見的ESB 產品 229
8.5.4 服務治理框架 231
第9 章 系統間通信:訊息佇列技術 237
9.1 訊息佇列原理 237
9.1.1 訊息 237
9.1.2 服務結構 238
9.2 訊息協定 238
9.2.1 XMPP 協定 239
9.2.2 Stomp 協定 241
9.2.3 MQTT 協定 244
9.2.4 AMQP 協定 248
9.2.5 不得不提的JMS 規範 251
9.3 MQ 實踐:ActiveMQ 基本概念和使用 253
9.3.1 ActiveMQ 的簡易安裝過程 253
9.3.2 ActiveMQ 的其他命令參數 255
9.3.3 在ActiveMQ 中傳遞Stomp 訊息 256
9.3.4 ActiveMQ 中的Queue 和Topics 258
9.3.5 JMS 和協定間轉換 260
9.3.6 持久化訊息和非持久化訊息. 266
9.3.7 持續訂閱和非持續訂閱 267
9.4 MQ 實踐:ActiveMQ 性能最佳化 267
9.4.1 ActiveMQ 性能最佳化思路 267
9.4.2 ActiveMQ 中的網路配置 268
9.4.3 ActiveMQ 處理規則和最佳化 273
9.4.4 ActiveMQ 的持久訊息存儲方案 285
9.5 MQ 實踐:ActiveMQ 集群方案 299
9.5.1 ActiveMQ 高性能方案 300
9.5.2 ActiveMQ 高可用方案 311
9.6 其他MQ技術:Apache Kafka 321
9.6.1 Kafka 設計概要 321
9.6.2 Kafka 集群安裝:配置過程 333
9.6.3 Kafka 常用命令 336
第四部分 場景實戰
第10 章 場景實戰:其他儲備知識 340
10.1 數據存儲 340
10.1.1 塊存儲 341
10.1.2 共享存儲/已分享檔案存儲 343
10.1.3 對象存儲系統 344
10.2 磁碟陣列系統 345
10.2.1 RAID 0 346
10.2.2 RAID 1 347
10.2.3 RAID 10 和RAID 01 348
10.2.4 RAID 5 349
10.3 NoSQL 技術 351
第11 章 場景實戰:Kafka 與日誌採集 355
11.1 Kafka 套用場景:場景說明 355
11.2 Kafka 套用場景一:侵入式方案 357
11.2.1 設計重點 358
11.2.2 編碼過程:生產者和業務系統集成 361
11.2.3 是否使用Spring Integration-Kafka 366
11.2.4 編碼過程:消費者端 367
11.3 Kafka 套用場景二:調整侵入式方案 371
11.3.1 方案一的問題所在 371
11.3.2 方案二的解決思路 371
11.3.3 方案二的主要代碼示例 377
11.3.4 其他設計思考 380
11.3.5 百度站長統計工具 382
11.4 Kafka 套用場景三:非侵入式方案 383
11.4.1 Apache Flume 介紹 383
11.4.2 設計方案 384
11.4.3 配置過程概要 386
11.4.4 方案三細節說明. 388
第12 章 場景實戰:圖片服務 392
12.1 需求場景 392
12.2 概要設計階段 393
12.2.1 分散式檔案系統選型 394
12.2.2 快取系統選型 395
12.2.3 路由層選型 397
12.2.4 架構設計細化 400
12.2.5 其他技術選型 401
12.3 關鍵技術點考量 403
12.3.1 責任鏈模式 403
12.3.2 Redis 中的數據結構選擇 404
12.3.3 使用Spring Boot 406
12.3.4 其他技術特性 408
12.4 詳細設計階段 412
12.4.1 點陣圖基本知識 412
12.4.2 Nginx 中的Proxy Cache 配置 418
12.4.3 責任鏈進行圖片處理 420
12.4.4 Redis 快取操作 423