第1章 分布式微服務架構設計原理 1
1.1 從傳統單體架構到服務化架構 2
1.1.1 JEE架構 2
1.1.2 SSH架構 5
1.1.3 服務化架構 8
1.2 從服務化到微服務 11
1.2.1 微服務架構的産生 12
1.2.2 微服務架構與傳統單體架構的對比 13
1.2.3 微服務架構與SOA服務化的對比 15
1.3 微服務架構的核心要點和實現原理 16
1.3.1 微服務架構中職能團隊的劃分 16
1.3.2 微服務的去中心化治理 18
1.3.3 微服務的交互模式 18
1.3.4 微服務的分解和組閤模式 22
1.3.5 微服務的容錯模式 35
1.3.6 微服務的粒度 41
1.4 Java平颱微服務架構的項目組織形式 42
1.4.1 微服務項目的依賴關係 42
1.4.2 微服務項目的層級結構 43
1.4.3 微服務項目的持續發布 45
1.5 服務化管理和治理框架的技術選型 45
1.5.1 RPC 46
1.5.2 服務化 47
1.5.3 微服務 49
1.6 本章小結 52
第2章 徹底解決分布式係統一緻性的問題 54
2.1 什麼是一緻性 55
2.2 一緻性問題 56
2.3 解決一緻性問題的模式和思路 57
2.3.1 酸堿平衡理論 58
2.3.2 分布式一緻性協議 61
2.3.3 保證最終一緻性的模式 67
2.4 超時處理模式 75
2.4.1 微服務的交互模式 76
2.4.2 同步與異步的抉擇 77
2.4.3 交互模式下超時問題的解決方案 78
2.4.4 超時補償的原則 85
2.5 遷移開關的設計 87
2.6 本章小結 88
第3章 服務化係統容量評估和性能保障 89
3.1 架構設計與非功能質量 90
3.2 全麵的非功能質量需求 91
3.2.1 非功能質量需求的概述 91
3.2.2 非功能質量需求的具體指標 92
3.3 典型的技術評審提綱 97
3.3.1 現狀 97
3.3.2 需求 98
3.3.3 方案描述 98
3.3.4 方案對比 99
3.3.5 風險評估 100
3.3.6 工作量評估 100
3.4 性能和容量評估經典案例 100
3.4.1 背景 100
3.4.2 目標數據量級 101
3.4.3 量級評估標準 101
3.4.4 方案 102
3.4.5 小結 107
3.5 性能評估參考標準 108
3.5.1 常用的應用層性能指標參考標準 108
3.5.2 常用的係統層性能指標參考標準 109
3.6 性能測試方案的設計和最佳實踐 112
3.6.1 明確壓測目標 112
3.6.2 壓測場景設計和壓測方案製定 114
3.6.3 準備壓測環境 121
3.6.4 壓測的執行 122
3.6.5 問題修復和係統優化 123
3.7 有用的壓測工具 123
3.7.1 ab 123
3.7.2 jmeter 125
3.7.3 mysqlslap 125
3.7.4 sysbench 129
3.7.5 dd 134
3.7.6 LoadRunner 135
3.7.7 hprof 136
3.8 本章小結 138
第4章 大數據日誌係統的構建 140
4.1 開源日誌框架的原理分析與應用實踐 142
4.1.1 JDK Logger 142
4.1.2 Apache Commons Logging 143
4.1.3 Apache Log4j 147
4.1.4 Slf4j 156
4.1.5 Logback 160
4.1.6 Apache Log4j 2 164
4.2 日誌係統的優化和最佳實踐 168
4.2.1 開發人員的日誌意識 168
4.2.2 日誌級彆的設置 168
4.2.3 日誌的數量和大小 169
4.2.4 切割方式 170
4.2.5 日誌格式的配置 170
4.2.6 一行日誌導緻的綫上事故 177
4.3 大數據日誌係統的原理與設計 178
4.3.1 通用架構和設計 179
4.3.2 日誌采集器 180
4.3.3 日誌緩衝隊列 186
4.3.4 日誌解析器 187
4.3.5 日誌存儲和搜索 187
4.3.6 日誌展示係統 188
4.3.7 監控和報警 188
4.3.8 日誌係統的容量和性能評估 188
4.4 ELK係統的構建與使用 190
4.4.1 Elasticsearch 191
4.4.2 Logstash 193
4.4.3 Kibana 196
4.5 本章小結 198
第5章 基於調用鏈的服務治理係統的設計與實現 199
5.1 APM係統簡介 200
5.1.1 優秀的開源APM係統 200
5.1.2 國內商業APM産品的介紹 202
5.2 調用鏈跟蹤的原理 203
5.2.1 分布式係統的遠程調用過程 204
5.2.2 TraceID 207
5.2.3 SpanID 208
5.2.4 業務鏈 210
5.3 調用鏈跟蹤係統的設計與實現 211
5.3.1 整體架構 211
5.3.2 TraceID和SpanID在服務間的傳遞 213
5.3.3 采集器的設計與實現 217
5.3.4 處理器的設計與實現 222
5.3.5 調用鏈係統的展示 225
5.4 本章小結 226
第6章 Java服務的綫上應急和技術攻關 227
6.1 海恩法則和墨菲定律 227
6.2 綫上應急的目標、原則和方法 229
6.2.1 應急目標 229
6.2.2 應急原則 229
6.2.3 綫上應急的方法和流程 230
6.3 技術攻關的方法論 233
6.4 環境搭建和示例服務啓動 236
6.5 高效的服務化治理腳本 240
6.5.1 show-busiest-java-threads 240
6.5.2 find-in-jar 243
6.5.3 grep-in-jar 244
6.5.4 jar-conflict-detect 245
6.5.5 http-spy 247
6.5.6 show-mysql-qps 248
6.5.7 小結 249
6.6 JVM提供的監控命令 249
6.6.1 jad 249
6.6.2 btrace 250
6.6.3 jmap 252
6.6.4 jstat 255
6.6.5 jstack 256
6.6.6 jinfo 258
6.6.7 其他命令 258
6.6.8 小結 259
6.7 重要的Linux基礎命令 260
6.7.1 必不可少的基礎命令和工具 260
6.7.2 查看活動進程的命令 268
6.7.3 窺探內存的命令 270
6.7.4 針對CPU使用情況的監控命令 272
6.7.5 監控磁盤I/O的命令 273
6.7.6 查看網絡信息和網絡監控命令 275
6.7.7 Linux係統的高級工具 287
6.7.8 /proc文件係統 288
6.7.9 摘要命令 288
6.7.10 小結 290
6.8 現實中的應急和攻關案例 291
6.8.1 一次OOM事故的分析和定位 291
6.8.2 一次CPU 100%的綫上事故排查 301
6.9 本章小結 304
第7章 服務的容器化過程 306
7.1 容器vs虛擬機 306
7.1.1 什麼是虛擬機 306
7.1.2 什麼是容器 306
7.1.3 容器和虛擬機的區彆 307
7.1.4 容器主要解決的問題 307
7.1.5 Docker的優勢 310
7.2 Docker實戰 311
7.2.1 Docker的架構 311
7.2.2 Docker的安裝 315
7.2.3 Docker初體驗 319
7.2.4 Docker後颱服務的管理 322
7.2.5 Docker的客戶端命令 328
7.2.6 Docker Compose編排工具的使用 372
7.3 容器化項目 379
7.3.1 傳統的應用部署 380
7.3.2 將應用程序部署在虛擬機上 380
7.3.3 容器化部署應用 381
7.3.4 Docker實現的應用容器化示例 382
7.4 本章小結 384
第8章 敏捷開發2.0的自動化工具 385
8.1 什麼是敏捷開發2.0 385
8.1.1 常用的4種開發模式 385
8.1.2 什麼是DevOps 390
8.1.3 敏捷開發2.0解決的問題 392
8.2 敏捷開發的自動化流程 393
8.2.1 持續集成 393
8.2.2 持續交付和持續部署 397
8.3 敏捷開發的常用自動化工具 400
8.3.1 分布式版本控製工具Git 400
8.3.2 持續集成和持續交付工具Jenkins 410
8.3.3 基礎平颱管理工具SaltStack 418
8.3.4 Docker容器化工具 421
8.4 本章小結 422
· · · · · · (
收起)