本書是一本關(guān)于Serverless架構(gòu)從原理、入門到實戰(zhàn)的技術(shù)書籍,本書通過多個開源項目(包括不限于Knative、OpenWhisk、Kubeless等)、多個云廠商的多款云產(chǎn)品(包括不限于阿里云函數(shù)計算、阿里云Serverless工作流、騰訊云云函數(shù)、華為云函數(shù)工作流、百度智能云函數(shù)計算、AWS Lambda、Google Cloud Platform Functions等),通過多種途徑向讀者介紹什么是Serverless架構(gòu)、如何上手Serverless架構(gòu)、不同領(lǐng)域中Serverless架構(gòu)的應(yīng)用以及如何從零開發(fā)一個Serverless應(yīng)用等,希望讀者通過對本書的閱讀,可以對Serverless架構(gòu)有一個更加全面、直觀地了解,可以通過本書的拋磚引玉,幫助讀者將Serverless項目真實落地,將Serverless架構(gòu)融入到自己所在的領(lǐng)域,獲得Serverless架構(gòu)帶來的技術(shù)紅利。
(1)作者資深:作者劉宇是阿里云Serverless產(chǎn)品側(cè)負責人,從事Serverless相關(guān)的工作多年,有豐富的實踐經(jīng)驗,是國內(nèi)知名的阿里云Serverless布道師。
(2)內(nèi)容全面:這是一部從產(chǎn)品、開發(fā)和工程實踐3個維度全面講解Serverless架構(gòu)的著作。
(3)實操性強:通過本書,讀者不僅能從產(chǎn)品和技術(shù)角度對Serverless架構(gòu)有更加全面、直觀的了解,而且還能將Serverless架構(gòu)融入自己研究的領(lǐng)域,獲得Serverless架構(gòu)帶來的技術(shù)紅利。
(4)專家力薦:來自國防科大、浙大、阿里、騰訊、字節(jié)跳動、CNCF的近20位學界和業(yè)界的專家一致推薦。
Serverless架構(gòu)是云計算發(fā)展的產(chǎn)物,它繼承了云計算的優(yōu)點,并具備極致彈性、按量付費、免運維等優(yōu)勢。Serverless架構(gòu)讓開發(fā)者可以將更多精力放在業(yè)務(wù)邏輯上,讓資源浪費更少,讓服務(wù)器運維成本更低,真正意義上做到了降本提效。
為什么寫作本書
Serverless架構(gòu)近幾年越來越火,它憑借極致彈性、按量付費、免運維等優(yōu)勢在更多領(lǐng)域發(fā)揮著越來越重要的作用。但是由于Serverless架構(gòu)比較年輕,相關(guān)學習資源相對來說比較少。筆者希望通過一些真實的案例帶領(lǐng)讀者入門Serverless架構(gòu),了解如何在不同領(lǐng)域應(yīng)用Serverless架構(gòu),并學會從零開發(fā)Serverless應(yīng)用。
本書主要內(nèi)容
本書是一本關(guān)于Serverless架構(gòu)從原理、入門到實戰(zhàn)的技術(shù)指南,通過多個開源項目、多個云廠商的多款云產(chǎn)品介紹什么是Serverless架構(gòu)、如何上手Serverless架構(gòu)、不同領(lǐng)域中Serverless架構(gòu)的應(yīng)用以及如何從零開發(fā)一個Serverless應(yīng)用等,帶領(lǐng)讀者全面了解Serverless架構(gòu),幫助讀者獲得Serverless架構(gòu)帶來的技術(shù)紅利。
本書主要包括三部分:概念與產(chǎn)品、開發(fā)入門、工程實踐。
部分包括2章,介紹了Serverless架構(gòu)的定義、規(guī)范、優(yōu)勢、面臨的挑戰(zhàn)、應(yīng)用領(lǐng)域以及工業(yè)界和開源界的優(yōu)秀項目等。
第二部分包括3章,介紹如何開發(fā)Serverless應(yīng)用、如何從零搭建FaaS平臺等。
第三部分是工程實踐,主要內(nèi)容是Serverless架構(gòu)在各個領(lǐng)域的實戰(zhàn)應(yīng)用,涵蓋運維領(lǐng)域、圖像和音視頻處理領(lǐng)域、人工智能和大數(shù)據(jù)領(lǐng)域、前端領(lǐng)域以及IoT等眾多領(lǐng)域。這一部分還給出了兩個完整的Serverless實戰(zhàn)項目的從零開發(fā)過程。
除這三部分之外,本書還包括另外兩章。
第0章從云計算到Serverless:這是全書的引入部分。眾所周知,Serverless是云計算發(fā)展的必然產(chǎn)物,那么云計算是如何發(fā)展的?為什么會產(chǎn)生Serverless的概念?這個概念是誰提出的?通過這一章,讀者可以對云計算的發(fā)展以及Serverless的誕生有一個基礎(chǔ)的了解。
結(jié)束語Serverless正當時:介紹Serverless領(lǐng)域知名且活躍的開發(fā)者對Serverless的看法以及期待。希望讀者通過這一部分可以歸納出自己心中的Serverless,也希望這些前輩們的看法、思想可以讓讀者對Serverless有更深入的了解。
如何閱讀本書
讀者應(yīng)當具有一定的編程基礎(chǔ),例如熟悉Node.js、Python等語言,同時也需要對云計算有初步的了解,有相關(guān)云產(chǎn)品使用經(jīng)驗。
本書采用循序漸進的方法,從什么是Serverless架構(gòu)開始說起,通過零基礎(chǔ)上手Serverless架構(gòu)、建設(shè)自己的FaaS平臺等幫助讀者快速入門Serverless架構(gòu),并通過領(lǐng)域?qū)崙?zhàn)、應(yīng)用案例幫助讀者拓展思路。我建議讀者通過下述三遍閱讀法來掌握書中內(nèi)容。
遍閱讀,通讀全書,主要弄清楚概念,再完成Serverless的基礎(chǔ)入門,并對Serverless在各個領(lǐng)域的應(yīng)用有相對基本的認識,對如何完整地開發(fā)一個Serverless應(yīng)用有基礎(chǔ)的了解。
第二遍閱讀,專攻領(lǐng)域?qū)崙?zhàn),通過領(lǐng)域?qū)崙?zhàn)提供的開源代碼,深入了解Serverless架構(gòu)的運行原理、開發(fā)技巧等,可以通過筆者的拋磚引玉發(fā)揮自己的思路,在更多領(lǐng)域?qū)erverless架構(gòu)與之結(jié)合。
第三遍閱讀,邊讀邊實踐,加深理解Serverless架構(gòu)概念的同時,動手從零開發(fā)一款Serverless應(yīng)用并將其部署上線,從而完整地理解Serverless架構(gòu)的原理、優(yōu)勢,并對Serverless的開發(fā)技巧有更加深入的認識和獨到的見解。
閱讀過程可能枯燥,但只有在反復(fù)的研讀中,自己對Serverless架構(gòu)的理解才能不斷深入。另外,Serverless架構(gòu)的發(fā)展速度是非?斓,本書的案例代碼可能會失效,筆者會盡快更新相關(guān)代碼倉庫。也希望讀者可以利用好這些倉庫。
致謝
在編寫本書的過程中,筆者遇到過很多的困難和挑戰(zhàn)。在此特別感謝阿里云云原生團隊的小伙伴們,是你們的支持和鼓勵讓本書得以順利完成。
感謝楊秋弟(曼紅)、楊浩然(不瞋)等前輩,是你們在這本書從開始到結(jié)束的過程中,不斷給予鼓勵和支持,才得以讓本書如期順利完成;感謝國防科技大學竇勇教授、浙江大學卜佳俊教授等提供的幫助以及對本書提出的極具建設(shè)性的意見;感謝姜曦 (筱姜)在本書編寫、校對、出版等整個過程中給予鼓勵和支持并幫忙校驗、協(xié)調(diào)資源;感謝阿里云UED團隊,尤其是周月僑(小取)同學,幫忙對本書的部分插圖等進行設(shè)計、規(guī)范定制;感謝羅松(西流)、張千風(千風)等在本書編寫過程中指導部分代碼的完成以及功能、案例的實現(xiàn);感謝陳緒(還劍)、錢梅芳(寶惜)等前輩對本書提供幫助和建設(shè)性意見。同時,也要感謝我的家人對我工作的鼓勵和支持,對我每走一步的信任和鼓勵;感謝身邊的小伙伴對我的關(guān)心和幫助。感謝身邊每一個人,謝謝你們。
由于作者水平有限,書中不足及錯誤之處在所難免,敬請專家和讀者批評指正。
江昱(劉宇)
2021年4月
序一
序二
序三
序四
序五
序六
序七
序八
前言
第0章 從云計算到Serverless 1
部分 概念與產(chǎn)品
第1章 什么是Serverless 8
1.1 Serverless的定義 8
1.1.1 廣義定義探索 8
1.1.2 Serverless工作流程 10
1.2 Serverless規(guī)范 12
1.2.1 FaaS解決方案模型 12
1.2.2 函數(shù)的規(guī)范與定義 12
1.2.3 函數(shù)生命周期 15
1.2.4 其他規(guī)范 20
1.3 Serverless的特點 35
1.3.1 優(yōu)勢與特點 35
1.3.2 面臨的挑戰(zhàn) 38
1.4 典型應(yīng)用場景 43
1.4.1 實時文件處理 44
1.4.2 數(shù)據(jù)ETL處理 44
1.4.3 實時數(shù)據(jù)處理 44
1.4.4 AI推理預(yù)測 45
1.4.5 IoT后端 45
1.4.6 Web應(yīng)用/移動應(yīng)用后端 46
1.4.7 音視頻轉(zhuǎn)碼 46
1.5 未來可期 47
第2章 主流Serverless平臺和產(chǎn)品 48
2.1 工業(yè)FaaS平臺 48
2.1.1 AWS Lambda 48
2.1.2 Google Cloud Functions 50
2.1.3 Azure Functions 52
2.1.4 阿里云函數(shù)計算 54
2.1.5 華為云函數(shù)工作流 57
2.1.6 騰訊云云函數(shù) 59
2.2 開源FaaS平臺 60
2.2.1 Knative 61
2.2.2 Apache OpenWhisk 65
2.2.3 Fission 69
2.2.4 Kubeless 76
第二部分 開發(fā)入門
第3章 從零入門Serverless 84
3.1 創(chuàng)建函數(shù) 84
3.1.1 AWS Lambda 84
3.1.2 Google Cloud Functions 87
3.1.3 阿里云函數(shù)計算 89
3.1.4 華為云函數(shù)工作流 91
3.1.5 騰訊云云函數(shù) 94
3.2 開發(fā)一個Serverless應(yīng)用 97
3.2.1 知識準備 98
3.2.2 項目開發(fā) 101
3.2.3 舉一反三 105
3.3 觸發(fā)器 106
3.3.1 定時觸發(fā)器 108
3.3.2 對象存儲觸發(fā)器 108
3.3.3 API網(wǎng)關(guān)觸發(fā)器 108
3.4 傳統(tǒng)Web框架遷移 113
3.4.1 請求集成方案 114
3.4.2 其他方案 117
第4章 Serverless應(yīng)用開發(fā)、調(diào)試與優(yōu)化 120
4.1 Serverless應(yīng)用開發(fā)觀念的轉(zhuǎn)變 120
4.1.1 文件上傳方法 120
4.1.2 文件讀寫與持久化方法 124
4.1.3 慎用部分Web框架的特性 125
4.1.4 要注意應(yīng)用組成結(jié)構(gòu) 125
4.2 Serverless應(yīng)用調(diào)試秘訣 126
4.2.1 在線調(diào)試 126
4.2.2 本地調(diào)試 129
4.2.3 其他調(diào)試方案 130
4.3 細數(shù)Serverless的配套服務(wù) 132
4.3.1 開發(fā)者工具 132
4.3.2 Serverless Workflow 138
4.3.3 可觀測性 139
4.4 Serverless應(yīng)用優(yōu)化 141
4.4.1 資源評估依舊重要 141
4.4.2 合理的代碼包規(guī)格 141
4.4.3 合理復(fù)用實例 142
4.4.4 善于利用函數(shù)特性 143
第5章 從零搭建FaaS平臺 146
5.1 零基礎(chǔ)上手Knative應(yīng)用 146
5.1.1 Knative簡介 146
5.1.2 Knative部署 147
5.1.3 體驗測試 150
5.2 自建Apache OpenWhisk平臺 152
5.2.1 OpenWhisk簡介 152
5.2.2 OpenWhisk部署 152
5.2.3 開發(fā)者工具 156
5.2.4 體驗測試 157
5.3 快速搭建Kubeless平臺 157
5.3.1 Kubeless簡介 157
5.3.2 Kubeless部署 158
5.3.3 下載命令行工具 159
5.3.4 體驗測試 160
第三部分 工程實踐
第6章 Serverless與監(jiān)控告警、自動化運維 164
6.1 通過Serverless架構(gòu)實現(xiàn)監(jiān)控告警功能 164
6.1.1 Web服務(wù)監(jiān)控告警 164
6.1.2 云服務(wù)監(jiān)控告警 172
6.1.3 總結(jié) 175
6.2 釘釘/企業(yè)微信機器人:GitHub觸發(fā)器與Issue機器人 176
6.2.1 GitHub觸發(fā)器的實現(xiàn) 176
6.2.2 GitHub Issue的識別 179
6.2.3 釘釘機器人/企業(yè)微信機器人的實現(xiàn) 181
6.2.4 Issue機器人的實現(xiàn) 183
6.2.5 總結(jié) 185
6.3 觸發(fā)器和函數(shù)賦能自動化運維 186
6.3.1 云盤自動快照 186
6.3.2 服務(wù)器定時重啟 188
6.3.3 總結(jié) 190
6.4 Serverless CI/CD實踐案例 191
6.4.1 CI/CD實踐 191
6.4.2 總結(jié) 196
第7章 Serverless在圖像、音視頻處理中的應(yīng)用 197
7.1 Serverless架構(gòu)下的圖片壓縮與加水印 197
7.1.1 Serverless的圖片壓縮方案 197
7.1.2 Serverless的圖片加水印方案 204
7.1.3 項目部署與測試 205
7.1.4 總結(jié) 208
7.2 Serverless架構(gòu)下的音視頻處理 209
7.2.1 準備ffmpeg 210
7.2.2 音視頻處理 212
7.2.3 總結(jié) 222
7.3 Serverless:讓圖像合成更簡單 222
7.3.1 為頭像增加圣誕帽 222
7.3.2 為頭像增加固定裝飾 230
7.3.3 總結(jié) 233
第8章 Serverless架構(gòu)下的人工智能與大數(shù)據(jù)實戰(zhàn) 235
8.1 20行代碼:Serverless架構(gòu)下用Python輕松實現(xiàn)圖像分類和預(yù)測 235
8.1.1 ImageAI與圖像識別 235
8.1.2 項目Serverless化 237
8.1.3 項目部署與測試 241
8.1.4 項目優(yōu)化 242
8.1.5 總結(jié) 244
8.2 Serverless與NLP:讓我們的博客更有趣 244
8.2.1 賦能網(wǎng)站SEO 244
8.2.2 為你寫詩小工具 251
8.2.3 總結(jié) 258
8.3 基于Serverless架構(gòu)的驗證碼識別功能 258
8.3.1 淺談驗證碼 258
8.3.2 驗證碼識別 260
8.3.3 基于Serverless架構(gòu)的驗證碼識別 266
8.3.4 總結(jié) 272
8.4 函數(shù)計算與對象存儲實現(xiàn)WordCount 272
8.4.1 理論基礎(chǔ) 273
8.4.2 功能實現(xiàn) 274
8.4.3 測試體驗 279
8.4.4 總結(jié) 281
第9章 Serverless架構(gòu)在前端領(lǐng)域的應(yīng)用 282
9.1 初識Serverless SSR 282
9.1.1 Serverless與SSR 283
9.1.2 總結(jié) 285
9.2 Serverless架構(gòu)下的前后端一體化 286
9.2.1 前后端一體化的發(fā)展 286
9.2.2 Serverless與前后端一體化 288
9.2.3 總結(jié) 291
第10章 Serverless架構(gòu)在IoT等其他領(lǐng)域的應(yīng)用 292
10.1 基于Serverless架構(gòu)與WebSocket技術(shù)的聊天工具 292
10.1.1 原理解析 292
10.1.2 匿名聊天室 295
10.1.3 體驗與測試 302
10.1.4 總結(jié) 305
10.2 Serverless與IoT:為智能音箱賦能 305
10.2.1 天貓精靈 306
10.2.2 小愛同學 310
10.2.3 總結(jié) 313
10.3 用手機寫代碼:基于Serverless的在線編程能力探索 313
10.3.1 在線編程功能開發(fā) 314
10.3.2 更貼近本地的代碼執(zhí)行器 318
10.3.3 總結(jié) 328
第11章 Serverless工程化項目實踐 330
11.1 基于Serverless架構(gòu)的博客系統(tǒng) 330
11.1.1 項目背景 330
11.1.2 需求分析 331
11.1.3 整體設(shè)計 331
11.1.4 項目開發(fā) 335
11.1.5 項目預(yù)覽 346
11.1.6 思路拓展 350
11.1.7 總結(jié) 355
11.2 基于Serverless架構(gòu)的人工智能相冊小程序 355
11.2.1 項目背景 355
11.2.2 需求分析 356
11.2.3 整體設(shè)計 357
11.2.4 項目開發(fā) 366
11.2.5 項目預(yù)覽 386
11.2.6 經(jīng)驗積累 388
11.2.7 總結(jié) 391
結(jié)束語 Serverless正當時 392
附錄 部分代碼匯總 400