Serverless 架構下的 AI 應用開發:入門、實戰與效能優化

語言: CN / TW / HK

作者:Serverless

隨著時間的推移,Serverless 架構變得越來越火熱,憑藉著極致彈性、按量付費、低成本運維等特性,在很多領域發揮著越來越重要的作用;機器學習領域在近些年也非常火熱,並在越來越多的行業中得到應用。

實際上,機器學習專案中一直存在兩大難題:

  • 資源佔用率高、利用率低,尤其在流量波峰和波谷差值較大的專案中,資源浪費更為顯著;

  • 部署、更新、維護複雜度高;

而 Serverless 具有極致彈性、按量付費、低成本運維等特性,若將 Serverless 架構應用在機器學習專案中,在保證機器學習專案效能的同時,降低成本,又能提高資源利用率,是非常值得研究和探索的課題。

基於此,由阿里雲官方出品,來自阿里雲、螞蟻集團的 4 位專家劉宇、田初東、盧萌凱、王仁達(排名不分先後)系統梳理阿里在 Serverless 架構下的 AI 經驗,聯袂推出新書 《Serverless 架構下的 AI 應用開發:入門、實戰與效能優化》

1.png

前言

本書是一本關於 Serverless 架構下機器學習實戰的技術書,通過對 Serverless 架構的基礎介紹、專案開發經驗總結,以及常見的機器學習演算法、模型、框架的學習,對將機器學習專案應用到 Serverless 架構、不同機器學習專案與 Serverless 架構結合以及基於 Serverless 架構進行機器學習應用開發等內容進行了探索。

我們希望通過簡單明瞭的語言、真實的案例,以及開放的原始碼,為讀者介紹 Serverless 架構與機器學習相關的基礎知識。希望讀者可以通過本書真正理解 Serverless 架構與機器學習結合的重要價值,並能順利在 Serverless 架構下開發、上線機器學習專案,從而更加直接地獲得雲端計算帶來的技術紅利。

2.png

本書不僅有基礎理論知識,還有大量的經驗分享,以及對最新技術點的實踐應用,包括但不限於 Serverless 架構下 GPU 例項的上手、多維度的冷啟動優化方案、Serverless 架構多模除錯能力等。

我們希望讀者通過對本書的學習,可以對 Serverless 架構有一個更加全面、直觀的瞭解,對 Serverless 架構下的機器學習有更加深入的認識。同時,希望通過本書的拋磚引玉,幫助讀者將機器學習專案在 Serverless 架構下落地,獲得雲計算髮展的技術紅利。

初識 Serverless 架構

本章通過對 Serverless 架構概念的探索,對 Serverless 架構的優勢與價值、挑戰與困境進行分析,以及 Serverless 架構應用場景的分享,為讀者介紹 Serverless 架構的基礎內容。通過本章的學習,讀者將對 Serverless 架構的理論基礎有一定的瞭解和認識。

Serverless 架構的概念

隨著雲服務的發展,計算資源被高度抽象化,從物理機到雲伺服器,再到容器服務,計算資源逐漸細膩化。

2012 年,Iron.io 的副總裁 Ken Form 在 “Why The Future of Software and Apps is Serverless” 一文中首次提出了無伺服器的概念,並指出 “即使雲端計算已經逐漸興起,但是大家仍然在圍繞著伺服器轉。不過,這不會持續太久,雲應用正在朝著無伺服器方向發展,這將對應用程式的建立和分發產生重大影響”。

2019 年,UC Berkeley 發表論文 “Cloud Programming Simplified: A Berkeley View on Serverless Computing”。在文章中,作者犀利斷言 “新的 BaaS 儲存服務會被髮明,以擴充套件在 Serverless 計算上能夠執行更加適配的應用程式型別。這樣的儲存能夠與本地塊儲存的效能相匹配,而且具有臨時和持久可供選擇特性。基於 Serverless 計算的價格將低於 ServerFul 計算,至少不會高於 ServerFul 計算。Serverless 計算一旦取得技術上的突破,將會導致 ServerFul 服務的下滑。Serverless 將會成為雲時代預設的計算正規化,將會取代 ServerFul 計算,這也意味著伺服器—客戶端模式的終結”。

Serverless 架構從 2012 年首次走進大眾視野到 2019 年成為 UC Berkeley 對雲端計算領域犀利斷言的主角,完成了從一個 “新的觀點” 向 “萬眾矚目的架構” 轉身。在這 7 年時間裡,Serverless 架構從鮮為人知到被商業化應用,再到頭部雲廠商紛紛佈局 Serverless 架構作為雲端計算戰略,逐漸成為人盡皆知的新技術正規化。

