風(fēng)起云涌的云計算,在以虛擬化和容器化為技術(shù)特征的資源云化階段,極大地簡化了基礎(chǔ)設(shè)施運維。如今,在以Serverless新理念標(biāo)志的應(yīng)用云化階段,云計算的目標(biāo)是進一步簡化云開發(fā),屏蔽云端分布式系統(tǒng)和中間件等的復(fù)雜性。Serverless不但能使開發(fā)者聚焦業(yè)務(wù)邏輯以實現(xiàn)跨越式生產(chǎn)力變革,而且以極致彈性和免運維等優(yōu)勢幫助應(yīng)用降低成本、開發(fā)增效,已成為云計算下半場中各大廠商和開源社區(qū)競相擁抱的戰(zhàn)略方向和新興技術(shù)。甚至伯克利在《簡化云編程:伯克利視角下的Serverless計算》一文中預(yù)言:Serverless將會成為云時代默認(rèn)的計算范式,并取代Serverful(傳統(tǒng)云)計算模式,而其商業(yè)模式變革也被生動地類比為從傳統(tǒng)的租車服務(wù)發(fā)展為真正隨用隨付的計程車服務(wù)。
廣大開發(fā)者、科研人員和信息專業(yè)的本科生與研究生應(yīng)該如何把握快速發(fā)展的Serverless技術(shù)浪潮呢?為行之有效的方法之一是,通過完整剖析一個有代表性的Serverless平臺的設(shè)計思路和實現(xiàn)方案,來深入學(xué)習(xí)和掌握Serverless的技術(shù)原理與架構(gòu)精髓,這亦是本書創(chuàng)作的初衷。本書以華為2012實驗室研制的分布式內(nèi)核華為元戎在Serverless方向的創(chuàng)新探索為例,詳細(xì)闡述了新一代Serverless編程模型、高性能運行時、后端服務(wù)對接等一系列關(guān)鍵技術(shù),并深入剖析了華為終端云基于Serverless實現(xiàn)快速開發(fā)和上線翻譯業(yè)務(wù)的端到端商用案例,幫助讀者從理論走向系統(tǒng)實踐,身臨其境地體會如何靈活運用Serverless高效構(gòu)建應(yīng)用。
本書的第1章重點介紹了Serverless的基礎(chǔ)知識、關(guān)鍵技術(shù)和生態(tài)現(xiàn)狀。通過對第1章的閱讀,讀者可以了解Serverless如何解決微服務(wù)實施的痛點,了解當(dāng)前典型的Serverless平臺(如Lambda)和開源系統(tǒng)(如OpenWhisk)等的差異化設(shè)計,以及Serverless的周邊組件,如開發(fā)與部署框架、事件總線、函數(shù)工作流等,進而通過總結(jié)當(dāng)前Serverless系統(tǒng)的不足之處及下一步技術(shù)探索方向,為讀者設(shè)計Serverless應(yīng)用架構(gòu)提供啟發(fā)和技術(shù)參考。
本書的第2~5章詳細(xì)介紹構(gòu)建新一代Serverless平臺的核心技術(shù)。第2章以華為的華為元戎為例介紹新一代Serverless平臺的設(shè)計理念與技術(shù)架構(gòu),第3~5章分別對一系列核心技術(shù)展開剖析。其中,第3章介紹有狀態(tài)函數(shù)編程模型的設(shè)計原理和技術(shù)實現(xiàn),并通過生動的場景案例展示有狀態(tài)函數(shù)編程模型的用法與優(yōu)勢。第4章分析如何在函數(shù)運行時中優(yōu)化冷啟動、彈性伸縮和函數(shù)調(diào)度的性能,并提供具體設(shè)計方案和范例性能評測。第5章涉及用函數(shù)對接各種BaaS服務(wù)的通用框架,以華為元戎的Event Bridge和Service Bridge為例分別詳解云上各種服務(wù)如何規(guī)范化觸發(fā)函數(shù),以及在函數(shù)中如何標(biāo)準(zhǔn)化調(diào)用各種后端服務(wù),如云存儲和云數(shù)據(jù)庫等。
完備的后端服務(wù)如云托管、云數(shù)據(jù)庫和云存儲等也是Serverless平臺必不可少的組成部分,因此第6~8章介紹了華為終端云為用戶和開發(fā)者提供的配套服務(wù)。其中,云數(shù)據(jù)庫服務(wù)是一款Serverless化的數(shù)據(jù)庫,提供簡單易用的端/云SDK,適用于移動應(yīng)用、網(wǎng)頁和服務(wù)器開發(fā),方便應(yīng)用數(shù)據(jù)在各個客戶端之間、客戶端與服務(wù)端之間自動保持同步,幫助應(yīng)用開發(fā)者快速構(gòu)建安全可靠且多端協(xié)同的應(yīng)用程序,從而讓應(yīng)用開發(fā)者聚焦業(yè)務(wù)邏輯,無須關(guān)注后端系統(tǒng)的復(fù)雜搭建、用戶數(shù)據(jù)的安全保護、多端數(shù)據(jù)的同步及服務(wù)器部署維護等,可顯著提高業(yè)務(wù)構(gòu)建、部署和運營效率。云存儲服務(wù)用于圖片、視頻、文件等內(nèi)容的上傳、下載、歸檔和備份等。相比于傳統(tǒng)的存儲服務(wù),云存儲服務(wù)具有支持?jǐn)帱c續(xù)傳、網(wǎng)絡(luò)加速、可靠安全和彈性伸縮等特性,更適合移動應(yīng)用的文件管理。云托管服務(wù)為開發(fā)者的網(wǎng)頁內(nèi)容提供快速和安全的全球托管服務(wù),支持自定義域名和證書管理,開發(fā)者只需提供申請的域名,無須關(guān)注CDN加速和SSL配置,通過控制臺一鍵發(fā)布版本即可向全球用戶分發(fā)網(wǎng)站內(nèi)容。
雖然Serverless平臺為開發(fā)者提供了一系列開箱即用的云函數(shù)和后端服務(wù),但是開發(fā)者在嘗試用新模式構(gòu)建實際業(yè)務(wù)時難免會面臨各種挑戰(zhàn),例如,業(yè)務(wù)函數(shù)的劃分粒度和策略、由數(shù)據(jù)變更觸發(fā)的業(yè)務(wù)流程執(zhí)行及事件驅(qū)動編程等。鑒于此,本書的第9~10章以華為的實踐為例,從技術(shù)選型、架構(gòu)設(shè)計到業(yè)務(wù)函數(shù)的劃分,再到云函數(shù)、云托管、云數(shù)據(jù)庫和云存儲服務(wù)的搭配使用和代碼示例,對基于Serverless技術(shù)構(gòu)建的翻譯服務(wù)進行端到端完整解析,讓讀者能夠快速學(xué)習(xí)和全面掌握如何運用Serverless技術(shù)高效構(gòu)建應(yīng)用。
眾人拾柴火焰高,感謝華為公司2012實驗室中央軟件院分布式與并行軟件實驗室的大力支持,以及華為元戎團隊的不懈投入,感謝華為終端云同仁們的傾力貢獻和緊密協(xié)作。大家共同踐行了研發(fā)一代、應(yīng)用一代的務(wù)實創(chuàng)新精神,促成了本書中的Serverless架構(gòu)和技術(shù)從原型逐步走向商用,未來更加可期!感謝電子工業(yè)出版社的寶貴建議與細(xì)致工作,這保證了本書的質(zhì)量和盡早問世。另外,本書部分內(nèi)容參考了公開資料和網(wǎng)上調(diào)研成果,在此也對相關(guān)參考文獻的作者及同行致以誠摯的謝意。
由于水平有限,加之Serverless技術(shù)日新月異且應(yīng)用領(lǐng)域廣泛,書中難免有疏漏和不足之處,懇請廣大讀者批評指正,以便我們在后續(xù)版本中改進,并共同推動Serverless生態(tài)的蓬勃發(fā)展
1 Serverless綜述 1
1.1 微服務(wù)面臨的挑戰(zhàn) 1
1.2 什么是Serverless 4
1.2.1 Serverless的定義 6
1.2.2 Serverless關(guān)鍵技術(shù) 8
1.3 Serverless帶來的核心變化 10
1.3.1 Serverless的技術(shù)創(chuàng)新 10
1.3.2 Serverless的其他優(yōu)點 13
1.3.3 Serverless和微服務(wù)的差異 14
1.4 Serverless生態(tài)現(xiàn)狀 15
1.4.1 平臺 16
1.4.2 框架 31
1.4.3 事件總線 35
1.4.4 函數(shù)工作流 38
1.5 Serverless的挑戰(zhàn)與機遇 44
1.6 總結(jié) 48
2 新一代Serverless技術(shù) 50
2.1 設(shè)計理念 50
2.2 技術(shù)架構(gòu) 52
2.2.1 概念模型 52
2.2.2 邏輯架構(gòu) 53
2.2.3 核心技術(shù)創(chuàng)新盤點 55
3 有狀態(tài)函數(shù)編程模型 56
3.1 設(shè)計原理 56
3.1.1 狀態(tài)與有狀態(tài)函數(shù) 56
3.1.2 有狀態(tài)函數(shù)編程模型的實現(xiàn) 59
3.1.3 有狀態(tài)函數(shù)的并發(fā)一致性模型 73
3.1.4 有狀態(tài)函數(shù)應(yīng)用場景 75
3.1.5 有狀態(tài)函數(shù)的使用原則 82
3.2 自走棋游戲編程模型設(shè)計示例 83
3.2.1 自走棋游戲介紹 83
3.2.2 函數(shù)的實現(xiàn)分析及有狀態(tài)函數(shù)重構(gòu) 85
3.2.3 有狀態(tài)函數(shù)的效果 94
4 高性能函數(shù)運行時 96
4.1 函數(shù)運行時的設(shè)計和實現(xiàn) 96
4.2 函數(shù)冷啟動 100
4.2.1 問題分析 100
4.2.2 資源池化 101
4.2.3 代碼緩存 102
4.2.4 調(diào)用鏈預(yù)測 103
4.3 彈性伸縮 105
4.3.1 彈性策略選擇 105
4.3.2 華為元戎彈性方案設(shè)計 108
4.4 函數(shù)調(diào)度 111
4.4.1 調(diào)度的關(guān)鍵維度 111
4.4.2 調(diào)度策略 113
4.4.3 函數(shù)調(diào)度實踐 115
4.5 性能評測 116
5 高效對接BaaS服務(wù) 120
5.1 Event Bridge:BaaS服務(wù)連接函數(shù)的橋梁 120
5.1.1 Event Bridge基本概念 122
5.1.2 Event Bridge架構(gòu) 123
5.1.3 CloudEvents 126
5.1.4 Event Bridge的應(yīng)用 126
5.2 Service Bridge:函數(shù)訪問BaaS服務(wù)的橋梁 130
5.2.1 Service Bridge設(shè)計目標(biāo) 131
5.2.2 Service Bridge架構(gòu) 134
5.2.3 Service Bridge功能 138
5.2.4 Service Bridge其他使用場景 143
6 云數(shù)據(jù)庫服務(wù) 154
6.1 云數(shù)據(jù)庫服務(wù)介紹 154
6.1.1 Serverless云數(shù)據(jù)庫Cloud DB 155
6.1.2 云數(shù)據(jù)庫關(guān)鍵能力 156
6.2 云數(shù)據(jù)庫數(shù)據(jù)模型 158
6.3 云數(shù)據(jù)庫架構(gòu) 159
6.3.1 彈性伸縮的多租戶架構(gòu) 159
6.3.2 多租戶精細(xì)化管理 161
6.3.3 云數(shù)據(jù)庫總結(jié)與挑戰(zhàn) 162
7 云存儲服務(wù) 163
7.1 云存儲服務(wù)介紹 163
7.1.1 Serverless云存儲服務(wù) 164
7.1.2 Serverless云存儲服務(wù)關(guān)鍵能力 165
7.2 云存儲架構(gòu) 166
7.2.1 總體架構(gòu) 166
7.2.2 彈性伸縮架構(gòu) 167
7.2.3 聲明式安全規(guī)則 168
7.3 云存儲服務(wù)總結(jié)與挑戰(zhàn) 170
8 云托管服務(wù) 171
8.1 云托管服務(wù)架構(gòu) 172
8.1.1 系統(tǒng)架構(gòu) 172
8.1.2 核心功能特性 173
8.2 云托管技術(shù)原理 174
8.2.1 自定義域名和證書管理 174
8.2.2 證書的自動更新 175
8.2.3 新的CDN接入 176
9 翻譯服務(wù)的Serverless架構(gòu)設(shè)計 177
9.1 Serverless平臺與翻譯服務(wù) 177
9.1.1 AppGallery Connect Serverless平臺 178
9.1.2 云函數(shù) 178
9.1.3 云數(shù)據(jù)庫 179
9.1.4 云存儲 180
9.1.5 云托管 181
9.1.6 翻譯服務(wù) 182
9.2 翻譯服務(wù)架構(gòu)技術(shù)選型 187
9.2.1 業(yè)務(wù)特點 187
9.2.2 團隊特點 189
9.2.3 技術(shù)需求 190
9.2.4 成本需求 191
9.2.5 架構(gòu)選型 192
9.3 翻譯服務(wù)Serverless架構(gòu) 195
9.3.1 功能架構(gòu) 196
9.3.2 函數(shù)劃分策略 197
9.3.3 技術(shù)架構(gòu) 204
9.3.4 關(guān)鍵架構(gòu)質(zhì)量屬性設(shè)計 205
10 翻譯服務(wù)實戰(zhàn)開發(fā) 217
10.1 基于Serverless技術(shù)的翻譯服務(wù)開發(fā) 217
10.1.1 翻譯服務(wù)網(wǎng)站托管 217
10.1.2 基于云函數(shù)開發(fā)后臺邏輯 224
10.1.3 翻譯稿件存儲 244
10.1.4 使用云數(shù)據(jù)庫管理數(shù)據(jù) 246
10.1.5 翻譯服務(wù)上線效果 251
10.2 傳統(tǒng)開發(fā)模式與Serverless模式對比 252
10.2.1 研發(fā)角色和職責(zé)變化 253
10.2.2 不同開發(fā)模式對比 254
10.2.3 研發(fā)效率對比 255
10.3 Serverless技術(shù)演進 257
10.3.1 傳統(tǒng)中間件的Serverless化 257
10.3.2 Serverless模型化 258
10.3.3 與遺留系統(tǒng)的對接 258
10.3.4 關(guān)鍵技術(shù)瓶頸的突破 259
10.3.5 Serverless低代碼平臺 259