
隨著時間的推移,Serverless 架構變得越來越火熱,憑借著極致彈性、按量付費、低成本運維等特性,在很多領域發揮著越來越重要的作用;機器學習領域在近些年也非常火熱,并在越來越多的行業中得到應用,
實際上,機器學習專案中一直存在兩大難題:
- 資源占用率高、利用率低,尤其在流量波峰和波谷差值較大的專案中,資源浪費更為顯著;
- 部署、更新、維護復雜度高;
而 Serverless 具有極致彈性、按量付費、低成本運維等特性,若將 Serverless 架構應用在機器學習專案中,在保證機器學習專案性能的同時,降低成本,又能提高資源利用率,是非常值得研究和探索的課題,
基于此,由阿里云官方出品,來自阿里云、螞蟻集團的 4 位專家劉宇、田初東、盧萌凱、王仁達(排名不分先后)系統梳理阿里在 Serverless 架構下的 AI 經驗,聯袂推出新書**《Serverless 架構下的 AI 應用開發:入門、實戰與性能優化》 **,

新書將在免費在 Serverless (serverlessdevs)公眾號連載,歡迎大家訂閱關注!
前言
本書是一本關于 Serverless 架構下機器學習實戰的技術書,通過對 Serverless 架構的基礎介紹、專案開發經驗總結,以及常見的機器學習演算法、模型、框架的學習,對將機器學習專案應用到 Serverless 架構、不同機器學習專案與 Serverless 架構結合以及基于 Serverless 架構進行機器學習應用開發等內容進行了探索,
我們希望通過簡單明了的語言、真實的案例,以及開放的源代碼,為讀者介紹 Serverless 架構與機器學習相關的基礎知識,希望讀者可以通過本書真正理解 Serverless 架構與機器學習結合的重要價值,并能順利在 Serverless 架構下開發、上線機器學習專案,從而更加直接地獲得云計算帶來的技術紅利,

本書不僅有基礎理論知識,還有大量的經驗分享,以及對最新技術點的實踐應用,包括但不限于 Serverless 架構下 GPU 實體的上手、多維度的冷啟動優化方案、Serverless 架構多模除錯能力等,
我們希望讀者通過對本書的學習,可以對 Serverless 架構有一個更加全面、直觀的了解,對 Serverless 架構下的機器學習有更加深入的認識,同時,希望通過本書的拋磚引玉,幫助讀者將機器學習專案在 Serverless 架構下落地,獲得云計算發展的技術紅利,
第 1 章:介紹 Serverless 架構基礎,包括 Serverless 架構的發展、優勢、面臨的挑戰等;
第 2 章:從 Serverless 架構的開發流程、與 ServerFul 開發流程的對比、傳統框架遷移等多個方面,對 Serverless 架構下的應用開發進行相關介紹;
第 3 章:介紹機器學習相關的探索,包括對支持向量機、神經網路等演算法和模型的學習與研究;
第 4 章:介紹常見的機器學習框架以及在實戰專案中的應用,便于讀者了解常見的機器學習框架,以及部署到 Serverless 架構的方案等;
第 5 章:介紹幾個機器學習應用較為廣泛的領域的專案實戰,包括影像識別領域、情感分析領域以及對模型升級迭代相關領域的探索,涉及容器鏡像、預留實體、GPU 實體等諸多 Serverless 架構的新功能和特性;
第 6 章和第 7 章:介紹兩個完整的 Serverless 架構與 AI 結合的案例,從專案背景開始到相關模塊的設計、專案的開發與部署,通過完整的流程講解 Serverless 架構下機器學習專案的上手、開發、維護全程序;
第 8 章:針對 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),

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,

1-2 從不同角度對 Serverless 架構進行定義
Serverless 架構的特點
眾所周知,事物具有兩面性,時至今日,云計算的發展已經取得了巨大的進步,但是作為云計算最新產物的 Serverless 架構,在巨大的優勢背后,仍然面臨著不可忽略的挑戰,
優勢與價值
亞馬遜 AWS 首席云計算技術顧問費良宏曾說:今天大多數公司在開發應用程式并將其部署在服務器時,無論選擇公有云還是私有的資料中心,都需要提前了解究竟需要多少臺服務器、多大容量的存盤和資料庫的功能等,并需要部署、運行應用程式和依賴的軟體到基礎設施之上,
假設不想在這些細節上花費精力,是否有一種簡單的架構能夠滿足這種需求?時至今日,伴隨 Serverless 架構逐漸 “走進尋常百姓家”,答案已經很明顯了,
在專案上執行緒序中,我們一般需要申請主機資源,這時候需花很多時間和精力去評估峰值最大開銷,即使給某些服務按照最大消耗申請資源,也要有專人在不同時間段進行資源的擴容或縮容,以達到保障業務穩定與節約成本的平衡,
對于一些服務來說,有時候申請的資源還需要在最大開銷基礎上評估,即使可能出現很多流量波谷,并產生大量的資源浪費,也不得不這樣做,比如資料庫這種很難擴展的應用就是 “盡管浪費資源也比峰值到來時應用程式因為資源不足而無法服務好”,
正如費良宏所說,在 Serverless 架構下,這個問題得到了比較好的解決,不用計劃到底需要使用多少資源,而是根據實際需要來請求資源,根據使用時間來付費,根據每次申請的計算資源來付費,且讓計費的粒度更小,更有利于降低資源的開銷,
Serverless 架構具有 6 個潛在優勢:
- 按需提供無限計算資源,
- 消除云用戶的前期承諾,
- 根據需要在短期內支付使用計算資源的能力,
- 大規模降低成本,
- 通過資源虛擬化簡化操作并提高利用率,
- 通過復用來自不同組織的作業負載來提高硬體利用率,
相對于傳統架構,Serverless 架構確實具備業務聚焦、彈性伸縮、按量付費等優勢,這些優勢往往是開發者在技術選型時的重要參考,
1.業務聚焦
所謂的業務聚焦,指的是讓開發者將更多精力放在自身的業務邏輯之上,而不需要再花費更多精力關注底層資源,
眾所周知,單體架構時代應用比較簡單,物理服務器的資源足以支撐業務的部署,隨著業務的復雜程度飆升,功能模塊復雜且龐大,單體架構嚴重阻塞了開發部署的效率,于是,業務功能解耦,可并行開發和部署單獨模塊的微服務架構逐漸流行開來,業務的精細化管理不可避免地推動著基礎資源利用率的提升,
如圖 1-3 所示,虛擬化技術不斷被完善和廣泛運用之后,打通了物理資源隔閡,減輕了用戶管理基礎架構的負擔,容器和 PaaS 平臺則進一步抽象,提供了應用的依賴服務、運行環境和底層所需的計算資源,這使得應用的開發、部署和運維的整體效率再度提升,Serverless 架構則將計算抽象得更加徹底,將應用架構堆疊中的各類資源的管理全部委托給平臺,免去基礎設施的運維,使用戶能夠聚焦高價值的業務領域,