當然,在這 7 年間,Serverless 不僅僅在技術架構方面逐漸升級和完善,概念也越來越明確,發展方向也逐漸清晰、明朗。關於 Serverless 的定義,Martin Fowler 在 “Serverless Architectures” 一文中指出 Serverless 實際上是 BaaS 與 FaaS 的組合。

這個簡單明瞭的定義為 Serverless 架構組成結構奠定了基礎。如圖 1-1 所示,Martin Fowler 認為,在 Serverless 架構中,應用的一部分伺服器端邏輯依然由開發者完成,但是和傳統架構不同,它執行在一個無狀態的計算容器中,由事件驅動、生命週期很短(甚至只有一次呼叫)、完全由第三方管理,這種情況被稱為 Functions as a Service(FaaS)。

除此之外,Serverless 架構還要有部分依賴第三方(雲端)應用或服務來管理伺服器端邏輯和狀態的應用,這些應用通常是富客戶端應用(單頁應用或者移動端  App),建立在雲服務生態之上,包括資料庫(Parse、Firebase)、賬號系統(Auth0、AWS Cognito)等,而這些服務最早被稱為 Backend as a Service(BaaS)。

3.png

1-1 Serverless 架構組成結構

同樣認為 Serverless 是 FaaS 與 BaaS 結合而成的 CNCF 在 CNCF WG-Serverless Whitepaper v1.0 中對 Serverless 架構的定義進行了進一步完善:Serverless 是指構建和執行不需要伺服器管理的應用程式概念;它描述了一種更細粒度的部署模型,其中將應用程式打包為一個或多個功能模組,上傳到平臺,然後被執行、擴充套件和計費,以響應當時確切的需求。

與此同時,2019 年 UC Berkeley 的文章 “Cloud Programming Simplified: A Berkeley View on Serverless Computing” 中同樣從 Serverless 架構特性角度,對什麼是 Serverless 進行了補充描述和定義:簡單地說,Serverless = FaaS + BaaS,必須具備彈性伸縮和按量付費的特點。

在中國資訊通訊研究院(以下簡稱“信通院”)雲原生產業聯盟所釋出的《雲原生髮展白皮書(2020 年)》中對 Serverless 的概念也有相關的描述:無伺服器(即 Serverless)是一種架構理念,其核心思想是將提供服務資源的基礎設施抽象成各種服務,以 API 介面的方式供給使用者按需呼叫,真正做到按需伸縮、按使用收費。

這種架構體系消除了對傳統的海量持續線上伺服器元件的需求,降低了開發和運維的複雜度,降低運營成本並縮短了業務系統的交付週期,使得使用者能夠專注在價值密度更高的業務邏輯開發上。

至此,Serverless 架構從結構、行為以及特性方面的定義可以總結為圖 1-2。

4.png

1-2 從不同角度對 Serverless 架構進行定義

Serverless 架構的特點

眾所周知,事物具有兩面性。時至今日,雲端計算的發展已經取得了巨大的進步,但是作為雲端計算最新產物的 Serverless 架構,在巨大的優勢背後,仍然面臨著不可忽略的挑戰。

  • 優勢與價值

亞馬遜 AWS 首席雲端計算技術顧問費良巨集曾說:今天大多數公司在開發應用程式並將其部署在伺服器時,無論選擇公有云還是私有的資料中心,都需要提前瞭解究竟需要多少臺伺服器、多大容量的儲存和資料庫的功能等,並需要部署、執行應用程式和依賴的軟體到基礎設施之上。

假設不想在這些細節上花費精力,是否有一種簡單的架構能夠滿足這種需求?時至今日,伴隨 Serverless 架構逐漸 “走進尋常百姓家”,答案已經很明顯了。

在專案上線過程中,我們一般需要申請主機資源,這時候需花很多時間和精力去評估峰值最大開銷,即使給某些服務按照最大消耗申請資源,也要有專人在不同時間段進行資源的擴容或縮容,以達到保障業務穩定與節約成本的平衡。

對於一些服務來說,有時候申請的資源還需要在最大開銷基礎上評估,即使可能出現很多流量波谷,併產生大量的資源浪費,也不得不這樣做,比如資料庫這種很難擴充套件的應用就是 “儘管浪費資源也比峰值到來時應用程式因為資源不足而無法服務好”。

