分佈式服務架構:原理、設計與實戰
內容描述
本書全面介紹了分佈式服務架構的原理與設計,並結合作者在實施微服務架構過程中的實踐經驗,總結了保障線上服務健康、可靠的方案,是一本架構級、實戰型的重量級著作。全書以分佈式服務架構的設計與實現為主線,由淺入深地介紹了分佈式服務架構的方方面面,主要包括理論和實踐兩部分。理論上,首先介紹了服務架構的背景,以及從服務化架構到微服務架構的演化;然後提出了保證分佈式服務系統架構一致性的方案和模式,並介紹了因特網架構評審的方法論;最後給出了一個簡要的非功能質量的技術評審提綱。實踐上,首先提供了一個因特網項目的性能和容量評估的真實案例,介紹了壓測的方案設計和實踐,這些技術能夠全面保證大規模、高並發項目的一致性、可用性和高並發性;然後講解了大規模服務的日誌系統的原理、設計與實踐,包括ELK等框架的特點和使用方式等,並介紹了當前流行的APM系統的設計與實現,主要包括調用鏈和業務鏈的跟蹤與恢復,涵蓋了線上應急和技術攻關的流程及重點,也結合服務化系統線上應急過程進行分析並總結了其中需要用到的Java虛擬機、Linux和定製化腳本等命令,這些命令都是每個開發人員都會用到的解決線上問題的利器;最後,闡述了系統服務的容器化過程,並詳細介紹了敏捷開發流程和實現自動化的常用工具等,讓讀者既能學到架構設計的基礎理論,也能結合書中的原理、設計與方法論來解決大規模、高並發因特網項目中的現實問題。 無論是對於軟件工程師、測試工程師、運維工程師、軟件架構師、技術經理、技術總監,還是對於資深IT人士來說,本書都有很強的借鑒性和參考價值。
海報:
目錄大綱
第1章分佈式微服務架構設計原理1
1.1從傳統單體架構到服務化架構2
1.1.1JEE架構2
1.1.2SSH架構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.4Java平台微服務架構的項目組織形式42
1.4.1微服務項目的依賴關係42
1.4.2微服務項目的層級結構43
1.4.3微服務項目的持續發布45
1.5服務化管理和治理框架的技術選型45
1.5.1RPC46
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明確壓測目標1 12
3.6.2壓測場景設計和壓測方案製定114
3.6.3準備壓測環境121
3.6.4壓測的執行122
3.6.5問題修復和系統優化123
3.7有用的壓測工具123
3.7.1ab123
3.7 .2jmeter125
3.7.3mysqlslap125
3.7.4sysbench129
3.7.5dd134
3.7.6LoadRunner135
3.7.7hprof136
3.8本章小結138
第4章大數據日誌系統的構建140
4.1開源日誌框架的原理分析與應用實踐142
4.1.1JDKLogger142
4.1.2ApacheCommonsLogging143
4.1. 3ApacheLog4j147
4.1.4Slf4j156
4.1.5Logback160
4.1.6ApacheLog4j2164
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.4ELK系統的構建與使用190
4.4.1Elasticsearch191
4.4.2Logstash193
4.4.3Kibana196
4.5本章小結198
第5章基於調用鏈的服務治理系統的設計與實現199
5.1APM系統簡介200
5.1.1優秀的開源APM系統200
5.1.2國內商業APM產品的介紹202
5.2調用鏈跟踪的原理203
5.2.1分佈式系統的遠程調用過程204
5.2.2TraceID207
5.2.3SpanID208
5.2.4業務鏈210
5.3調用鏈跟踪系統的設計與實現211
5.3.1整體架構211
5.3.2TraceID和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.1show—busiest—java—threads240
6.5.2find—in—jar243
6.5.3grep—in—jar244
6.5.4jar—conflict—detect245
6.5.5http—spy247
6.5.6show—mysql—qps248
6.5.7小結249
6.6JVM提供的監控命令249
6.6.1jad249
6.6. 2btrace250
6.6.3jmap252
6.6.4jstat255
6.6.5jstack256
6.6.6jinfo258
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.7Linux系統的高級工具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一次CPU100%的線上事故排查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.5Docker 的優勢310
7.2Docker實戰311
7.2.1Docker的架構311
7.2.2Docker的安裝315
7.2.3Docker初體驗319
7.2.4Docker後台服務的管理322
7.2.5Docker的客戶端命令328
7.2.6DockerCompose編排工具的使用372
7.3容器化項目379
7.3.1傳統的應用部署380
7.3.2將應用程序部署在虛擬機上380
7.3.3容器化部署應用381
7.3.4Docker實現的應用容器化示例382
7.4本章小結384
第8章敏捷開發2.0的自動化工具385
8.1什麼是敏捷開發2.0385
8.1.1常用的4種開發模式385
8.1.2什麼是DevOps390
8.1.3敏捷開發2.0解決的問題392
8.2敏捷開發的自動化流程393
8.2.1持續集成393
8.2.2持續交付和持續部署397
8.3敏捷開發的常用自動化工具400
8.3.1分佈式版本控制工具Git400
8.3.2持續集成和持續交付工具Jenkins410
8.3.3基礎平台管理工具SaltStack418
8.3.4Docker容器化工具421
8.4本章小結422
作者介紹
李艷鵬
現任易寶支付產品中心首席架構師,曾在花旗銀行、甲骨文、路透社、新浪微博等大型IT互聯網公司擔任技術負責人和架構師,現專注於大規模、高並發的線上和線下支付平台的應用架構和技術架構的規劃與落地,負責交易、支付、渠道、出款、風控、對賬等核心支付系統的設計與實現,對移動支付、聚合支付、合規賬戶、掃碼支付、標記化支付等業務場景有產品應用架構規劃與落地的實踐經驗。
楊彪
現任某創業公司技術總監及合夥人,在互聯網和遊戲行業有近10年工作經驗,曾在酷我音樂盒、人人遊戲和掌趣科技等上市公司擔任核心研發職位,在互聯網公司做過日活躍用戶量達千萬的項目,也在遊戲公司做過多款月流水千萬以上的遊戲。喜歡研究問題,追求前沿技術,學無止境。