1. 程式人生 > >分散式服務架構:原理、設計與實戰

分散式服務架構:原理、設計與實戰

網站

更多書籍點選進入>> CiCi島

下載

電子版僅供預覽及學習交流使用,下載後請24小時內刪除,支援正版,喜歡的請購買正版書籍

封頁

封頁

編輯推薦

本書以分散式服務架構為主線,重點介紹了保證服務化架構的一致性、高效能、高可用的解決方案和實踐,並介紹了微服務架構中倡導的容器化過程,以及敏捷開發和敏捷上線的流程,對分散式服務系統架構設計的核心要點逐一介紹,對重點主題配有程式碼、設計文件和開源專案,每個主題獨立成章,讓讀者不但可以瞭解大規模分散式微服務系統是怎麼設計的,還可以在瞭解原理的同時,瞭解作者在實際專案中積累的

實踐和模式,大大提高網際網路專案的實現效率。

內容簡介

本書全面介紹了分散式服務架構的原理與設計,並結合作者在實施微服務架構過程中的實踐經驗,總結了保障線上服務健康、可靠的*方案,是一本架構級、實戰型的重量級著作。

全書以分散式服務架構的設計與實現為主線,由淺入深地介紹了分散式服務架構的方方面面,主要包括理論和實踐兩部分。理論上,首先介紹了服務架構的背景,以及從服務化架構到微服務架構的演化;然後提出了保證分散式服務系統架構一致性的方案和模式,並介紹了網際網路架構評審的方法論;*後給出了一個簡要的非功能質量的技術評審提綱。實踐上,首先提供了一個網際網路專案的效能和容量評估的真實案例,介紹了壓測的方案設計和*實踐,這些技術能夠全面保證大規模、高併發專案的一致性、可用性和高併發性;然後講解了大規模服務的日誌系統的原理、設計與實踐,包括

ELK等框架的特點和使用方式等,並介紹了當前流行的APM系統的設計與實現,主要包括呼叫鏈和業務鏈的跟蹤與恢復,涵蓋了線上應急和技術攻關的流程及重點,也結合服務化系統線上應急過程進行分析並總結了其中需要用到的Java虛擬機器、Linux和定製化指令碼等命令,這些命令都是每個開發人員都會用到的解決線上問題的利器;*後,闡述了系統服務的容器化過程,並詳細介紹了敏捷開發流程和實現自動化的常用工具等,讓讀者既能學到架構設計的基礎理論,也能結合書中的原理、設計與方法論來解決大規模、高併發網際網路專案中的現實問題。

無論是對於軟體工程師、測試工程師、運維工程師、軟體架構師、技術經理、技術總監,還是對於資深

IT人士來說,本書都有很強的借鑑性和參考價值。

作者簡介

l 李豔鵬 現任易寶支付產品中心首席架構師,曾在花旗銀行、甲骨文、路透社、新浪微博等大型IT網際網路公司擔任技術負責人和架構師,現專注於大規模、高併發的線上和線下支付平臺的應用架構和技術架構的規劃與落地,負責交易、支付、渠道、出款、風控、對賬等核心支付系統的設計與實現,對移動支付、聚合支付、合規賬戶、掃碼支付、標記化支付等業務場景有產品應用架構規劃與落地的實踐經驗。 l 楊 彪 現任某創業公司技術總監及合夥人,在網際網路和遊戲行業有近10年工作經驗,曾在酷我音樂盒、人人遊戲和掌趣科技等上市公司擔任核心研發職位,在網際網路公司做過日活躍使用者量達千萬的專案,也在遊戲公司做過多款月流水千萬以上的遊戲。喜歡研究問題,追求前沿技術,學無止境。

目 錄

第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

前 言

自網際網路誕生以來,其簡單、敏捷的微服務架構開發理念和實踐逐漸成為主流,在逐漸發展的環境下和技術演化的過程中,迅速突破網際網路行業並波及軟體行業的各個領。然而,這種突飛猛進的表面下卻是龍魚混雜、泥沙俱下。一方面,很多人在這個資訊爆炸的時代應對海量資訊的處理能力比較有限;另一方面,也有人致力於將優秀的理論和實踐相結合,希望運用所學的高效解決方案應對越來越複雜的問題。不論對與錯,人類對技術進步的追求從未停歇。