正如費良巨集所說,在 Serverless 架構下,這個問題得到了比較好的解決,不用計劃到底需要使用多少資源,而是根據實際需要來請求資源,根據使用時間來付費,根據每次申請的計算資源來付費,且讓計費的粒度更小,更有利於降低資源的開銷。

Serverless 架構具有 6 個潛在優勢:

  • 按需提供無限計算資源。
  • 消除雲使用者的前期承諾。
  • 根據需要在短期內支付使用計算資源的能力。
  • 大規模降低成本。
  • 通過資源虛擬化簡化操作並提高利用率。
  • 通過複用來自不同組織的工作負載來提高硬體利用率。

相對於傳統架構,Serverless 架構確實具備業務聚焦、彈性伸縮、按量付費等優勢。這些優勢往往是開發者在技術選型時的重要參考。

1. 業務聚焦

所謂的業務聚焦,指的是讓開發者將更多精力放在自身的業務邏輯之上,而不需要再花費更多精力關注底層資源。

眾所周知,單體架構時代應用比較簡單,物理伺服器的資源足以支撐業務的部署。隨著業務的複雜程度飆升,功能模組複雜且龐大,單體架構嚴重阻塞了開發部署的效率。於是,業務功能解耦,可並行開發和部署單獨模組的微服務架構逐漸流行開來。業務的精細化管理不可避免地推動著基礎資源利用率的提升。

如圖 1-3 所示,虛擬化技術不斷被完善和廣泛運用之後,打通了物理資源隔閡,減輕了使用者管理基礎架構的負擔。容器和 PaaS 平臺則進一步抽象,提供了應用的依賴服務、執行環境和底層所需的計算資源。這使得應用的開發、部署和運維的整體效率再度提升。Serverless 架構則將計算抽象得更加徹底,將應用架構堆疊中的各類資源的管理全部委託給平臺,免去基礎設施的運維,使使用者能夠聚焦高價值的業務領域。

5.png

1-3 虛擬機器、容器、Serverless 架構演進簡圖

2. 彈性伸縮

所謂的彈性伸縮,指的是可以根據業務流量波動,自動進行資源的分配和銷燬,以最大限度地實現平衡穩定、高效能以及提高資源利用率。

眾所周知,從 IaaS 到 PaaS 再到 SaaS 的過程中,去伺服器化越來越明顯。到了Serverless架構,去伺服器化已經上升到一個新的高度。相對於 ServerFul 而言,Serverless 對業務使用者強調的是 Noserve r的心智。

所謂的 Noserver,不是說脫離了伺服器或者說不需要伺服器,而是去除有關對伺服器執行狀態的關心和擔心,這也就意味著原先需要對伺服器進行擴容和縮容的操作也都不再需要業務人員關注了,都交給雲商場進行管理。如圖 1-4所 示,折線為一個網站在某天的流量走勢。

6.png

1-4 傳統雲主機架構與Serverless架構彈性模式下流量與負載對比示意圖

圖 1-4a 的分析如下:

  • 技術人員需要對網站資源用量進行評估,評估結果是這個網站最大的流量峰值為 800PV/小時,所以購買了對應的雲伺服器。 
  • 但是在當天的 10 時,運維人員發現網站流量突然增加,逐漸臨近 800PV/小時。此時,運維人員在線上購買了一臺新的雲主機並進行了環境的配置,最後在 Master 機器上添加了對應的策略,度過了 10~15 時的流量峰值。 
  • 過了 15 時,運維人員發現流量恢復正常,對後加入策略的雲主機進行停止,並將額外的資源釋放。 
  • 到了 18 時,再次發現過載流量的到來……

從圖 1-4b 可以清晰地看到,負載能力始終和流量是匹配的(當然,這個圖本身存在一定問題,即真實的負載能力在一定程度上可能略高於當前流量),即並不需要像傳統雲主機架構那樣在技術人員的干預下應對流量的波峰和波谷,其彈效能力(包括擴容和縮容)均由雲廠商提供。

通過對圖 1-4 的分析不難看出,Serverless 架構所具備的彈效能力在一定程度上來源於廠商的運維技術支援。

Serverless 架構所主張的 “把更專業的事情交給更專業的人,讓開發者更加專注自身的業務邏輯即可”,在彈性模式上也是一個非常直觀的體現。

3. 按量付費

所謂的按量付費,指的是 Serverless 架構支援使用者按照實際的資源使用量進行付費,可以最大限度提高使用者側資源使用效率,降低成本。