1-3 虛擬機、容器、Serverless 架構演進簡圖
2.彈性伸縮
所謂的彈性伸縮,指的是可以根據業務流量波動,自動進行資源的分配和銷毀,以最大限度地實作平衡穩定、高性能以及提高資源利用率,
眾所周知,從 IaaS 到 PaaS 再到 SaaS 的程序中,去服務器化越來越明顯,到了Serverless架構,去服務器化已經上升到一個新的高度,相對于 ServerFul 而言,Serverless 對業務用戶強調的是 Noserve r的心智,
所謂的 Noserver,不是說脫離了服務器或者說不需要服務器,而是去除有關對服務器運行狀態的關心和擔心,這也就意味著原先需要對服務器進行擴容和縮容的操作也都不再需要業務人員關注了,都交給云商場進行管理,如圖 1-4所 示,折線為一個網站在某天的流量走勢,

1-4 傳統云主機架構與Serverless架構彈性模式下流量與負載對比示意圖
圖 1-4a 的分析如下:
- 技術人員需要對網站資源用量進行評估,評估結果是這個網站最大的流量峰值為800PV/小時,所以購買了對應的云服務器,
- 但是在當天的10時,運維人員發現網站流量突然增加,逐漸臨近800PV/小時,此時,運維人員在線上購買了一臺新的云主機并進行了環境的配置,最后在Master機器上添加了對應的策略,度過了10~15時的流量峰值,
- 過了15時,運維人員發現流量恢復正常,對后加入策略的云主機進行停止,并將額外的資源釋放,
- 到了18時,再次發現過載流量的到來……
從圖 1-4b 可以清晰地看到,負載能力始終和流量是匹配的(當然,這個圖本身存在一定問題,即真實的負載能力在一定程度上可能略高于當前流量),即并不需要像傳統云主機架構那樣在技術人員的干預下應對流量的波峰和波谷,其彈性能力(包括擴容和縮容)均由云廠商提供,
通過對圖 1-4 的分析不難看出,Serverless 架構所具備的彈性能力在一定程度上來源于廠商的運維技術支持,
Serverless 架構所主張的 “把更專業的事情交給更專業的人,讓開發者更加專注自身的業務邏輯即可”,在彈性模式上也是一個非常直觀的體現,
3.按量付費
所謂的按量付費,指的是 Serverless 架構支持用戶按照實際的資源使用量進行付費,可以最大限度提高用戶側資源使用效率,降低成本,
在傳統云主機架構下,服務器一旦被購買和運行,就在持續消耗資源,并且持續產生費用,盡管每臺服務器的可用資源是有限的,通常也是固定的,但是服務器每時每刻的負載是不同的,資源使用率也是不同的,這就導致傳統云主機架構下,會比較明顯地產生一定的資源浪費,
一般情況下,白天資源利用率相對較高,資源浪費少一些;夜間資源利用率較低,資源浪費會相對高一些,按照《福布斯》雜志的統計,商業和企業資料中心的典型服務器僅提供 5%~15% 平均最大處理能力的輸出,這無疑證明了剛剛對傳統云主機架構的資源使用率和浪費程度分析的正確性,
Serverless 架構則可以讓用戶委托服務提供商管理服務器、資料庫和應用程式,甚至邏輯,這種做法一方面減少了用戶自己維護的麻煩,另一方面用戶可以根據自己實際使用的粒度進行成本的支付,
對于服務商而言,它們可以將更多的閑置資源進行處理,這從成本、“綠色” 計算角度來說,都是非常不錯的,

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 架構正在被更多人關注,也正在被更多團隊和個人所接受和應用,其價值已快速突顯出來,
更多內容關注 Serverless 微信公眾號(ID:serverlessdevs),匯集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,用戶最佳實踐,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/502805.html
標籤:其他
上一篇:洛谷 P2973 [USACO10HOL]Driving Out the Piggies G ,概率論+高斯消元
下一篇:洛谷 P2973 [USACO10HOL]Driving Out the Piggies G ,概率論+高斯消元