毋庸置疑,IT行業的發展進入了一個加速分化的時代,將優秀的解決方案推向大眾的成本和速度將成為決定企業生存與否的關鍵因素之一。優秀的網際網路企業已裝備精良並持續優化,而那些還需不斷進步的企業也在互相競爭。儘管在這個資訊量巨大的媒體時代,部分優秀的企業在應對分散式服務架構時已經有了更多的認識且技術越來越完善,但也有很多快速發展的企業在變得更優秀這條道路上任重而道遠。

很多非常優秀的開發人員和架構師能成為給公司帶來長遠利益的人,在變革的節點上推波助瀾。本書將帶你走進分散式服務架構的世界,在這個世界裡不停探索和汲取經驗。領先於別人是一種要求,這也是很多公司贏得先機的關鍵所在,無論服務於IT的哪個領域,每個IT人都有理由重視架構這藝術。希望本書對於軟體工程師、測試工程師、軟體架構師及深耕於IT行業的老兵來說,都能帶給其所期望的內,並幫助其解決和發現問題,也能幫助其不斷探索。

本書以當前流行的分散式服務架構為主線,講解了分散式服務架構的原理、設計與實踐。本書首先介紹了分散式服務架構的背景和演化,然後深入闡述了保證分散式服務的一致性、高效能、高可用性等的設計思想和可實施的方案;然後介紹了大規模、高併發線上服務的應急流程和技術攻關過程,並給出了發現和定位問題的有效、常用工具集;最後詳細介紹了分散式服務架構中容器化過程分析、敏捷開發和上線的工具,為從事高併發服務架構的開發人員提供了保障系統健康執行的方法論和最佳實踐。

感謝電子工業出版社張國霞編輯的認真態度和辛勤工作,使得本書能夠最終順利完成。

感謝筆者的技術小夥伴賈博巖提供了日誌相關的資料和示例,讓筆者能夠快速完成第4章大資料日誌系統方面的內容。

感謝張曉輝、周偉、霍勇同學在編輯階段參與閱稿,並提出專業的意見。

感謝英語專業的高材生曹燕琴小同學在文字上提供的幫助。

最後,感謝筆者的家人和朋友在本書寫作過程中提供的支援和幫助。

李豔鵬

媒體評論

豔鵬是易寶支付產品中心的首席架構師,負責應用架構和技術架構的規劃與落地,在支付平臺開發和重構的實踐中,以及複雜的線上異常事故的洗禮下,積累了豐富的線上應急和技術攻關經驗。本書是豔鵬保證大規模服務化系統的非功能質量方面的經驗總結,是架構設計方向不可多得的好書,推薦每一位奮鬥在一線的負責核心交易系統的架構師、程式設計師閱讀和學習。

易寶支付產品VP 姚建東

關於分散式的書籍很多,也各有千秋,而本書的*特點是每章獨立,更像一本實用工具書,讀者能從中學到自己所關注的內容,比如開發人員的線上應急和技術攻關、資料統計分析的分散式日誌和運維部署相關的服務容器化方案等。每章獨立卻又相互關聯、渾然一體,書中的所有技術*終彙集成了分散式服務架構的*方案。

開心網副總裁 楊延峰

本書作者多年從事網際網路和遊戲行業的工作,有著資深的實戰經驗,能把網際網路和遊戲行業中先進的技術結合在一起。本書的內容不僅適用於網際網路、金融或電商方面,也非常適用於全球大服的遊戲服務後臺構架方面。本書從分散式原理、資料一致性到高效能、高可用等講解了專案中經常發生的問題,能很好地幫助讀者進行分散式學習和實戰操作,值得推薦。

指藝科技CEO 李榮超

豔鵬在易寶支付產品中心全面負責架構設計和評審工作,對線上應急和技術攻關的案例講解如數家珍,並且在覆盤後形成可實施的流程規範,有效避免了服務化過程中的常見問題,大大提高了應用架構的可用性和穩定性,本書是豔鵬在高可用服務化系統中的實踐經驗總結,為讀者提供了一個好的風向標。

