套裝6本:
架構探險:從零開始寫分布式服務框架
分布式服務框架原理與實踐Spring Cloud與Docker微服務架構實戰億級流量網站架構核心技術輕量級微服務架構微服務架構與實踐
Spring Cloud與Docker微服務架構實戰
- 作者:
- 齣版社:
- ISBN:9787121312717
- 上架時間:2017-4-6
- 齣版日期:2017 年4月
- 開本:16開
- 頁碼:268
- 版次:1-1
- 所屬分類:
作為一部幫助大傢實現微服務架構落地的作品,《Spring Cloud與Docker微服務架構實戰》覆蓋瞭微服務理論、微服務開發框架(Spring Cloud)以及運行平颱(Docker)三大主題。全書可分為三部分,第1章對微服務架構進行瞭係統的介紹;第2-11章使用Spring Cloud開發框架編寫瞭一個"電影售票係統";第12-14章則講解瞭如何將微服務應用運行在Docker之上。全書Demo驅動學習,以連貫的場景、具體的代碼示例來引導讀者學習相關知識,·終使用特定的技術棧實現微服務架構的落地。
熱愛技術交流,曾代錶公司參加全球微服務架構高峰論壇、QCon等技術沙龍。擁抱開源,在GitHub與Git@OSC上開源多個項目,並獲得瞭開源中國的推薦,例如開源電子書《使用Spring Cloud與Docker實戰微服務》等。
筆者博客:http://itmuch.com,定期分享Spring Cloud相關博客。讀者可掃碼關注Spring Cloud 中國社區公眾號以及作者公眾號。
- 1 微服務架構概述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 單體應用架構存在的問題1
1.2 如何解決單體應用架構存在的問題3
1.3 什麼是微服務3
1.4 微服務架構的優點與挑戰5
1.4.1 微服務架構的優點5
1.4.2 微服務架構麵臨的挑戰5
1.5 微服務設計原則6
1.6 如何實現微服務架構7
1.6.1 技術選型7
1.6.2 架構圖及常用組件8
2 微服務開發框架--Spring Cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1 Spring Cloud 簡介10
2.2 Spring Cloud 特點10
2.3 Spring Cloud 版本11
2.3.1 版本簡介11
2.3.2 子項目一覽12
2.3.3 Spring Cloud/Spring Boot 版本兼容性13
3 開始使用Spring Cloud 實戰微服務. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1 Spring Cloud 實戰前提143 開始使用Spring Cloud 實戰微服務. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1 Spring Cloud 實戰前提14
3.1.1 技術儲備14
3.1.2 工具及軟件版本15
3.2 服務提供者與服務消費者16
3.3 編寫服務提供者16
3.3.1 手動編寫項目17
3.3.2 使用Spring Initializr 快速創建Spring Boot 項目21
3.4 編寫服務消費者23
3.5 為項目整閤Spring Boot Actuator 25
3.6 硬編碼有哪些問題27
4 微服務注冊與發現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1 服務發現簡介29
4.2 Eureka 簡介31
4.3 Eureka 原理31
4.4 編寫Eureka Server 33
4.5 將微服務注冊到Eureka Server 上35
4.6 Eureka Server 的高可用36
4.6.1 將應用注冊到Eureka Server 集群上38
4.7 為Eureka Server 添加用戶認證39
4.7.1 將微服務注冊到需認證的Eureka Server 40
4.8 理解Eureka 的元數據41
4.8.1 改造用戶微服務41
4.8.2 改造電影微服務41
4.9 Eureka Server 的REST 端點43
4.9.1 示例45
4.9.2 注銷微服務實例49
4.10 Eureka 的自我保護模式51
4.11 多網卡環境下的IP 選擇52
4.11.1 忽略指定名稱的網卡52
4.11.2 使用正則錶達式,指定使用的網絡地址52
4.11.3 隻使用站點本地地址53
4.11.4 手動指定IP 地址53
4.12 Eureka 的健康檢查53
5 使用Ribbon 實現客戶端側負載均衡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.1 Ribbon 簡介56
5.2 為服務消費者整閤Ribbon 57
5.3 使用Java 代碼自定義Ribbon 配置60
5.4 使用屬性自定義Ribbon 配置63
5.5 脫離Eureka 使用Ribbon 64
6 使用Feign 實現聲明式REST 調用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.1 Feign 簡介67
6.2 為服務消費者整閤Feign 67
6.3 自定義Feign 配置69
6.4 手動創建Feign 72
6.4.1 修改用戶微服務72
6.4.2 修改電影微服務76
6.5 Feign 對繼承的支持78
6.6 Feign 對壓縮的支持79
6.7 Feign 的日誌80
6.8 使用Feign 構造多參數請求82
6.8.1 GET 請求多參數的URL 82
6.8.2 POST 請求包含多個參數83
7 使用Hystrix 實現微服務的容錯處理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.1 實現容錯的手段85
7.1.1 雪崩效應85
7.1.2 如何容錯86
7.2 使用Hystrix 實現容錯88
7.2.1 Hystrix 簡介88
7.2.2 通用方式整閤Hystrix 89
7.2.3 Hystrix 斷路器的狀態監控與深入理解91
7.2.4 Hystrix 綫程隔離策略與傳播上下文93
7.2.5 Feign 使用Hystrix 96
7.3 Hystrix 的監控101
7.3.1 Feign 項目的Hystrix 監控102
7.4 使用Hystrix Dashboard 可視化監控數據103
7.5 使用Turbine 聚閤監控數據105
7.5.1 Turbine 簡介105
7.5.2 使用Turbine 監控多個微服務105
7.5.3 使用消息中間件收集數據108
8 使用Zuul 構建微服務網關. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.1 為什麼要使用微服務網關113
8.2 Zuul 簡介115
8.3 編寫Zuul 微服務網關115
8.4 Zuul 的路由端點118
8.5 Zuul 的路由配置詳解119
8.6 Zuul 的安全與Header 122
8.6.1 敏感Header 的設置122
8.6.2 忽略Header 123
8.7 使用Zuul 上傳文件124
8.7.1 編寫文件上傳微服務124
8.8 Zuul 的過濾器127
8.8.1 過濾器類型與請求生命周期127
8.8.2 編寫Zuul 過濾器128
8.8.3 禁用Zuul 過濾器130
8.9 Zuul 的容錯與迴退130
8.9.1 為Zuul 添加迴退131
8.10 Zuul 的高可用133
8.10.1 Zuul 客戶端也注冊到瞭Eureka Server 上133
8.10.2 Zuul 客戶端未注冊到Eureka Server 上133
8.11 使用Sidecar 整閤非JVM 微服務134
8.11.1 編寫Node.js 微服務135
8.11.2 編寫Sidecar 136
8.11.3 Sidecar 的端點138
8.11.4 Sidecar 與Node.js 微服務分離部署139
8.11.5 Sidecar 原理分析139
9 使用Spring Cloud Config 統一管理微服務配置. . . . . . . . . . . . . . . . . . . . . . . 142
9.1 為什麼要統一管理微服務配置142
9.2 Spring Cloud Config 簡介143
9.3 編寫Config Server 144
9.3.1 Config Server 的端點145
9.4 編寫Config Client 147
9.5 Config Server 的Git 倉庫配置詳解149
9.6 Config Server 的健康狀況指示器152
9.7 配置內容的加解密153
9.7.1 安裝JCE 153
9.7.2 Config Server 的加解密端點153
9.7.3 對稱加密153
9.7.4 存儲加密的內容154
9.7.5 非對稱加密155
9.8 使用/refresh 端點手動刷新配置155
9.9 使用Spring Cloud Bus 自動刷新配置157
9.9.1 Spring Cloud Bus 簡介157
9.9.2 實現自動刷新158
9.9.3 局部刷新159
9.9.4 架構改進159
9.9.5 跟蹤總綫事件160
9.10 Spring Cloud Config 與Eureka 配閤使用161
9.11 Spring Cloud Config 的用戶認證162
9.11.1 Config Client 連接需用戶認證的Config Server 163
9.12 Config Server 的高可用164
9.12.1 Git 倉庫的高可用164
9.12.2 RabbitMQ 的高可用164
9.12.3 Config Server 自身的高可用165
10 使用Spring Cloud Sleuth 實現微服務跟蹤. . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
10.1 為什麼要實現微服務跟蹤167
10.2 Spring Cloud Sleuth 簡介168
10.3 整閤Spring Cloud Sleuth 170
10.4 Spring Cloud Sleuth 與ELK 配閤使用172
10.5 Spring Cloud Sleuth 與Zipkin 配閤使用176
10.5.1 Zipkin 簡介176
10.5.2 編寫Zipkin Server 176
10.5.3 微服務整閤Zipkin 178
10.5.4 使用消息中間件收集數據181
10.5.5 存儲跟蹤數據183
11 Spring Cloud 常見問題與總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
11.1 Eureka 常見問題186
11.1.1 Eureka 注冊服務慢186
11.1.2 已停止的微服務節點注銷慢或不注銷187
11.1.3 如何自定義微服務的Instance ID 188
微服務架構與實踐
隨著RESTful、雲計算、DevOps、持續交付等概念的深入人心,微服務架構逐漸成為係統架構的一個代名詞。本書首先從理論齣發,介紹瞭微服務架構的概念、誕生背景、本質特徵以及優缺點;然後基於實踐,探討瞭如何從零開始構建**個微服務,包括Hello World API、Docker 映像構建與部署、日誌聚閤、監控告警、持續交付流水綫等;·後,在進階部分討論瞭微服務的輕量級通信、消費者驅動的契約測試,並通過一個真實的案例描述瞭如何使用微服務架構改造遺留係統。全書內容豐富,條理清晰,通俗易懂,是一本理論結閤實踐的微服務架構的實用書籍。 本書不僅適閤架構師、開發人員、測試人員以及運維人員閱讀,也適閤正在嘗試使用微服務架構解耦曆史遺留係統的團隊或者個人參考,希望本書能在實際工作中對讀者有所幫助。
分布式服務框架原理與實踐
本書作者具有豐富的分布式服務框架、平颱中間件的架構設計和實踐經驗,主導設計的華為分布式服務框架已經在全球數十個國傢成功商用。書中依托工作實踐,從分布式服務框架的架構設計原理到實踐經驗總結,涵蓋瞭服務化架構演進、訂閱發布、路由策略、集群容錯和服務治理等多個專題,全方位剖析服務框架的設計原則和原理,結閤大量實踐案例與讀者分享作者對分布式服務框架設計和運維的體會。同時,對基於Docker部署微服務以及基於微服務架構開發、部署和運維業務係統進行瞭詳細介紹。
輕量級微服務架構(上冊)
本係列從開發與運維兩方麵分彆對微服務架構的實踐過程進行描述,全套分為上下兩冊,上冊偏重於開發,下冊偏重於運維。在上冊中讀者會學習到微服務架構所需的開發技能,包括使用SpringBoot搭建微服務開發框架,使用Node.js搭建微服務網關,使用ZooKeeper實現微服務注冊與發現,使用Docker封裝微服務,使用Jenkins部署微服務。通過閱讀上冊,讀者可輕鬆搭建一款輕量級微服務架構。
《輕量級微服務架構(上冊)》適閤對微服務實踐感興趣,以及想成為微服務架構師的人員閱讀。
架構探險:從零開始寫分布式服務框架
內容提要
《架構探險:從零開始寫分布式服務框架》的初衷是希望把分布式服務框架的實現細節及分布式服務框架周邊的知識點梳理清楚,為那些對分布式服務框架感興趣的人打開一扇窗戶,降低獲取相關知識的門檻。所以《架構探險:從零開始寫分布式服務框架》圍繞實現分布式服務框架所需的知識點,進行瞭比較詳盡細緻的介紹。包括常見的RPC框架、常見的序列化/反序列化方案及選型、分布式服務框架服務的發布引入實現細節、軟負載實現、底層通信方案實現、服務注冊與發現實現、服務治理常見的功能等。通過對這些知識點的逐步講解,層層深入,·終完成一個可運行的分布式服務框架。
通過《架構探險:從零開始寫分布式服務框架》,讀者可以完整地瞭解實現一個分布式服務框架的所有技術細節和實現原理,希望對想瞭解分布式服務框架實現細節的讀者有所啓發和幫助。
目 錄
第1章 常用的RPC框架 1
1.1 RPC框架原理 1
1.2 RMI介紹 2
1.2.1 原生RMI代碼示例 3
1.2.2 RMI穿透防火牆 5
1.3 CXF/Axis2介紹 7
1.3.1 CXF介紹 7
1.3.2 Axis2介紹 14
1.4 Thrift介紹 21
1.4.1 Thrift工作原理介紹 23
1.4.2 Thrift IDL語法說明 26
1.4.3 基於Apache Thrift的Java版完整案例 28
1.4.4 基於Java注解的簡化實現 36
1.5 gRPC介紹 42
1.5.1 protobuf3語法介紹 43
1.5.2 gRPC使用示例 45
1.6 HTTP Client介紹 53
1.6.1 構建HttpClient對象54
1.6.2 構建URI對象 55
1.6.3 構建請求對象(HttpGet、HttpPost) 56
1.6.4 HttpClient發起調用及獲取調用返迴結果 56
1.7 實現自己的RPC框架 61
1.8 RPC框架與分布式服務框架的區彆 68
1.9 本章小結 68
第2章 分布式服務框架總體架構與功能 69
2.1 麵嚮服務的體係架構(SOA) 69
2.1.1 麵嚮服務架構範式 69
2.1.2 服務拆分原則 71
2.2 分布式服務框架現實需求 72
2.3 分布式服務框架總體架構及所需的技術概述 72
2.4 本章小結 74
第3章 分布式服務框架序列化與反序列化實現 75
3.1 序列化原理及常用的序列化介紹 75
3.2 Java默認的序列化 77
3.3 XML序列化框架介紹 80
3.4 JSON序列化框架介紹 82
3.5 Hessian序列化框架介紹 87
3.6 protobuf序列化框架介紹 88
3.7 protostuff序列化框架介紹 93
3.8 Thrift序列化框架介紹98
3.9 Avro序列化框架介紹 100
3.9.1 Avro介紹 100
3.9.2 Avro IDL語言介紹 101
3.9.3 Schema定義介紹 103
3.9.4 Maven配置及使用IDL與Schema自動生成代碼 103
3.9.5 Avro序列化/反序列化實現 105
3.10 JBoss Marshalling序列化框架介紹 110
3.11 序列化框架的選型 112
3.12 實現自己的序列化工具引擎 113
3.13 本章小結 118
第4章 實現分布式服務框架服務的發布與引入 119
4.1 Spring Framework框架概述119
4.1.1 Spring Framework介紹 119
4.1.2 Spring Framework周邊生態項目介紹 121
4.2 FactoryBean的秘密 122
4.2.1 FactoryBean的作用及使用場景 123
4.2.2 FactoryBean實現原理及示例說明 124
4.3 Spring框架對於已有RPC框架集成的支持 127
4.3.1 Spring支持集成RPC框架介紹127
4.3.2 基於RmiProxyFactoryBean實現RMI與Spring的集成128
4.3.3 基於HttpInvokerProxyFactoryBean實現HTTP Invoker與Spring的集成 131
4.3.4 基於HessianProxyFactoryBean實現Hessian與Spring的集成 133
4.4 實現自定義服務框架與Spring的集成 136
4.4.1 實現遠程服務的發布 136
4.4.2 實現遠程服務的引入 144
4.5 在Spring中定製自己的XML標簽 150
《精益微服務:優雅應對高並發與復雜業務的實踐指南》 在數字化浪潮席捲全球的今天,如何構建能夠靈活應對市場變化、支撐海量用戶訪問、並能有效管理復雜業務係統的軟件架構,已成為企業技術戰略的核心議題。本書並非聚焦於某一個特定的技術棧或框架,而是緻力於深入剖析現代微服務架構的設計理念、核心要素及其在應對“億級流量”和“復雜業務”場景下的係統性解決方案。我們將帶領讀者進行一場“架構探險”,從理論基石齣發,逐步構建起一套“輕量級”且“高內聚、低耦閤”的微服務體係,使其在技術演進的浪潮中保持敏捷與韌性。 核心理念:何為“精益”的微服務? “精益”是本書的靈魂。它強調的是在追求技術卓越的同時,最大化地減少浪費,聚焦於核心業務價值的實現。在微服務架構中,“精益”體現在: 服務邊界的清晰定義: 避免服務內聚性過低或服務間耦閤過強。我們將探討如何基於領域驅動設計(DDD)等方法論,識彆齣真正獨立的業務限界上下文(Bounded Context),從而劃分齣職責單一、內聚性強的微服務。這不僅能降低開發和維護的復雜度,更能提升團隊的自治性與響應速度。 技術選型的適度與靈活: 摒棄“萬能框架”的思維,鼓勵根據服務的具體場景和需求,選擇最閤適的技術棧。這意味著,並非所有服務都必須采用同一套技術,而是在保證整體可管理性的前提下,允許技術異構性。我們將探討如何平衡技術多樣性與統一治理。 運維的自動化與智能化: 精益微服務離不開高效的運維支撐。本書將深入討論如何通過自動化部署、監控、告警、日誌收集和故障恢復,極大地降低人力成本,提高係統的穩定性和可用性。 持續交付與快速迭代: 精益的核心在於快速反饋與持續改進。我們將強調持續集成(CI)和持續交付(CD)流水綫的重要性,以及如何通過小步快跑的方式,實現對市場變化的快速響應。 應對“億級流量”的架構挑戰 支撐“億級流量”是衡量一個分布式係統是否健壯的關鍵指標。本書將從多個維度係統性地闡述應對這一挑戰的策略: 高可用設計: 確保服務在任何情況下都能對外提供正常服務。我們將深入研究負載均衡、服務冗餘、故障轉移、容錯機製(如熔斷、降級、限流)等關鍵技術,並探討如何在設計初期就將高可用性融入服務架構。 高性能之道: 提升係統的處理能力與響應速度。這包括但不限於: 異步化處理: 利用消息隊列(如Kafka、RabbitMQ)實現服務間的解耦與異步通信,將耗時操作放入後颱處理,釋放主綫程,提高並發吞吐量。 緩存策略: 深入探討分布式緩存(如Redis、Memcached)在提升讀性能方麵的作用,以及緩存一緻性、穿透、擊穿、雪崩等問題的解決方案。 數據存儲優化: 針對高並發場景下的數據庫瓶頸,我們將介紹讀寫分離、分庫分錶、索引優化、NoSQL數據庫的適用性分析以及數據一緻性方案。 網絡通信優化: 探索更高效的RPC框架(如gRPC)以及HTTP/2等協議在提升服務間通信效率上的優勢。 彈性伸縮: 能夠根據流量的變化自動調整資源。我們將講解如何利用容器化技術(如Docker,但不限於Docker本身)與Kubernetes等容器編排平颱,實現服務的自動化擴縮容,確保係統在高峰期穩定運行,在低榖期節約成本。 流量治理: 精準控製和引導服務間的流量。本書將詳細介紹API網關的作用,如何實現請求路由、身份認證、授權、日誌記錄、流量監控以及動態流量調度,確保流量的有序、高效流動。 駕馭“復雜業務”的實踐智慧 現代業務係統往往龐大且復雜,微服務架構為拆解復雜性提供瞭新的視角。本書將專注於如何在實踐中有效地管理和演進復雜的微服務體係: 領域驅動設計(DDD)的應用: DDD是微服務設計的基石。我們將詳細解析DDD的核心概念,如領域、子域、限界上下文、聚閤根、實體、值對象等,並闡述如何運用DDD來指導微服務的劃分、服務間通信模式的設計以及數據模型的構建,從而更好地映射業務的真實模型。 服務間通信模式的選擇: 在微服務架構中,服務間的通信是關鍵。我們將深入分析同步通信(如RESTful API)與異步通信(如消息隊列)的優缺點,以及事件驅動架構(EDA)在應對復雜業務流程、實現最終一緻性方麵的強大能力。 分布式事務的處理: 在拆分的服務中,保持數據的一緻性是一個巨大的挑戰。本書將詳細介紹常見的分布式事務解決方案,如兩階段提交(2PC)、三階段提交(3PC),但更側重於“最終一緻性”的理念,深入探討補償事務、TCC(Try-Confirm-Cancel)、 Saga模式等更適閤微服務場景的解決方案。 統一的身份認證與授權: 隨著服務數量的增加,如何統一管理用戶身份和訪問權限至關重要。我們將探討OAuth 2.0、OpenID Connect等標準協議,以及如何設計一套高效、安全的身份認證和授權中心。 可觀測性(Observability): 理解和調試復雜的分布式係統是棘手的。本書將強調日誌聚閤(如ELK Stack、Loki)、分布式追蹤(如Jaeger、Zipkin)和度量監控(如Prometheus、Grafana)的重要性,以及如何構建一套強大的可觀測性體係,幫助開發者快速定位問題,優化性能。 服務治理與生命周期管理: 隨著服務數量的增長,如何對服務進行有效的注冊、發現、配置管理、版本控製和灰度發布,成為保障係統穩定運行的關鍵。我們將探討服務注冊中心(如Consul、Nacos)、配置中心(如Spring Cloud Config、Apollo)以及API網關在服務治理中的角色。 “輕量級”架構的構建哲學 “輕量級”並非意味著功能的缺失,而是追求簡單、高效、易於理解和維護的架構。本書將踐行以下原則: 約定優於配置: 盡可能地采用成熟的、行業內廣泛接受的約定和模式,減少不必要的配置項,降低學習成本。 最小化依賴: 每一個服務都應盡可能地減少對外部組件的依賴,使其更獨立、更易於部署和測試。 自動化一切: 從開發、測試、部署到監控,盡可能地實現自動化,減少人為乾預,提高效率和可靠性。 關注核心業務: 將有限的資源和精力投入到實現核心業務價值上,避免過度工程化和不必要的復雜性。 本書的價值與讀者收獲 本書並非一本簡單的技術手冊,而是一次麵嚮高並發、復雜業務場景的“架構探險”。通過深入剖析“精益微服務”的設計理念,讀者將獲得: 係統性的架構設計思維: 理解如何從宏觀到微觀,係統地設計一套健壯、可擴展、高可用的微服務架構。 應對高並發的實戰技能: 掌握在實際項目中處理“億級流量”所需的關鍵技術和策略。 駕馭復雜業務的智慧: 學習如何利用DDD、事件驅動等方法論,有效地拆解和管理復雜的業務係統。 構建輕量級、高內聚微服務的實踐經驗: 避免陷入過度設計,打造真正易於維護和演進的係統。 對微服務生態的深刻理解: 瞭解在微服務架構中,各種組件(API網關、服務注冊中心、消息隊列、分布式追蹤等)如何協同工作,形成一個完整的體係。 本書適閤有一定軟件開發基礎,並希望在架構層麵尋求突破的開發者、架構師、技術經理以及對構建高並發、高可用、可擴展的分布式係統充滿興趣的從業者。我們將一同探索微服務架構的精髓,用“精益”的思維,打造麵嚮未來的、優雅且強大的軟件係統。