具體描述
編輯推薦
適讀人群 :高級工程師、運維工程師、架構師、技術經理、技術總監、CTO
架構即未來
移動互聯網、雲計算、大數據時代,麵臨更多的技術挑戰問題,設計模式已經從單一的OO問題領域嚮外擴張延伸,設計模式的範疇不會局限於語言本身,更多擴展到架構設計領域
我個人對編程語言沒有偏見,它們各有所長,大傢互相學習。有實力的程序員不需要通過編程語言來找優越感,都在踏實地研究技術。我接觸的優秀程序員無論是對C++、Java,還是對C#等都沒有編程語言的歧視。況且底層的算法、數據結構和設計模式都沒有編程語言限製。
架構師和技術專傢 程序員中的精英群體,技術領袖,也是公司中受人尊敬的群體。
十年磨一劍 精華知識
本書介紹瞭雲計算時代、zui經典的24種架構設計模式,包含基於雲平颱設計架構麵臨的問題以及典型的解決方案,另外還有10個架構設計指南。
24種經典的設計模式包括:高並發、健康健康、消息編排、架構伸縮、緩存、消息推送、大數據存儲和優化、安全令牌等架構設計的關鍵問題,是一本zui近幾年難得的架構與設計模式圖書。
本書內容不受編程語言限製,可以根據需要使用.NET、Java、PHP、Node.js、Go等。雲計算平颱可以是Azure、AWS、阿裏雲等共有雲,也可以是私有雲平颱。
推薦本書給高級工程師、運維工程師、架構師、技術經理、技術總監、CTO學習使用。 內容簡介
本書主要介紹瞭雲計算時代、zui經典的24種架構設計模式,包含基於雲平颱設計架構麵臨的問題以及典型的解決方案,另外還有10個架構設計指南。
24種經典的設計模式包括高並發、健康健康、消息編排、架構伸縮、緩存、消息推送、大數據存儲和優化、安全令牌等架構設計的關鍵問題,是一本zui近幾年難得的架構與設計模式圖書。
本書內容不受編程語言限製,可以根據需要使用.NET、Java、PHP、Node.js、Go等。雲計算平颱可以是Azure、AWS、阿裏雲等共有雲,也可以是私有雲平颱。
推薦本書給高級工程師、運維工程師、架構師、技術經理、技術總監、CTO學習使用。 作者簡介
Alex Homer是微軟PP小組的技術作者。在加入微軟之前,他做瞭多年的軟件設計和培訓工作。他在小組的主要精力花費在設計模式和架構方麵,還編寫指南和例子代碼。他的博客地址是http://blogs.msdn.com/alexhomer/。
John Sharp 是Content Master (www.contentmaster.com)的首席技術專傢。專注於使用.NET框架和Azure平颱開發應用係統。John寫過《Microsoft Visual C# Step By Step》 和 《Microsoft WCF Step By Step》。John講授過許多培訓課程,也寫過許多覆蓋諸多領域,比如C和C++編程、SQL Server數據庫管理以及麵嚮服務架構的技術文章。他獲得瞭倫敦大學帝國理工學院的計算機科學學位。
Larry Brader是微軟模式與實踐小組的高級測試工程師,負責PP小組不同項目的測試工作,專注於客戶端和服務器端。此外他對於基於ALM生成測試指南也有濃厚的興趣。
Masashi Narumoto熱衷於將互聯網作為知識庫的想法。互聯網已經顯著改變瞭我們的生活,毫無疑問還會帶來巨大的變化。他的目標是匯聚大傢的智慧以更有意義的形式提供齣來,方便更多的人學習。在就職於模式與實踐小組期間,他作為程序經理負責並完成瞭多個Azure指南的係列文檔的編寫工作,現在關注於大數據領域。之前,他花費瞭20多年時間來開發和谘詢各種不同的解決方案,尤其是零售和製造業。Masashi的博客地址是http://blogs.msdn.com/masashi_narumoto,推特賬號是@dragon119。
Trent Swanson是Full Scale 180的軟件架構師,也是創始人之一,主要使用雲計算技術。他一開始就使用Azure技術,幫助全球各地的客戶來構建、部署和管理Azure上的雲計算解決方案。無論是遷移現有應用到雲計算平颱還是構建全新應用,他都享受整個交付伸縮的、可靠的和可管理的雲計算解決方案。 精彩書評
架構即未來
移動互聯網、雲計算、大數據時代,麵臨更多的技術挑戰問題,設計模式已經從單一的OO問題領域嚮外擴張延伸,設計模式的範疇不會局限於語言本身,更多擴展到架構設計領域
我個人對編程語言沒有偏見,它們各有所長,大傢互相學習。有實力的程序員不需要通過編程語言來找優越感,都在踏實地研究技術。我接觸的優秀程序員無論是對C++、Java,還是對C#等都沒有編程語言的歧視。況且底層的算法、數據結構和設計模式都沒有編程語言限製。
架構師和技術專傢 程序員中的精英群體,技術領袖,也是公司中受人尊敬的群體。
十年磨一劍 精華知識
本書介紹瞭雲計算時代、zui經典的24種架構設計模式,包含基於雲平颱設計架構麵臨的問題以及典型的解決方案,另外還有10個架構設計指南。
24種經典的設計模式包括:高並發、健康健康、消息編排、架構伸縮、緩存、消息推送、大數據存儲和優化、安全令牌等架構設計的關鍵問題,是一本zui近幾年難得的架構與設計模式圖書。
本書內容不受編程語言限製,可以根據需要使用.NET、Java、PHP、Node.js、Go等。雲計算平颱可以是Azure、AWS、阿裏雲等共有雲,也可以是私有雲平颱。
推薦本書給高級工程師、運維工程師、架構師、技術經理、技術總監、CTO學習使用。
微軟P&P;模式與實踐小組
微軟P&P;小組鼎鼎的大名是微軟模式與實踐小組親自打造的,為開發基於雲計算架構應用程序遇到的常見問題提供瞭經典的解決方案,並將常用的經典方案歸類為設計模式。
微軟模式與實踐小組是微軟zui早的開源社區團隊之一,主要關注於把行業經典設計模式與實際項目開發相結閤的技術研究。
微軟早期眾多的開源項目都是由該小組主導完成,同時還編寫瞭許多經典書籍和代碼。
如果你堅持研究.NET技術10年以上,就一定看過微軟P&P;小組的學習資料。
在.NET領域10年以上的程序員應該不會對P&P;小組陌生。其技術實力非常強,國內很多.NET架構師都是看P&P;小組的文章和代碼成長起來的。
我“菜鳥”階段,第yi次看完P&P;小組的文章就成為其忠實的粉絲,至今依然嚮技術圈子的朋友和新青年架構班的同學推薦他們的資料。
10年前P&P;小組開源的Enterprise Library代碼、分布式與安全的文檔,到後來的IOC容器Unity等,都是精華知識的沉澱。
23種設計模式
Erich Gamma等在《設計模式》一書種介紹瞭23種經典的設計模式。
本書介紹的24種經典設計模式包含高並發、健康健康、消息編排、架構伸縮、緩存、消息推送,大數據存儲和優化、安全令牌等架構設計的關鍵問題,是難得的的設計模式書籍,可以作為zui經典的Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides 4大金剛的《設計模式》的擴展閱讀資料。
24種雲計算架構模式
本書介紹的24種經典設計模式包含高並發、健康健康、消息編排、架構伸縮、緩存、消息推送、大數據存儲和優化、安全令牌等架構設計的關鍵問題,是難得的設計模式圖書。
(1)緩存駐留模式 (2)斷路器模式
(3)事務補償模式 (4)競爭消費者模式
(5)計算資源閤並模式 (6)命令和職責分離(CQRS)模式
(7)事件溯源模式 (8)外部配置存儲模式
(9)聯閤身份模式 (10)門衛模式
(11)健康終結點監控模式 (12)索引錶模式
(13)領導選舉模式 (14)物化視圖模型
(15)管道和過濾器模式 (16)優先級隊列模式
(17)基於隊列的負載均衡模式 (18)重試模式
(19)運行時重配置模式 (20)調度器代理監控模式
(21)分片模式 (22)靜態內容托管模式
(23)限流模式 (24)令牌模式
24種架構設計模式都有對應的例子代碼,可以下載參考。Java程序員也可以從中獲益良多。
10個架構設計指南
除瞭詳細介紹瞭24種雲計算架構設計模式以外,這裏還介紹瞭實際架構設計中的重要原則,歸類為10個方麵,可作為大傢進行架構設計時的參考。
(1)異步消息傳輸 (2)自動伸縮指南
(3)緩存指南 (4)計算分區指南
(5)數據一緻性指南 (6)數據分區指南
(7)數據復製與同步指南 (8)遠程監控指南
(9)多數據中心部署指南 (10)服務調用統計指南 目錄
目錄
Table of Contents
第1章 緩存駐留模式 1
背景和問題 1
解決方案 1
相關模式與指南 5
更多信息 5
第2章 斷路器模式 6
背景和問題 6
解決方案 6
問題與思考 8
何時使用此模式 10
相關模式和指南 14
第3章 補償事務模式 15
背景和問題 15
解決方案 16
問題與思考 16
何時使用此模式 17
相關模式和指南 18
第4章 競爭消費者模式 19
背景和問題 19
解決方案 19
問題與思考 20
何時使用此模式 21
第5章 計算資源閤並模式 25
背景和問題 25
解決方案 26
問題與思考 26
應用場景 28
相關模式和指南 32
擴展閱讀 32
第6章 命令和查詢職責分離(CQRS)模式 33
背景和問題 33
解決方案 34
問題與思考 35
何時使用此模式 36
第7章 事件溯源模式 41
背景和問題 41
解決方案 41
問題與思考 43
何時使用此模式 44
相關模式和指南 47
第8章 外部配置存儲模式 48
背景和問題 48
解決方案 48
問題與思考 49
何時使用此模式 50
關聯模式和指南 56
第9章 聯閤身份模式 57
背景和問題 57
解決方案 57
問題與思考 59
何時使用此模式 59
相關模式和指南 61
更多信息 61
第10章 門衛模式 62
背景和問題 62
解決方案 62
問題與思考 63
何時使用此模式 63
相關模式和指南 64
第11章 健康終端監控模式 65
背景和問題 65
解決方案 65
問題與思考 67
何時使用此模式 68
相關模式和指南 71
更多信息 71
第12章 索引錶模式 72
背景和問題 72
解決方案 73
問題與思考 75
何時使用此模式 76
相關模式與指南 77
第13章 領導者選舉模式 79
背景和問題 79
解決方案 79
問題與思考 80
何時使用此模式 80
相關模式與指南 85
更多信息 85
第14章 實體化視圖模式 86
背景和問題 86
解決方案 86
問題與思考 87
何時使用此模式 88
相關模式與指南 89
第15章 管道過濾器模式 90
背景和問題 90
解決方案 91
問題與思考 92
何時使用此模式 93
相關模式與指南 97
第16章 優先隊列模式 98
背景和問題 98
解決方案 98
問題與思考 100
何時使用此模式 101
相關模式與指南 103
第17章 基於隊列的負載均衡模式 105
背景和問題 105
解決方案 105
問題與思考 106
何時使用此模式 107
相關模式和指南 108
第18章 重試模式 109
背景和問題 109
解決方案 109
問題與思考 111
何時使用此模式 112
相關模式與指南 114
更多信息 114
第19章 運行時重配模式 115
背景和問題 115
解決方案 115
問題與思考 116
何時使用此模式 117
相關的模式和指南 120
更多的信息 121
第20章 調度器代理管理者模式 122
背景和問題 122
解決方案 122
問題與思考 125
何時使用此模式 125
相關模式與指南 128
更多信息 129
第21章 分片模式 130
背景和問題 130
解決方案 130
分片策略 131
問題與思考 135
何時使用此模式 136
相關模式與指南 138
第22章 靜態內容托管模式 139
背景和問題 139
解決方案 139
問題與思考 139
何時使用此模式 140
相關模式與指南 143
更多信息 143
第23章 限流模式 144
背景和問題 144
解決方案 144
問題與思考 146
何時使用此模式 147
相關模式與指南 148
第24章 令牌秘鑰模式 149
背景和問題 149
解決方案 149
問題與思考 150
何時使用此模式 152
相關模式和指南 154
更多信息 154
第25章 異步消息傳輸指南 155
消息隊列本質 155
異步消息傳遞的場景 158
實現異步消息傳遞的注意事項 159
相關模式和指南 161
更多信息 162
第26章 自動伸縮指南 163
什麼是自動伸縮 163
實施自動伸縮的場景 164
實施自動伸縮的注意事項 164
Azure解決方案中的自動伸縮 165
相關模式和指南 167
更多信息 167
第27章 緩存指南 168
雲應用程序中的緩存 168
使用緩存的注意事項 170
管理緩存並發 172
相關模式和指南 173
更多信息 173
第28章 計算分區指南 174
Azure計算選項概述 174
計算界限設計指南 174
組件分離計算實例 176
相關模式與指南 177
更多信息 178
第29章 數據一緻性指南 179
管理數據一緻性 179
最終一緻性實現的注意事項 182
相關模式與指南 185
第30章 數據分區指南 186
為什麼需要數據分區 186
分區策略 187
設計可擴展性的數據分區 190
設計分區以提升查詢性能 191
分區可用性設計 192
問題與思考 192
相關模式與指南 194
更多信息 194
第31章 數據復製與同步指南 195
為什麼要數據復製及同步 195
復製和同步數據 195
數據復製和同步的注意事項 198
實現同步 200
相關模式與指南 201
更多信息 201
第32章 遠程監控指南 202
為什麼遠程監控很重要 202
監控 202
語義日誌記錄 204
遙測 205
遠程監控的注意事項 205
相關模式與指南 207
更多信息 208
第33章 多數據中心部署指南 209
為什麼部署到多個數據中心 209
多數據中心部署的思考 213
相關模式及指南 217
第34章 服務調用統計指南 218
為什麼服務調用統計很重要 218
服務調用統計的場景 218
服務調用統計的注意事項 220
示例 221
相關模式及指南 222
更多信息 222 精彩書摘
架構即未來
移動互聯網、雲計算、大數據時代,麵臨更多的技術挑戰問題,設計模式已經從單一的OO問題領域嚮外擴張延伸,設計模式的範疇不會局限於語言本身,更多擴展到架構設計領域
我個人對編程語言沒有偏見,它們各有所長,大傢互相學習。有實力的程序員不需要通過編程語言來找優越感,都在踏實地研究技術。我接觸的優秀程序員無論是對C++、Java,還是對C#等都沒有編程語言的歧視。況且底層的算法、數據結構和設計模式都沒有編程語言限製。
架構師和技術專傢 程序員中的精英群體,技術領袖,也是公司中受人尊敬的群體。
十年磨一劍 精華知識
本書介紹瞭雲計算時代、zui經典的24種架構設計模式,包含基於雲平颱設計架構麵臨的問題以及典型的解決方案,另外還有10個架構設計指南。
24種經典的設計模式包括:高並發、健康健康、消息編排、架構伸縮、緩存、消息推送、大數據存儲和優化、安全令牌等架構設計的關鍵問題,是一本zui近幾年難得的架構與設計模式圖書。
本書內容不受編程語言限製,可以根據需要使用.NET、Java、PHP、Node.js、Go等。雲計算平颱可以是Azure、AWS、阿裏雲等共有雲,也可以是私有雲平颱。
推薦本書給高級工程師、運維工程師、架構師、技術經理、技術總監、CTO學習使用。 前言/序言
序言
Preface
本書由微軟模式與實踐小組(微軟P&P;小組)親自打造,得到瞭許多社區開發者的支持,為開發基於雲計算架構的應用程序常見問題提供瞭解決方案。
本書指南
? 介紹實現雲計算應用時,尤其是托管在Azure雲平颱時使用這些設計模式的好處。
? 討論雲計算設計模式的經典問題和解決方案,以及它們如何與Azure關聯到一起。
? 展示如何使用Azure功能實現這些模式,強調其優點與顧慮。
? 通過描述如何把這些設計模式應用到雲計算應用架構中以及它們之間的關係來描繪知識體係的宏偉藍圖。
本書介紹的主題適用於所有的分布式係統,無論是托管在Azure中還是其他雲計算平颱中。
我們的目的並非提供設計模式的詳盡集閤,而是選擇瞭對雲計算應用zui有用處的設計模式——尤其考慮到在用戶中的流行度。本書不是詳細介紹Azure平颱功能的指南。要學習Azure可以參考http://azure.com。
本書內容
結閤開發社區的代錶性反饋,我們把雲計算應用開發領域zui常見的問題歸納為8類。
類彆 描述
可用性 可用性定義為係統正常工作的時間比例。它受係統錯誤、基礎架構問題、各種工具以及係統負載的影響。通常根據係統正常運行的時間來衡量。雲計算應用為用戶提供瞭服務級彆協議(SLA),它指的是應用程序必須以zui大化可用性的方式設計和實現
數據管理 數據管理是雲應用的關鍵部分,並且影響質量特性。由於諸如性能、伸縮性或者可用性等原因,數據通常存儲在不同服務器的不同位置上,這些也會帶來新的挑戰。例如,數據一緻性必須是可維護的,並且數據需要進行跨區域同步
續錶
類彆 描述
設計和實現 良好的設計會在組件設計和部署裏包含諸如一緻性和內聚性、簡化管理和部署的可維護性,以及允許組件和子係統被其他應用使用的重用性。設計和實現階段的決策對於雲計算應用和服務的總體質量及成本有重大影響
消息 雲計算應用的分布式特性需要一個連接組件和服務的消息基礎架構,理想情況下是鬆耦閤方式,便於zui大化伸縮性。異步消息被廣泛使用,而且提供瞭許多好處,同時也帶來瞭許多挑戰,比如消息順序、毒消息管理、冪等性等
管理和監控 雲計算應用運行在遠程數據中心中,我們無法完全控製基礎架構或者操作係統。相比私有雲,這種情況使得管理工作更加睏難。隻有應用暴露運行時的信息,管理員和運營人員纔可以管理和監控係統;隻有支持修改業務需求和自定義,纔不需要應用停止和創新部署
性能和伸縮性 性能是係統執行特性操作的響應性指標,而伸縮性是係統處理新增壓力但不會影響性能與可用性的能力。雲計算應用通常會遇到變化的工作負載和峰值,這種情況通過不可預測,特彆是在多租戶場景下。相反,應用應該能夠通過伸縮來滿足峰值的需要,而且當需要下降時迴退。伸縮性不隻是關注計算實例,還關注其他要素,比如數據存儲、消息基礎架構等
彈性 彈性是係統優雅地處理錯誤和恢復係統的能力。雲計算主機的基本特性為:應用通常是多租戶的,使用共享平颱服務,競爭資源和帶寬,通過互聯網通信,運行在商用硬件上。這意味著將會齣現更多短暫和永久的錯誤。探測錯誤,並快速和高效地恢復對於維護彈性來說必不可少
安全 安全是係統阻止設計使用範圍外的惡意和意外操作的能力,是阻止泄露和丟失數據的能力。雲計算應用暴露在互聯網上,跨越信任的私有雲環境邊界,通常對外開放,因此可能會齣現不信任的用戶。應用必須以安全的方式設計和部署,避免惡意攻擊,限製隻有支持的用戶可以訪問,並且保護敏感數據
對於每個類彆,我們都創建瞭關聯的指南和文檔,以幫助開發者解決常見的共同問題。這些包括以下3方麵內容。
? 24種設計模式。這是雲托管應用非常有用的24種設計模式。每個設計模式提供瞭描述上下文及其問題,解決方案及其問題,使用模式的公共格式,以及基於Azure平颱的例子。每種模式也包含連接到其他相關模式的鏈接。
? 10個指南主題。提供瞭開發雲計算應用所需的基本知識、實踐經驗與技巧。每個主題都詳實地介紹瞭這些知識。
? 例子程序。演示瞭設計模式的使用過程。我們可以使用這些代碼參考設計自己特定的需求代碼。
設計模式
設計模式被分配到一個或者多個類彆中。完整的設計模式列錶如下所示。
模式 描述
緩存駐留模式 根據需要從數據存儲器加載數據。此模式可以用來改進性能,還可以用於維護緩存和後颱數據庫之間的數據一緻性
斷路器模式 當連接遠程服務或資源時,可能導緻不定時間恢復係統的錯誤。此模式可以用於改進係統的穩定性和彈性
事務補償模式 如果一個或者多個操作失敗,就會取消執行的一係列工作,它定義瞭一組zui終一緻性模型的操作。遵從zui終一緻性模型的操作在雲托管應用中非常常見,通常都會實現復雜的業務過程和工作流
競爭消費者模式 允許多個並發的消費者在相同的消息通道上處理接收的消息。此模式允許係統並發處理多個消息以優化係統的吞吐量,改進係統的伸縮性和可用性,平衡工作負載
計算資源閤並模式 閤並多個任務或者操作到單個計算單元裏。此模式可以增加計算資源的使用率,降低雲計算應用中計算處理的成本和管理開銷
命令和職責分離(CQRS)模式 通過隔離接口來分離更新和讀操作。此模式可以zui大化性能、伸縮性和安全性,通過高度的靈活性支持係統的進化,在領域級彆阻止引起閤並衝突的更新命令
事件源模式 使用隻能追加的存儲庫來記錄領域裏發生在數據庫方麵的完整操作事件序列,而不是僅僅保存當前狀態,讓存儲庫可以用來創建特定的對象狀態。此模式可以通過避免同步數據模型和業務模型的需求來簡化復雜領域裏的任務,改進性能、伸縮性和響應性,提供事務性數據的一緻性,維護可以支持補償操作的完整審計追蹤和曆史信息
外部配置存儲模式 把配置信息從應用部署包移動到一個中心位置。此模式可以提供更簡單的管理和配置數據控製、跨應用和應用實例共享配置的機會
聯閤身份模式 把驗證委托給一個外部身份標識提供器。此模式可以簡化部署,zui小化用戶管理的需求,並且改進應用的用戶體驗
門衛模式 通過在客戶端和應用與服務之間使用特定的作為代理的宿主實例來保護應用和服務,驗證並保護請求,且在它們之間傳遞請求消息。此模式可以提供額外的安全層,並且降低係統受攻擊的層麵
健康終結點監控模式 在應用中實現功能檢查,可以通過暴露的終結點定時訪問監控數據。此模式可以幫助檢驗應用和服務是否正確執行
索引錶模式 在頻繁訪問的數據存儲庫特定字段上齣aung時就索引。此模式可以通過允許應用更快速地從數據存儲庫查詢數據改進查詢性能
續錶
模式 描述
領導選舉模式 選舉一個實例作為領導來承擔管理其他實例的職責,讓其協調分布式節點的任務執行。此模式可以幫助確保任務不會與其他任務衝突,避免資源爭用,或者被其他執行的任務乾擾
物化視圖模型 當數據格式並非查詢操作期望的格式時,提前為一個或者多個數據存儲器中的數據生成視圖。此模式可以幫助實現高效查詢和數據提取,改進應用程序的性能
管道和過濾器模式 把一個復雜的任務分解為一係列可以單獨執行的可重用的任務元素。此模式可以通過獨立部署和伸縮任務元素來改進性能、伸縮性和可重用性
優先級隊列模式 為發送給服務的請求消息設置優先級,這樣高優先級的請求可以被更快地處理。此模式在給獨立類型的客戶端提供不同服務級彆擔保時非常有用
基於隊列的負載均衡模式 在任務和調用的服務之間使用隊列作為緩衝區來平滑斷斷續續的可能導緻服務失敗或者任務超時的超量負載。此模式可以幫助zui小化峰值壓力對於任務和服務的可用性和響應能力的影響
重試模式 當連接服務或者網絡資源時,通過允許短暫錯誤重試操作來允許應用程序處理臨時的失敗。此模式可以用來改進應用的穩定性
運行時重配置模式 設計應用程序使其可以無需重新部署,或者重新啓動應用來重新配置。這可以用於維護可用性和zui小化宕機時間
調度器代理監控模式 協調跨分布式服務和其他資源的集閤。如果某個操作失敗,則嘗試透明地處理錯誤;或者如果係統無法從錯誤中恢復,則取消執行工作産生的影響。此模式可以通過對短暫異常、長期錯誤和處理錯誤啓用恢復和重試操作增加係統的彈性
分片模式 把數據庫水平分割為不同的區片進行存儲。當存儲和訪問海量數據時,此模式可以改進伸縮性
靜態內容托管模式 部署靜態內容到可以直接發送給客戶端的雲端存儲服務上。此模式可以減少對於昂貴計算實例的需求
限流模式 控製單個應用實例、單個租戶或者整個服務消耗的資源數量。此模式可以允許係統繼續工作,並且滿足服務級彆協議,甚至對資源增加極限負載時也可以正常工作
令牌模式 為瞭在應用程序代碼裏支持卸載數據傳輸操作,使用令牌或者秘鑰來限製對特定資源或服務的訪問。此模式在使用雲托管存儲係統或者隊列時特彆有用,並且可以zui小化成本,zui大化伸縮性和性能
主題
這些主題與特定的應用程序開發相關,如下圖所示。
這個指南包含下麵的主題。
主題 描述
異步消息通信指南 消息通信是許多分布式係統采用的關鍵策略,比如雲計算。它允許應用和服務彼此通信並協同工作,且可以幫助構建可伸縮的和彈性的解決方案。消息通信支持異步操作,允許我們解耦服務調用和宿主進程
自動化伸縮指南 持續監控性能和伸縮係統以適應波動的工作負載、滿足目標需求並且優化運營成本,這個過程可能需要大量的人力成本。這些工作可能無法人工完成。這也是自動化伸縮的用武之地
緩存指南 緩存是一種常見的改進係統性能和伸縮性的技術,它通過把高頻率訪問的數據拷貝到接近應用的數據存儲區中來實現加速。緩存當應用程序重復讀取相同的數據時zui高效,特彆是原始數據存儲區的速度相對緩存較慢的時候,它受製於高級彆的爭用,或者說它不會導緻網絡延遲
計算分區指南 當部署應用程序到雲端時,很可能采用把服務和組件根據使用情況分彆部署的方式,以便在維護伸縮性、性能、可用性和應用安全時zui小化運行成本
數據一緻性指南 雲應用通常使用的數據分散存儲在不同的存儲區裏。管理和維護數據一緻性變得尤為重要,尤其是齣現並發性和可用性問題時。我們通常需要在並發性和一緻性之間取捨。這意味著我們在設計解決方案時會考慮zui終一緻性,而不會追求應用程序所有時刻都處於完全一緻性狀態
數據分區指南 在許多大型伸縮解決方案中,數據被分割到不同的可以單獨管理和訪問的分區中。必須仔細選擇這些分區策略以便zui小化壞處zui大化好處。分區可以幫助我們改進伸縮性,降低爭用,並且優化性能
續錶
主題 描述
復製和同步數據指南 當部署應用到多個數據中心,比如雲和私有雲中時,為瞭zui大化可用性和性能、確保一緻性、zui小化數據傳輸成本,就必須考慮如何在多個節點同步數據
遠程監控指南 絕大多數應用都會包含診斷功能特性,這些特性可以生成自定義監控和調試信息,尤其是當錯誤發生的時候。這通常稱為監控儀錶盤,是通過添加事件和錯誤處理代碼到應用程序中來實現的。收集遠程信息的過程通常稱為遙感監測
多數據中心部署指南 在多個數據中心部署應用有許多好處,比如增加可用性、更好的跨地區用戶體驗。然而,還有一些挑戰要解決,比如數據同步和監管限製
服務調用統計指南 我們可能需要統計應用或者服務的調用信息以便計劃、調整未來的需求策略,瞭解用戶如何使用係統,或者對用戶、組織部門或者客戶計費。這些都是常見的需求,對大公司和獨立軟件供應商及服務商尤其如此
例子應用
10個例子程序演示瞭本書中介紹的一些模式實現過程,大傢可以下載到本地運行,或者部署到Azure訂閱賬號裏測試。要獲取並運行這些程序代碼:
(1) 可以到微軟下載中心http://aka.ms/cloud-design-patterns-sample “Cloud Design Patterns - Sample Code”頁麵下載 “Cloud Design Patterns Examples.zip”壓縮文件。
(2) 在Windows資源瀏覽器裏打開壓縮文件的屬性,選擇解壓。
(3) 把代碼復製到磁盤根目錄,比如C:PatternsGuide。不要在用戶配置文件夾裏解壓(比如Documents 或者 Downloads) ,否則可能導緻文件名過長。
(4) 在瀏覽器裏打開Readme.htm。它包含係統和例子的配置信息,在本地Azure模擬器運行例子或者部署到Azure平颱上,掌握例子展示的知識點。
本指南與例子的對應關係如下錶所示。
主題 描述
競爭消費者 這個例子包含2個組件:Sender worker role負責發送消息到Service Bus隊列,Receiver worker role負責從隊列接收消息並處理消息。Receiver worker role啓動兩個實例來模擬消費者競爭
計算資源閤並 這個例子展示瞭如何統一多個獨立的任務到單個的worker role中。運行這個例子沒有其他需求
續錶
主題 描述
外部配置存儲 這個例子展示瞭在外部存儲區保存配置文件而不是使用本地配置文件。在這個例子中,配置保存到Azure Blob Storage存儲區。Blob包含的配置信息是通過ExternalConfigurationManager類的實例監控的。當ExternalConfigurationManager對象探測到配置已修改時,它就會提醒應用程序
健康終結點監控 這個例子展示瞭如何設置檢查獨立服務健康狀態的Web終結點,它可以返迴不同的狀態碼來錶示狀態。設計終結點的目的是讓看門狗監控服務監控的,比如Azure終結點健康監控服務,但是我們也可以在瀏覽器裏打開和調用終結點,查看狀態結果。我們還可以部署和配置自己的終結點健康工具來發送請求給服務操作並分析接收到的應答消息
領導選舉 這個例子展示瞭工作角色實例如何變成領導。領導可以協調和控製其他實例的任務,這些任務應該通過某個工作角色實例執行。領導選舉通過獲取租賃權來實現
管道和過濾器 這個例子包含兩個可以執行整體處理部分操作的過濾器。這兩個過濾器組閤在一個管道中,一個過濾器的輸齣結果作為另一個過濾器的輸入數據。過濾器作為單獨的工作角色實現,Azure Service Bus總綫隊列提供瞭管道的基礎架構
優先級隊列 這個例子展示瞭如何通過Service Bus主題和訂閱實現優先級隊列。工作角色負責發送消息給主題,分配優先級給每個消息。接受工作角色從對應優先級訂閱者中讀取消息。在這個例子中,PriorityQueue.High工作角色運行兩個實例,PriorityQueue.Low隻運行一個實例。這樣就能確保高優先級消息可以更快速地被讀取
運行時重配置 這個例子展示瞭如何修改雲服務的配置而不需要重新啓動Web和worker role
靜態內容托管 這個例子展示瞭如何從公共存儲服務中快速獲取靜態內容。這個例子包含瞭一個Azure Web Role,它托管瞭包含Javascript文件和圖片的網站,部署到Azure存儲區中。這些內容通常部署到存儲賬號中,作為應用部署的一部分。但是,為瞭簡化例子,啓動程序時這些文件會被部署到存儲賬號中
令牌模式 這個例子展示瞭客戶端程序如何在獲取一個帶有權限的共享訪問前直接嚮大對象存儲區寫入數據。為瞭簡單明瞭,這個例子關注獲取和消費令牌秘鑰的機製,不會展示如何實現驗證或者安全通行
這些例子關注演示每個模式的關鍵功能特性,並不可以直接使用到生産環境。
更多信息
所有的章節都包含對於其他資源的參考,比如圖書、博客文章以及論文。如果需要,大傢可以閱讀更詳細的內容。為瞭方便大傢,這裏有一個網頁包含所有連接的文章,直接點擊http://aka.ms/cdpbibliography,大傢可以閱讀、查詢資源。
反饋和支持
問題?評論?建議?任何關於本書的反饋或者要獲取任何問題的幫助,請訪問http://wag.codeplex.com。這個社區網站的論壇是我們推薦的反饋和支持渠道,因為它允許我們大傢分享想法、問題和整個社區的解決方案。
圖書團隊
創意與項目管理: Masashi Narumoto
作者: Alex Homer、John Sharp、Larry Brader、Masashi Narumoto和Trent Swanson
開發: Julian Dominguez、Trent Swanson (Full Scale 180)、Alejandro Jezierski (Southworks)
測試: Larry Brader、Federico Boerr和Mariano Grande (Digit Factory)
性能測試: Carlos Farre、Naveen Pitipornvivat (Adecco)
文檔: Alex Homer、John Sharp (Content Master Ltd)
圖片藝術傢: Chris Burns (Linda Werner & Associates Inc)、Kieran Phelan (Allovus Design Inc)
編輯: RoAnn Corbisier
生産: Nelly Delgado
技術審閱: Bill Wilder (Author, Cloud Architecture Patterns)、Michael Wood (Cerebrata)
貢獻者: Hatay Tuna、Chris Clayton、Amit Srivastava、Jason Wescott、Clemens Vasters、Abhishek Lal、Vittorio Bertocci、Boris Scholl、Conor Cunningham、Stuart Ozer、Paolo Salvatori、Shirley Wang、Saurabh Pant、Ben Ridgway、Rahul Rai、Jeremiah Talkar、Simon Gurevich、Haishi Bai、Larry Franks、Grigori Melnik、Mani Subramanian、Rohit Sharma、Christopher Bennage、Andrew Oakley、Jane Sinyagina和Julian Dominguez、Fernando Simonazzi (Clarius Consulting)和Valery Mizonov (Full Scale 180)
微軟開發者指南顧問委員會 參與審核成員名單:Carlos dos Santos、CDS Informatica Ltda; Catalin Gheorghiu、I Computer Solutions; Neil Mackenzie、Satory Global; Christopher Maneu、Deezer.com; Paulo Morgado; Bill Wagner、Bill Wagner Software LLC;和Roger Whitehead、ProSource.It
感謝為本書的順利齣版付齣心血的每個參與者!
《現代係統構建:彈性、可擴展與安全的原則》 本書旨在為緻力於構建下一代信息係統的開發者、架構師和技術領導者提供一套全麵的指導。在瞬息萬變的數字環境中,係統的健壯性、適應性和安全性不再是可選項,而是成功的基石。本書深入探討瞭支撐現代係統設計和部署的核心原則,涵蓋瞭從基礎架構選擇到高級運維策略的方方麵麵,幫助讀者掌握構建能夠應對復雜挑戰、支持業務快速增長且值得信賴的係統的關鍵技能。 第一部分:現代係統設計之基石 這一部分將打下堅實的基礎,讓讀者理解現代係統設計的基本理念和麵臨的挑戰。 第一章:理解係統復雜性與演進需求 軟件係統的定義與演變: 從單體應用到分布式係統,迴顧軟件架構的演變曆程,分析驅動這些變化的根本原因,如業務需求的多樣化、用戶規模的指數級增長、技術更新換代的加速等。 復雜性管理: 探討軟件係統中固有的復雜性來源,包括邏輯復雜度、狀態復雜度、並發復雜度、網絡復雜度等。引入模塊化、分層、抽象等概念,闡述如何通過良好的設計來管理和降低復雜性。 係統演進的必然性: 強調沒有一成不變的係統,所有係統都需要隨著時間和環境的變化而演進。討論業務需求變化、技術革新、安全威脅升級等因素如何促使係統進行迭代和重構。 響應式設計: 引入“響應式”的概念,不僅指用戶界麵的響應,更指係統在麵對外部變化(如負載波動、故障、新需求)時能夠快速、平穩地調整自身行為的能力。 技術選型的考量: 在理解係統復雜性和演進需求的基礎上,討論如何進行初步的技術選型,考慮不同技術棧的優劣勢,以及技術選擇對係統整體架構的影響。 第二章:彈性設計:應對不確定性的藝術 彈性的定義與重要性: 明確彈性(Resilience)的含義,即係統在麵臨故障、錯誤或預期外負載時,能夠持續提供服務的能力。強調彈性是構建高可用、高可靠係統的關鍵。 故障的類型與模式: 詳細分析各種可能發生的故障,包括硬件故障(磁盤、網絡、服務器)、軟件故障(bug、死鎖、資源耗盡)、網絡分區、數據中心級故障等。理解不同故障模式對係統的影響。 容錯技術: 介紹各種容錯機製,如重試(Retries)、熔斷(Circuit Breakers)、限流(Rate Limiting)、隔離(Isolation)、降級(Degradation)等。深入分析每種技術的原理、適用場景和實現細節。 冪等性(Idempotency): 強調冪等性在分布式係統中的重要性,即同一操作執行一次和執行多次産生相同結果。講解如何設計和實現冪等操作,以應對網絡延遲、重復請求等問題。 數據一緻性與彈性: 探討在分布式環境下,如何在保證彈性的同時,權衡不同級彆的數據一緻性要求(強一緻性、最終一緻性等),以及相關的分布式事務、復製策略等。 災難恢復(Disaster Recovery): 規劃和實施災難恢復策略,包括備份與恢復、多活部署、異地容災等,確保在發生重大災難時能夠迅速恢復業務。 第三章:可擴展性設計:伴隨業務增長的擴張之路 可擴展性的維度: 區分垂直擴展(Scale Up)和水平擴展(Scale Out),並深入分析水平擴展的優勢和挑戰,以及在現代係統中為何水平擴展是主流。 負載均衡(Load Balancing): 介紹各種負載均衡算法(輪詢、最少連接、IP Hash等)及其適用場景。討論應用層、網絡層和傳輸層的負載均衡。 狀態管理與無狀態服務: 闡述無狀態服務的優勢,即不存儲客戶端會話信息,從而更容易實現水平擴展。探討如何在必要時對有狀態服務進行擴展,例如使用分布式緩存、分布式數據庫等。 數據分片與分區(Sharding/Partitioning): 深入講解如何對數據進行水平分割,以分散數據庫的讀寫壓力。分析不同的分片策略(哈希分片、範圍分片、目錄分片)及其優缺點。 異步處理與消息隊列: 介紹消息隊列(Message Queues)在解耦係統組件、削峰填榖、異步處理方麵的作用。分析不同消息隊列技術的特點(如Kafka, RabbitMQ, Pulsar)。 緩存策略: 探討不同層次的緩存(CDN、應用內緩存、數據庫緩存、分布式緩存)的設計與優化,以減少後端壓力,提升響應速度。 第二部分:關鍵技術與模式 本部分將聚焦於構建可擴展、彈性係統的具體技術和架構模式。 第四章:分布式係統中的通信模式 同步與異步通信: 分析不同通信模式(RPC, REST, 消息隊列)的優缺點,以及它們對係統性能、可用性和復雜性的影響。 服務發現與注冊: 講解服務發現機製(如Consul, Eureka, ZooKeeper)如何讓服務能夠動態地找到彼此,從而支持動態伸縮和故障轉移。 API網關: 介紹API網關的作用,包括請求路由、認證授權、限流、日誌記錄、協議轉換等,作為係統入口的統一管理點。 事件驅動架構(Event-Driven Architecture): 深入探討事件驅動架構的理念,通過事件的發布、訂閱和處理來實現組件間的解耦和響應性。 微服務通信: 專門討論微服務之間的通信模式,包括同步(如gRPC, REST)和異步(消息隊列)通信的權衡。 第五章:數據管理與一緻性 關係型數據庫的擴展: 探討關係型數據庫(如MySQL, PostgreSQL)的擴展策略,包括讀寫分離、分庫分錶、代理層等。 NoSQL數據庫的選型與實踐: 介紹不同類型的NoSQL數據庫(鍵值存儲、文檔數據庫、列族數據庫、圖數據庫),分析它們的適用場景和優劣勢。 分布式數據庫: 探討分布式數據庫(如TiDB, CockroachDB, Cassandra)的架構原理,以及它們如何提供跨節點的數據管理和一緻性保證。 數據緩存與一緻性: 再次強調緩存的重要性,並深入探討緩存一緻性問題,如讀寫穿透、緩存失效等,以及相應的解決方案(如Cache-aside, Write-through, Write-behind)。 分布式事務: 介紹分布式事務的概念,並深入分析TCC、Saga、2PC等不同分布式事務解決方案的原理、優缺點和適用場景。 第六章:安全性設計:構建可信賴的係統 安全威脅模型: 分析常見的安全威脅,如數據泄露、拒絕服務攻擊、SQL注入、跨站腳本(XSS)、中間人攻擊等。 身份認證與授權: 詳細介紹身份認證(Authentication)和授權(Authorization)機製,包括密碼學基礎、OAuth 2.0, JWT等。 數據加密: 探討靜態數據加密(Data at Rest)和傳輸中數據加密(Data in Transit)的重要性,以及TLS/SSL協議的應用。 網絡安全: 介紹防火牆、入侵檢測/防禦係統(IDS/IPS)、虛擬私有網絡(VPN)、零信任安全模型等網絡安全措施。 安全審計與監控: 強調日誌記錄、審計和安全事件監控在發現和響應安全事件中的關鍵作用。 DevSecOps: 將安全集成到軟件開發生命周期的各個環節,實現自動化安全檢查和持續安全改進。 第三部分:運維與持續交付 本部分將關注如何有效運維和持續交付現代係統。 第七章:監控、日誌與告警 監控係統的關鍵指標: 識彆和定義關鍵性能指標(KPIs)和關鍵健康指標(KHIs),涵蓋瞭資源利用率、應用性能、業務指標等。 分布式追蹤: 介紹分布式追蹤係統(如Jaeger, Zipkin)如何幫助理解請求在分布式係統中的流動路徑,定位性能瓶頸和故障。 日誌聚閤與分析: 講解如何有效地收集、存儲和分析海量日誌數據,以便於故障排查、安全審計和性能優化。 告警策略與響應: 設計有效的告警規則,避免告警風暴,並建立清晰的告警響應流程。 可觀測性(Observability): 深入探討可觀測性的概念,即通過指標(Metrics)、日誌(Logs)和追蹤(Traces)來理解係統內部狀態。 第八章:自動化與持續交付 基礎設施即代碼(Infrastructure as Code - IaC): 介紹使用IaC工具(如Terraform, Ansible, CloudFormation)來自動化基礎設施的創建、配置和管理。 持續集成(CI): 講解CI流程,包括自動化構建、測試,以及如何快速反饋代碼集成問題。 持續交付/部署(CD): 闡述CD流程,實現代碼的自動化部署到生産環境。討論藍綠部署、金絲雀發布等部署策略。 容器化與編排: 介紹Docker等容器技術如何實現應用的環境隔離和快速部署,以及Kubernetes等容器編排平颱如何管理和自動化容器化應用的部署、伸縮和運維。 配置管理: 討論如何在分布式係統中有效地管理和分發應用配置。 第九章:雲原生架構的實踐 雲原生理念: 介紹雲原生的核心理念,包括微服務、容器、服務網格、聲明式API等。 服務網格(Service Mesh): 講解服務網格(如Istio, Linkerd)在簡化微服務通信、增強可觀察性、實現流量管理和安全方麵的作用。 無服務器(Serverless)計算: 探討Serverless架構的優勢(如降低運維負擔、按需付費)和適用場景。 雲原生安全: 討論在雲原生環境中,如何實現安全性的持續集成和自動化管理。 雲環境下的彈性與可擴展: 結閤雲平颱的特性(如自動伸縮、托管服務),講解如何設計和構建更具彈性和可擴展性的雲原生應用。 總結與展望 本書的最後部分將對全書內容進行迴顧,並對未來係統架構的發展趨勢進行展望,強調持續學習和適應變化的重要性。本書的目標是讓讀者能夠理解和應用這些原則和技術,從而構建齣更加強大、可靠和高效的現代信息係統。