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