本書向科學家、工程師和學生介紹云計算,內容涵蓋云計算的支撐技術、解決云技術問題的新方法,以及將云服務集成到科學工作中所需要的概念。具體包括:管理云中的數據,以及如何對這些服務進行編程;在云計算中,從部署單一虛擬機或容器到支持基本的交互式科學實驗,從而收集機器集群的數據以進行分析;將云作為自動化分析程序、機器學習和分析流數據的平臺;用開源軟件構建自己的云;云安全。
文明的進步,是不斷增加我們能夠進行的重要操作的數量,而不需要考慮如何進行這些操作。
—Alfred North Whitehead,《數學簡介》
本書討論云計算以及如何讓讀者—也就是你—把它應用在科學和工程領域。這是一本實用指南,涵蓋了很多動手實踐的案例,這些案例都可以在線獲得,以幫助讀者了解怎樣使用云計算解決技術計算方面的特定問題,我們還就日常工作中如何使用云計算提出了可行的建議。
云計算作為技術術語最早出現在1996年。發展至今,這一詞匯在機場的廣告牌上已隨處可見。你可能會困惑于它是一項技術、一種趨勢還是舊概念的重新包裝,或者僅僅是一個市場宣傳口號。其實它是所有這些的集合而且還不限于此。最重要的是,云計算是一種我們以往多有忽視的處理事務方式上的重大轉變,不論是在科學方面還是在日常生活的其他方面。就如提姆·布瑞(Tim Bray)在2015年所寫:“計算正轉向一個效用模型。你可以在一個公有云里做各種在自己的計算機房很難完成或者很昂貴的事。公有云可以提供比你自己建造的環境更加優越的在線時間、安全性保障和有效的分配。”[77]
功能強大、隨時在線、可訪問的云設施的出現,已經轉變了我們作為消費者和信息技術互動的方式,我們可以在Netflix上持續流暢地觀看視頻(托管在亞馬遜云平臺上),通過谷歌搜尋網站內容(使用谷歌云平臺),通過臉書更新朋友圈動態,通過Alexa購買我們的日用品。云技術讓許多公司得以將其信息技術外包到云供應商,從而削減了成本,提高了速率。大量以前的手工工作通過運行在云設施上的軟件得以自動化,正如1960年McCarthy所設想的以及20世紀90年代網格所探索的那樣,現在則通過像亞馬遜、谷歌和微軟這樣的云供應商得以大規模實現。
那么云計算在科學和工程方面的應用是怎樣的呢?許多科學家和工程師在工作中使用像Dropbox、GitHub、Google Docs、Skype甚至Twitter這樣的云服務。但是他們還遠遠沒有享受到云計算的全面福利。有一些技術應用運行在云計算機上,但是很少有研究人員將其他部分外包到云平臺上。這是一種機會的浪費。畢竟,科學和工程雖然是令人著迷且開發心智的專業,但是也包含許多平凡的很花費時間的活動。為什么不通過自動化和外包來加速科學探索(并享有更多樂趣)呢?我們相信對這個問題的答案是肯定的,這就是我們為什么寫這本書。
在接下來的章節里,我們調研了支撐云的新技術,云所提供的解決技術問題的新方法,以及在研究方面有效應用云的新思考方式。我們不奢望能夠提供一本全面的云計算指導,因為主要的云供應商運行著成百上千的服務,當然有許多在科學和工程方面可以有效應用的服務沒有涵蓋在本書中。但我們確實描述了精華的部分,并給出了把你的工作整合到云服務中的必要概念。
下面是一些大家常問的問題,我們也將在書中盡力提供答案:我應該買一個集群還是使用云?如果使用商務云,我的基金會為此付費嗎?我可以把數據導到云里面嗎?那兒安全嗎?我可以和我的同事分享嗎?我怎么在云里計算?云計算可以大規模化嗎?如果我想計算大量數據會怎樣?我應該在工作中使用云平臺服務嗎? 哪些是對科學和工程有用的?我怎么建立自己的云服務?我可以使它們按需規模化以解決真正的大問題嗎?在科學和工程方面使用云有哪些成功的例子?我怎么建立自己的云?等等。
沒有洞察一切的水晶球,我們不能提供這些問題的確切答案。但是我們至少可以提供一些信息和觀點,以幫助你做決定。
一切都在流動,沒有什么是靜止的。就如2500年前Heraclitus所寫的,軟件行業尤其是這樣。本書中一些技術細節的有效性會比我們所想的更加短暫。但是不要沮喪。你可以幫助我們和你的同仁,請在Cloud4SciEng.org中告訴我們。我們會更新網站,并準備本書的第2版。
---作者簡介---
伊恩•福斯特(Ian Foster) 知名計算機科學家,芝加哥大學教授,阿貢國家實驗室杰出研究員。他是網格計算理論的創始人和積極倡導者,被尊稱為“網格計算之父”。
丹尼斯·B. 甘農(Dennis B. Gannon) 印第安納大學計算機科學系榮譽退休教授。曾任微軟云研究戰略總監,向全球的研究和教育機構提供Azure云計算資源。
---譯者簡介【已更新】---
趙勇 清數科技及融數鏈創始人,電子科技大學副教授,曾任職于美國微軟搜索與廣告部,獲微軟杰出員工獎。博士期間師從Ian Foster教授。
黃毅 美國SkyGlue公司總裁兼CTO,圣何塞大學教授兼大數據實驗室主任。曾任職于微軟,擔任Azure云計算軟件開發工程師。博士期間師從Dennis Gannon教授。
出版者的話
譯者序
前言
致謝
第1章 在云的宇宙中定位 1
1.1 云:計算機、助理和平臺 1
1.2 云的概況 2
1.3 本書導讀 5
1.4 獲取云服務的方式:網站、應用編程接口和軟件開發工具包 6
1.4.1 Web界面、應用編程接口、軟件開發工具包和命令行界面 6
1.4.2 本地應用和云應用 8
1.5 本書使用的工具 8
1.5.1 Python 8
1.5.2 Jupyter:基于Web的交互式計算工具 9
1.5.3 版本控制系統GitHub 10
1.5.4 Globus 10
1.6 小結 10
1.7 資源 11
第一部分 管理云中的數據
第2章 存儲即服務 15
2.1 三個啟發式的例子 15
2.2 存儲模型 16
2.2.1 文件系統 16
2.2.2 對象存儲 17
2.2.3 關系型數據庫 17
2.2.4 NoSQL數據庫 18
2.2.5 圖數據庫 19
2.2.6 數據倉庫 20
2.3 云存儲全景 20
2.3.1 文件系統 20
2.3.2 對象存儲 21
2.3.3 NoSQL服務 21
2.3.4 關系型數據庫 22
2.3.5 基于數據倉庫的數據分析 22
2.3.6 圖數據庫及其他服務 23
2.3.7 OpenStack存儲服務和Jetstream云服務 23
2.4 小結 24
2.5 資源 24
第3章 使用云存儲服務 25
3.1 兩種訪問方式:門戶和API 25
3.2 使用Amazon云存儲服務 26
3.3 使用Microsoft Azure云存儲服務 28
3.4 使用Google云存儲服務 31
3.4.1 Google Bigtable 32
3.4.2 Google Cloud Datastore 33
3.5 使用OpenStack云存儲服務 34
3.6 用Globus傳輸和共享數據 35
3.6.1 用Globus傳輸數據 36
3.6.2 用Globus共享數據 38
3.7 小結 38
3.8 資源 39
第二部分 云中的計算
第4章 計算即服務 43
4.1 虛擬機和容器 43
4.2 先進的計算服務 45
4.3 無服務器計算 46
4.4 公有云計算的優缺點 46
4.5 小結 47
4.6 資源 48
第5章 虛擬機的使用和管理 49
5.1 歷史根源 49
5.2 亞馬遜的彈性計算云 50
5.2.1 創建虛擬機實例 50
5.2.2 連接存儲 52
5.3 Azure虛擬機 54
5.4 谷歌云虛擬機服務 55
5.5 Jetstream虛擬機服務 55
5.6 小結 56
5.7 資源 57
第6章 使用和管理容器 58
6.1 容器的基礎知識 58
6.2 Docker和Hub 59
6.3 容器用于科學 61
6.4 構建你自己的容器 62
6.5 小結 63
6.6 資源 63
第7章 彈性部署 64
7.1 云中并行計算的范式 64
7.2 SPMD和HPC風格的并行 65
7.2.1 云中的消息傳遞接口 65
7.2.2 云中的GPU 65
7.2.3 在Amazon云上部署HPC集群 67
7.2.4 在Azure上部署HPC集群 70
7.2.5 集群的進一步擴展 71
7.3 多任務并行計算 72
7.4 MapReduce和批量同步并行計算 72
7.5 圖數據流的執行和Spark 73
7.6 代理和微服務 74
7.6.1 微服務和容器資源管理器 75
7.6.2 在集群中管理身份 75
7.6.3 簡單的例子 75
7.6.4 Amazon EC2容器服務 76
7.6.5 Google的Kubernetes 81
7.6.6 Mesos和Mesosphere 84
7.7 HTCondor 86
7.8 小結 86
7.9 資源 87
第三部分 云平臺
第8章 云中的數據分析 91
8.1 Hadoop和YARN 91
8.2 Spark 93
8.2.1 一個簡單的Spark程序 93
8.2.2 一個更有趣的Spark程序:k均值聚類 94
8.2.3 容器中的Spark 95
8.2.4 Spark中的SQL 96
8.3 Amazon Elastic MapReduce 97
8.4 Azure HDInsight和數據湖 99
8.4.1 Azure Data Lake存儲 100
8.4.2 數據湖分析 101
8.5 Amazon Athena分析 102
8.6 Google云數據實驗室 102
8.6.1 華盛頓和印第安納州的風疹 103
8.6.2 尋找氣象臺的異常 104
8.7 小結 107
8.8 資源 107
第9章 將數據以流式傳輸到云端 109
9.1 科學流案例 109
9.1.1 廣域地球物理傳感器網絡 110
9.1.2 城市信息學 110
9.1.3 大規模科學數據流 111
9.2 流系統的基本設計挑戰 112
9.3 Amazon Kinesis和Firehose 112
9.3.1 Kinesis Streams架構 113
9.3.2 Kinesis和Amazon SQS 114
9.4 Kinesis、Spark和物體陣列 115
9.5 用Azure進行流數據處理 118
9.6 Kafka、Storm和Heron Streams 121
9.7 Google Dataflow和Apache Beam 124
9.8 Apache Flink 126
9.9 小結 127
9.10 資源 128
第10章 基于云的機器學習 129
10.1 Spark機器學習庫 129
10.1.1 邏輯回歸 130
10.1.2 芝加哥餐廳案例 130
10.2 Azure機器學習空間 133
10.3 Amazon機器學習平臺 136
10.4 深度學習淺析 138
10.4.1 深度網絡 139
10.4.2 卷積神經網絡 140
10.4.3 遞歸神經網絡 141
10.5 Amazon MXNet虛擬機鏡像 143
10.6 Google TensorFlow 146
10.7 微軟認知工具包 147
10.8 小結 149
10.9 資源 150
第11章 Globus研究數據管理平臺 152
11.1 分布式數據的挑戰和機遇 152
11.2 Globus平臺 153
11.2.1 Globus傳輸和共享 153
11.2.2 rule_data結構 155
11.3 身份和證書管理 155
11.3.1 Globus Auth授權服務 156
11.3.2 一個典型的Globus Auth工作流 157
11.3.