本書跨越云計算的各個層次,全面、系統(tǒng)地介紹了云計算的基本概念、原理和技術,并結合產業(yè)實踐介紹了云計算的新發(fā)展和相關的工程問題。本書內容涵蓋云計算的價值和技術框架、數(shù)據(jù)中心、網絡、虛擬化技術、分布式存儲技術、云數(shù)據(jù)庫、中間件和分布式部署,并從產業(yè)角度給出了對云計算的理解和思考以及云上架構設計的常用方法和佳實踐。本書適合作為高等院校計算機、電子工程及相關專業(yè)云計算課程的教材,也適合作為對云計算技術有興趣的技術人員和研究人員的參考書。
PREFACE前言Computation may someday be organized as a public utility.——John McCarthy(美國計算機科學家和認知科學家,1971年圖靈獎獲得者)讓計算以公共資源的形式更加便捷地服務于這個世界——這一想法早在20世紀60年代就已出現(xiàn)。幾十年過去,云計算概念的提出將愿望化作現(xiàn)實。毫無疑問,云計算是進入20世紀以來最重要的信息技術變革之一。雖然云不是某種特定的算法,也不是某個安裝在電腦中的軟件,更不是一個新興的硬件設備,但它卻成為當今信息社會的重要基礎設施。無論是政府、企業(yè)、高校,還是其他團體或個人,都日益依賴云計算帶來的便捷。
盡管云計算已飛速發(fā)展多年,但目前市面上關于云計算的教材卻屈指可數(shù),將云計算的基本理論與產業(yè)實踐結合的教材更是鳳毛麟角。為此,上海交通大學計算機科學與工程學院申報了“教育部-阿里云產學合作協(xié)同育人項目”,在該項目的支持下進行云計算課程的建設,并基于課程編寫了本書。本書是校企聯(lián)合建設課程并編寫教材的有益嘗試。在內容上,本書全面系統(tǒng)地介紹了云計算的相關概念、方法、技術與現(xiàn)狀,充分融入產業(yè)界的先進理念,結合產業(yè)一線實踐,既反映了編者在云計算和互聯(lián)網規(guī)模系統(tǒng)設計領域的主要教學和科研成果,也展現(xiàn)了阿里云公司有關專家和工程師多年的技術積淀和開發(fā)經驗。
本書有兩個突出的特點。首先,全書跨越云的各個層次,內容全面而新穎。雖然以云計算為核心,但同樣重視云存儲;雖然主要著眼于云的系統(tǒng)平臺和軟件環(huán)境,但對同樣關鍵的硬件基礎設施(即數(shù)據(jù)中心)也做了較為詳盡的介紹。其次,本書是一部理論和實踐相結合的教材,論述深入淺出、易于理解。書中不僅介紹了經典的虛擬化理論、網絡理論等,還以阿里云的真實系統(tǒng)為例,闡述了云計算實踐過程中的工程和技術問題。
本書面向計算機、電子工程等相關專業(yè)的學生,以及對云計算技術感興趣的技術人員和研究人員。第1章對云計算的基礎概念進行了闡述,使讀者初步了解云計算的誕生和發(fā)展,為后續(xù)的學習奠定基礎。第2章介紹數(shù)據(jù)中心及架構,讀者從中可以理解云計算這一無形服務的硬件根基和運行環(huán)境。第3章重點介紹云計算中的網絡技術,由于云數(shù)據(jù)中心的訪問量大,因此對網絡有很高的要求。第4章重點介紹云計算的重要系統(tǒng)支撐——虛擬化技術,本章對于理解云計算環(huán)境中的資源管理具有重要參考價值。第5章介紹分布式存儲技術,在云環(huán)境下,數(shù)據(jù)存儲是核心問題之一,該章將應用大量的案例來進行說明。第6章在云存儲基礎上介紹云數(shù)據(jù)庫的知識,建議想了解云計算對大數(shù)據(jù)的支持的讀者深入學習這一章。第7章和第8章分別對中間件和分布式部署進行介紹,其中包含豐富的實際產品細節(jié),建議學有余力的學生在此基礎上增加實踐操作。第9章從產業(yè)角度給出了對云計算的理解和思考,以及云上架構設計的常用方法和最佳實踐,并對云計算的未來進行了展望。
本質上,云計算不是一門獨立的技術領域,而是構筑在多門已經成熟的計算機技術領域之上的一個綜合體系。因此,本書可以看作是云計算相關技術體系的總覽,并以本書內容為主線延伸到其他專業(yè)課程的學習中。在上海交通大學計算機科學與工程系的教學實踐中,學生通過這門課收獲最多的是關乎原理的“為何”(比如為何選擇虛擬化,為何不選擇傳統(tǒng)架構等),然后是關乎技術的“如何”(比如如何實現(xiàn)高可靠性,如何分布式部署等),最后是關乎云計算實踐的應用技巧和方法等。全書各章最后均附相關的習題,供讀者思考和練習。此外,每章之后還附有參考文獻,除相關書籍和論文外,我們還提供了主要技術開發(fā)者社區(qū)的博客和文章鏈接?紤]到云計算是一個技術快速更新的領域,讀者可以通過互聯(lián)網了解技術的最新動態(tài)和進展。
本書的成稿得益于很多人的付出和努力。感謝教育部高等學校計算機類專業(yè)教學指導委員會“系統(tǒng)能力培養(yǎng)研究項目”專家組的指導,感謝上海交通大學計算機科學與工程系相關老師的付出,感謝阿里云公司唐洪、李妹芳、劉澍泉、任華華、文榮、姚偉斌、易立、湯志敏、曹鋒、林曉斌、鐘華、趙杰輝、李毅、王宇德、張良模、王曉斐等專家對本書技術內容的指導和建議,感謝阿里云公司章文嵩、吳結生、盧毅軍、曲海峰、祝順民、朱照遠、張獻濤、董元元、徐立、李文兆、陳舟鋒、周琦、仇應俊、占超群、李妹芳等專家在授課過程中為本書提供了素材,特別感謝阿里云公司李妹芳以及機械工業(yè)出版社華章公司各位編輯的辛苦工作和大力支持。
云計算是一個充滿生機和活力的領域,限于作者的學識及視野,本書難免存在疏漏和理解不到位之處,歡迎各位同行和讀者批評指正。我們將不勝感激!
作者2017年7月
CONTENTS
目 錄
叢書序言
本書編委會
序
前言
第1章 云計算概述 1
1.1 云計算的產生及發(fā)展 1
1.1.1 云計算的產生背景 1
1.1.2 云計算的特點 2
1.1.3 云計算發(fā)展簡史 3
1.1.4 知名的云計算服務提供商 3
1.2 云計算的基礎知識 4
1.2.1 云計算的概念 4
1.2.2 云服務的使用形態(tài) 5
1.2.3 云計算的服務類型 7
1.3 云計算的價值與典型的使用場景 8
1.3.1 云計算的價值 8
1.3.2 云計算典型的使用場景 9
1.4 云計算平臺架構 11
1.4.1 AWS平臺架構 11
1.4.2 阿里云平臺架構 12
1.4.3 谷歌云平臺 13
1.4.4 幾種云計算平臺的特點 15
1.5 云計算部署小實例 15
1.6 云計算的核心技術 18
1.7 云計算的生態(tài) 22
本章小結 23
習題 24
參考文獻與進一步閱讀 24
第2章 數(shù)據(jù)中心 25
2.1 數(shù)據(jù)中心基礎設施 25
2.1.1 數(shù)據(jù)中心的基本組成 26
2.1.2 機房規(guī)劃與設計 30
2.1.3 基礎設施運維 33
2.1.4 數(shù)據(jù)中心的評價 35
2.2 云計算數(shù)據(jù)中心 41
2.2.1 云數(shù)據(jù)中心的發(fā)展 41
2.2.2 互聯(lián)網數(shù)據(jù)中心 42
2.2.3 多租戶數(shù)據(jù)中心 42
2.2.4 數(shù)據(jù)中心多級架構 43
2.2.5 模塊化設計與硬件重構 43
2.3 阿里云數(shù)據(jù)中心 45
2.3.1 綠色環(huán)保新實踐 45
2.3.2 數(shù)據(jù)中心設計新實踐 46
2.3.3 云計算應用新實踐 46
本章小結 46
習題 47
參考文獻與進一步閱讀 47
第3章 網絡 48
3.1 網絡架構 48
3.1.1 數(shù)據(jù)中心網絡架構 49
3.1.2 區(qū)域網絡架構 50
3.1.3 核心網架構 51
3.1.4 邊緣或內容分發(fā)網絡架構 52
3.2 數(shù)據(jù)中心網絡 53
3.2.1 數(shù)據(jù)中心網絡概述 53
3.2.2 數(shù)據(jù)中心網絡架構技術演進 54
3.3 邊界網絡和CDN 57
3.3.1 HTTP 58
3.3.2 DNS 59
3.3.3 CDN的基本原理 61
3.3.4 CDN的應用 66
3.3.5 阿里云CDN 68
3.3.6 CDN的安全 71
3.4 網絡虛擬化技術 72
3.4.1 網絡虛擬化的概念 72
3.4.2 網絡虛擬化的原理 74
3.4.3 虛擬網絡互聯(lián) 76
3.4.4 主流開源項目介紹 79
3.4.5 阿里云的虛擬專有網絡 81
3.5 負載均衡技術 83
3.5.1 負載均衡的原理 83
3.5.2 四層負載均衡 84
3.5.3 七層負載均衡 86
3.5.4 DNS負載均衡 88
3.5.5 開源負載均衡概述 88
3.5.6 阿里云負載均衡服務 90
本章小結 92
習題 92
參考文獻與進一步閱讀 93
第4章 虛擬化 95
4.1 虛擬化技術概述 95
4.1.1 概念和歷史 95
4.1.2 虛擬化的意義 96
4.2 虛擬機的核心原理和技術 96
4.2.1 機器與接口 96
4.2.2 系統(tǒng)接口 96
4.2.3 運行模式 98
4.2.4 虛擬機的分類 99
4.3 虛擬化的實現(xiàn) 101
4.3.1 Xen虛擬機技術 101
4.3.2 KVM技術 103
4.3.3 其他資源虛擬化技術 104
4.4 虛擬機管理與調度 106
4.4.1 典型管理問題 106
4.4.2 彈性伸縮 108
4.5 容器技術 109
4.5.1 操作系統(tǒng)級虛擬化 109
4.5.2 Docker 110
4.5.3 容器與傳統(tǒng)虛擬機 111
4.5.4 Docker服務編排 112
4.5.5 Docker對云的擴展 114
4.6 阿里云虛擬化實踐 114
4.6.1 云服務器ECS 114
4.6.2 彈性伸縮機制 115
4.6.3 計費方式 116
4.6.4 阿里云虛擬化安全 116
4.6.5 阿里云容器服務 117
本章小結 125
習題 126
參考文獻與進一步閱讀 126
第5章 分布式存儲 127
5.1 分布式存儲基礎 127
5.1.1 分布式存儲面臨的問題和挑戰(zhàn) 127
5.1.2 帽子理論 128
5.1.3 數(shù)據(jù)一致性協(xié)議 132
5.2 數(shù)據(jù)復制與備份技術 140
5.2.1 數(shù)據(jù)復制技術 140
5.2.2 數(shù)據(jù)備份技術 143
5.2.3 歸檔存儲 145
5.3 存儲陣列和糾刪碼技術 150
5.3.1 RAID概述 150
5.3.2 RAID的級別 150
5.3.3 糾刪碼技術 152
5.3.4 云存儲系統(tǒng)的糾刪碼 154
5.4 塊存儲 156
5.4.1 塊存儲概述 156
5.4.2 常見的塊存儲設備 156
5.4.3 云存儲系統(tǒng)的塊設備 158
5.4.4 塊設備的存儲管理 159
5.5 文件存儲 162
5.5.1 文件存儲概述 162
5.5.2 NAS及其架構 162
5.5.3 阿里云文件存儲 167
5.5.4 阿里云文件存儲的典型應用 167
5.6 對象存儲 169
5.6.1 對象存儲概述 169
5.6.2 對象存儲設備及其關鍵技術 170
5.6.3 阿里云對象存儲 173
5.6.4 阿里云對象存儲的典型應用 178
5.7 分布式索引技術 179
5.7.1 哈希表 179
5.7.2 B+樹 180
5.7.3 LSM樹 181
5.8 分布式鎖服務 183
5.8.1 Google Chubby 183
5.8.2 ZooKeeper 186
5.8.3 阿里云Nuwa 188
5.9 分布式文件系統(tǒng) 189
5.9.1 Google文件系統(tǒng) 190
5.9.2 Hadoop分布式文件系統(tǒng) 192
5.9.3 Ceph 195
5.9.4 Lustre 199
5.9.5 GlasterFS 200
5.9.6 阿里云Pangu 200
本章小結 202
習題 202
參考文獻與進一步閱讀 203
第6章 云數(shù)據(jù)庫 204
6.1 云數(shù)據(jù)庫概述 204
6.1.1 云數(shù)據(jù)庫的現(xiàn)狀和演化 204
6.1.2 OLTP和OLAP 205
6.1.3 常見的數(shù)據(jù)庫類型及其管理系統(tǒng) 206
6.1.4 云數(shù)據(jù)庫關鍵組件及應用場景 207
6.2 云數(shù)據(jù)庫的設計和架構 208
6.2.1 高可靠性 208
6.2.2 高可用性 209
6.2.3 高安全性 210
6.2.4 良好的兼容性 210
6.2.5 云數(shù)據(jù)庫架構 210
6.3 云數(shù)據(jù)庫的關鍵技術 213
6.3.1 數(shù)據(jù)庫的擴展 213
6.3.2 大規(guī)模數(shù)據(jù)庫的實現(xiàn) 213
6.3.3 共享型和分布式數(shù)據(jù)庫 215
6.3.4 智能運維和數(shù)據(jù)化管理 215
6.4 表格存儲 216
6.4.1 表格存儲概述 216
6.4.2 一些業(yè)界產品 218
6.4.3 阿里云表格存儲 219
6.4.4 典型案例分析 221
6.5 關系型數(shù)據(jù)庫 222
6.5.1 關系型數(shù)據(jù)庫概述 222
6.5.2 常用的關系型數(shù)據(jù)庫 222
6.5.3 阿里云關系數(shù)據(jù)庫RDS 223
6.6 分布式數(shù)據(jù)庫 225
6.6.1 分布式數(shù)據(jù)庫概述 225
6.6.2 分布式數(shù)據(jù)庫的發(fā)展 226
6.6.3 常用的分布式數(shù)據(jù)庫 228
6.7 內存數(shù)據(jù)庫 230
6.7.1 內存數(shù)據(jù)庫概述 230
6.7.2 內存數(shù)據(jù)庫的歷史和發(fā)展 231
6.7.3 常用的內存數(shù)據(jù)庫 232
6.7.4 內存數(shù)據(jù)庫存在的問題 234
本章小結 236
習題 236
參考文獻與進一步閱讀 237
第7章 云計算中間件 238
7.1 中間件概述 238
7.1.1 應用的復雜性 239
7.1.2 中間件的產生和發(fā)展 240
7.1.3 中間件與SOA、微服務之間的關系 242
7.1.4 中間件的分類 243
7.1.5 云計算中間件 243
7.1.6 主流廠商的中間件 245
7.2 云計算中間件的關鍵技術 248
7.2.1 架構設計原則 248
7.2.2 高性能服務框架 252
7.2.3 消息服務 252
7.2.4 分布式事務 253
7.2.5 數(shù)據(jù)化運維 254
7.2.6 服務化和服務治理 254
7.2.7 容器 255
7.3 日志服務 255
7.3.1 典型應用場景 256
7.3.2 常見的日志系統(tǒng) 258
7.3.3 阿里云日志服務 261
7.4 消息中間件 263
7.4.1 使用場景和特點 263
7.4.2 同步/異步調用模式 266
7.4.3 點對點和發(fā)布/訂閱模型 267
7.4.4 主流消息中間件 269
7.4.5 案例分析:抽獎系統(tǒng) 273
7.5 阿里云企業(yè)級分布式應用服務 274
7.5.1 應用場景需求 274
7.5.2 系統(tǒng)架構 275
7.5.3 服務化和服務治理 276
7.5.4 核心組件和功能 278
7.6 云計算中間件發(fā)展趨勢 280
7.6.1 產品化和智能化 280
7.6.2 平臺化和深度融合 281
本章小結 281
習題 281
參考文獻與進一步閱讀 281
第8章 分布式部署與監(jiān)控 283
8.1 軟件分布式部署概述 283
8.1.1 功能模塊 283
8.1.2 軟件部署的內容 283
8.1.3 軟件部署模式 284
8.1.4 軟件的分布式部署 284
8.2 互聯(lián)網大規(guī)模的軟件分布式部署的設計 285
8.2.1 三大技術挑戰(zhàn) 285
8.2.2 設計原則 285
8.3 分布式部署系統(tǒng)案例 287
8.3.1 微軟Autopilot系統(tǒng) 287
8.3.2 谷歌Borg系統(tǒng) 288
8.3.3 Facebook的Dynamo系統(tǒng) 289
8.4 阿里云天基系統(tǒng) 290
8.4.1 基本概念 290
8.4.2 工作原理 291
8.4.3 部署與擴容 291
8.4.4 升級 292
8.4.5 自動修復 293
8.4.6 調度系統(tǒng) 293
8.4.7 監(jiān)控系統(tǒng) 294
8.5 阿里云監(jiān)控 295
8.5.1 核心監(jiān)控服務 296
8.5.2 服務調用方式 296
8.5.3 云主機監(jiān)控 297
8.5.4 云服務監(jiān)控 298
本章小結 299
習題 299
參考文獻與進一步閱讀 300
第9章 云計算產業(yè)實踐 301
9.1 云計算帶來的產業(yè)變革 301
9.2 云計算的價值 302
9.2.1 商業(yè)價值 302
9.2.2 技術價值 304
9.3 云上架構設計最佳實踐 306
9.3.1 安全 306
9.3.2 高可用 310
9.3.3 可擴展 312
9.3.4 高性能 316
9.3.5 成本效益 319
9.3.6 可運維 320
9.4 行業(yè)解決方案 321
9.4.1 行業(yè)解決方案的多維性 322
9.4.2 應用案例:游戲行業(yè)的日志分析 322
9.4.3 從1到千萬用戶的方案演進 326
9.4.4 行業(yè)客戶案例 329
9.5 云上典型應用開發(fā) 331
9.5.1 云上應用開發(fā)原則 331
9.5.2 從0開始搭建網站 333
9.6 云計算趨勢的思考 336
9.6.1 公共云和混合云 336
9.6.2 極“智”未來 336
9.6.3 IoT遇上大數(shù)據(jù) 337
9.6.4 云生態(tài) 337
9.6.5 云上獨角獸 337
9.6.6 全球化 337
本章小結 338
習題 338
參考文獻與進一步閱讀 338