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