在傳統雲主機架構下,伺服器一旦被購買和執行,就在持續消耗資源,並且持續產生費用。儘管每臺伺服器的可用資源是有限的,通常也是固定的,但是伺服器每時每刻的負載是不同的,資源使用率也是不同的,這就導致傳統雲主機架構下,會比較明顯地產生一定的資源浪費。

一般情況下,白天資源利用率相對較高,資源浪費少一些;夜間資源利用率較低,資源浪費會相對高一些。按照《福布斯》雜誌的統計,商業和企業資料中心的典型伺服器僅提供 5%~15% 平均最大處理能力的輸出,這無疑證明了剛剛對傳統雲主機架構的資源使用率和浪費程度分析的正確性。

Serverless 架構則可以讓使用者委託服務提供商管理伺服器、資料庫和應用程式,甚至邏輯。這種做法一方面減少了使用者自己維護的麻煩,另一方面使用者可以根據自己實際使用的粒度進行成本的支付。

對於服務商而言,它們可以將更多的閒置資源進行處理。這從成本、“綠色” 計算角度來說,都是非常不錯的。

7.png

1-5 傳統雲主機架構與 Serverless 架構彈性模式下流量與費用支出對比示意圖

如圖 1-5 所示,折線為一個網站在某天的流量走勢圖。

圖 1-5a 是傳統雲主機架構下流量與費用支出示意圖。通常,業務在上線之前是需要進行資源使用量評估的。工作人員在對該網站的資源使用量評估之後,購買了一臺可以承受每小時最大 1300PV 的伺服器。

在一整天內,這臺伺服器所提供的算力總量為陰影面積,所需要支出的費用也是陰影面積對應算力的費用。但是很明顯可以看出,真正有效的資源使用與費用支出僅僅是流量曲線下的面積,而流量曲線上方的陰影部分則為資源損耗與額外的支出部分。

圖 1-5b 是 Serverless 架構彈性模式下費用支出示意圖。可以清晰地看到,費用支出和流量基本是正比關係,即當流量處於一個較低數值時,對應的資源使用量是相對較少的,對應的費用支出也是相對較少的;當流量處於一個較高數值時,資源使用量和費用支出為正相關增長。

在整個過程中,可以清晰地看出 Serverless 架構並未像傳統雲主機架構樣產生明顯的資源浪費與額外的成本支出。

通過對圖 1-5 的分析,不難看出 Serverless 架構所具備的彈性伸縮能力與按量付費模型進行有機結合,可以最大限度地避免資源浪費、降低業務成本。

4. 其他優勢

除前面所說的業務聚焦、彈性伸縮、按量付費等優勢,Serverless 架構還具備其他優勢:

  • 縮短業務創新週期:由於 Serverless 架構在一定程度上是 “雲廠商努力做更多,讓開發者更關注自身的業務” 的模式,因此我們可以認為開發者將會付出更少的時間、精力在 ServerFul 架構所需要關注的 OS 層面、雲主機層面、系統環境層面,更專注自身的業務邏輯,這帶來的直接效果就是提高專案的上線效率、降低業務的創新週期、提高研發交付速度。

  • 系統安全性更高:雖然 Serverless 架構在一定程度上有一種 “黑盒” 即視感,但正因為如此,Serverless 架構往往不會提供登入例項的功能,也不會對外暴露系統的細節。同時,作業系統等層面的維護也都交給雲廠商,這意味著在一定程度上 Serverless 架構是更加安全的:一方面表現在 Serverless 架構只對外暴露預定的,且需要暴露的服務和介面,相對雲主機在一定程度上免去了被暴力破解的風險;另一方面表現在雲廠商有 更加專業的安全團隊和伺服器運維團隊來幫助開發者保障整體的業務安全與服務穩定。

  • 更平穩的業務變更:Serverless 架構是由雲服務商提供的一種天然分散式架構,同時又因為 Noserver 的特性免除了開發者對伺服器執行狀態的關心和擔心,所以在 Serverless 架構下,開發者對業務程式碼、配置的變更操作非常簡單,只需要通過雲廠商所提供的工具進行更改即可,待新的業務邏輯平穩生效後則不再需要開發者關注。所以,Serverless 架構在業務的平滑升級、變更、敏捷開發、功能迭代、灰度釋出等多個層面有著極大的優勢。

當然,即使上面已經舉例說明了很多 Serverless 架構的優勢,我們仍然沒辦法枚舉出其全部的優勢和價值。但不可否認的是,Serverless 架構正在被更多人關注,也正在被更多團隊和個人所接受和應用,其價值已快速突顯出來。

點選此處,檢視函式計算 FC 更多詳情!