易寶支付技術總監 張煜

豔鵬是我認識多年的老戰友了,多年戰鬥在一線,有豐富的研發、架構經驗,非常瞭解大家實際的需求。本書層次分明、圖文並茂、案例詳實,其中的程式碼更可以直接在實際工作中使用,是一本不可多得的好書。

藍汛技術總監 陳江偉

和豔鵬相識多年,見證了他不斷完善自己的理論基礎且不斷探索和總結,形成了一套完整的網際網路架構設計方法論。

在本書中,豔鵬通過多年網際網路架構經驗,總結了服務化的背景和技術演進,提出了網際網路專案技術評審的方法論和提綱,並給出了在真實的線上專案中進行效能和容量評估的全過程,幫助大家輕鬆設計大規模、高併發服務化系統專案。若能熟練掌握本書內容,則能夠保證服務化專案按照既定的目標進行實施與落地,並能保證系統的穩定性、可用性和高效能等高階特性。

愛奇藝高階技術經理 黃福偉

本書深入淺出地介紹了保證大規模、高併發服務化系統可用性和高效能的經驗和方法論,是保證線上服務穩定、可靠的一本不可多得的實踐性著作。

菜鳥網路架構師 蘭博

IT技術日新月異地發展,我們自然不能躺在歷史的溫床上停歇,必須不斷地學習。這其中有的人對新知識的態度是隻學一二,李先生卻精益求精、舉一反三,對其中的每個知識點都能做到理解透徹。本書便是李先生長期研究服務化架構、微服務架構及容器化之後的經典總結。本書從問題背景入手,深入淺出地介紹了服務化架構,並結合具體的*實踐,為讀者展示了服務化架構設計的巨集偉藍圖。

華為資深雲架構師 朱軍

分散式、微服務幾乎是現在的技術人員必須要了解的架構方向,從理論上來講確實解耦了很多結構,但另一方面,又會帶來更多衍生的複雜度及難點。如何保證事物的*終一致性?如何進行效能及容量預估?如何處理分散式系統的日誌?如何進行線上應急?如果你曾有和我一樣的困惑,那麼相信你一樣能從本書中得到非常寶貴的解答。本書作者由淺至深地講述了分散式架構帶給我們的諸多困擾和難點,循序漸進、思路清晰地闡明瞭這些問題的答案。相信本書能成為業界的又一力作!強烈推薦相關從業人員閱讀本書!

12CTO 張建

與作者共事五年,深知他對技術的痴迷,他喜歡研究問題,對待事情認真、負責。本書中的所有細節也都是他深入研究並且得出結論的,很多經驗方法都能直接在工作中應用,是一本經過千錘百煉的值得推薦的好書。

 北京*貓網路科技CEO 楊辛

面對越來越複雜的系統和業務,分散式技術早已成為網際網路時代的必學技術,然而,如果沒有經歷過大公司背景的實踐和歷練,則我們很難接觸到分散式服務的設計和架構。本書恰恰可以為急於學習而又沒有實踐機會的從業者提供幫助。本書作者將分散式的原理、實踐及個人的工作經驗相結合,從分散式的一致性、系統容量評估和效能保障、日誌系統、服務部署、線上應急等方方面面進行了鞭辟入裡的分析。

成都魚說科技董事長 嶽鵬

分散式和微服務技術越來越被網際網路企業推崇和認可,如何將其結合業務的特點工程化地在企業中落地是每個技術人員都需要思考的問題。豔鵬結合自己多年的開發實踐經驗和深入研究,著成《分散式服務架構:原理、設計與實戰》,對於理解分散式和微服務技術,有很好的指導和啟發。

汽車之家運維開發技術經理 李佔斌

本書作者是網際網路金融大牛群的群主,是一名瘦削而專注的IT青年。這是一本關於分散式和服務化的、凝結了作者理論和實踐心血的好書。

宜信資深大資料工程師 付紅雷