快速上手 Serverless|入門第一課
一、 從云計算到 Serverless
自世界上第一臺通用計算機 ENIAC (圖左)誕生以來,計算機科學與技術的發展就從未停止過前進的腳步。2003年-2006年,谷歌先后發表了這三篇非常經典的論文(圖右),指明了HDFS(分布式文件系統)、MapReduce(并行計算)和HBase(分布式數據庫)的技術基礎及未來機會,為云計算發展方向奠定了基礎。
所以說從。ENIAC 到谷歌的3篇經典論文,計算機科學與技術的發展是在不斷的前進。而到了云計算時代,可以說計算機科學與技術的發展是在飛速的前進。
云計算的概念
對于云計算的界定,學術界的和工業界有不同的理解,回顧下云計算的發展歷程:
1、2006年,谷歌首席執行官在搜索引擎大會上首次提出云計算的概念;同年亞馬遜將其彈性計算能力作為云服務器進行售賣,標志著云計算這種新興商業模式正式誕生;
2、2008年,微軟發布云計算平臺 Windows Azure,嘗試將技術和服務托管化、線上化;
3、2009年,《伯克利云計算白皮書》發表,文中明確指出云計算的定義:云計算包含互聯網上的應用服務以及在數據中心提供這些服務的軟硬件設施。
明確定義后,伯克利提出了關于云計算展望,同時也指出云計算所面臨的10個問題,如服務的可用性,數據的丟失或者數據安全性和可審計性等。
二、Serverless 概念
Serverless 定義
Serverless 翻譯成中文是無服務器,所謂的無服務器并非是說不需要依靠服務器等資源,而是說開發者再也不用過多考慮服務器的問題,可以更專注在產品代碼上,同時計算資源也開始作為服務出現,而不是作為服務器的概念出現,Serverless是一種構建和管理基于微服務架構的完整流程,允許用戶在服務部署級別而不是服務器部署級別來管理用戶的應用部署。與傳統架構的不同之處在于,它完全由第三方管理,由事件觸發,存在于無狀態(Stateless),暫存(可能只存在于一次調用的過程中)在計算容器內,Serverless 部署應用無須涉及更多的基礎設施建設,就可以基本實現自動構建、部署和啟動服務。
Serverless 架構
左邊是傳統意義上來說比較常見的 Web 應用的架構, 它是由客戶端、服務端、數據庫等元素組成。
以往做此類項目時,開發者需要在服務端做很多操作,如購買服務器、考慮購買數量、寬帶、操作系統、部署在哪幾個區、環境、軟件等等問題。隨后還需要人為對這臺服務器的健康要實時去監控,不斷的去感知。
而在 Serverless 架構下,開發者只需要關心我們的業務代碼即可,在項目整個的開發、上線、維護過程中,用戶并不需要關注服務器層面的維護,也無需為流量的波峰波谷進行運維資源的投入,這一部分將由云廠商來負責;同時在 Serverless 架構下,用戶也無需為閑置資源進行額外支出。
Serverless 優點
Serverless 架構擁有零服務器運維和空閑時無計算成本等特點;其交付心智可以體現為將復雜留給云廠商,把便捷帶給更多開發者。綜上所述 Serverless 的優勢可以體現在如下:
1)降本提效
云廠商為使用者提供服務器的管理和運維工作,為使用者提供數據庫、對象存儲等 Baas 服務,讓用戶將更多的注意力放在自身的業務邏輯上,提升研發效率,縮小項目的創新周期,同時 Serverless 的使用者不用更多的擔心自身的服務器運維,基礎設施的運維等工作,更不用為這部分有額外的費用支出,無需承擔更多的運維工作成本等;Serverless 架構提供了較為完善、全面的按量付費模型,使用者只需要按照自己實際使用的資源量付費即可;Serverless 架構在這一層面有較為明確的優勢。
降低運維成本
降低人力成本
提高研發效率
降低創新周期
按量付費、降低支出成本
2)安全、方便、可靠
把更專業的事情交給更專業的人去做,Serverless 架構將更多服務器運維、安全相關的事情交給云廠商來做,大規模提升項目整體的安全性;同時,Serverless 架構明顯比其它架構更簡單,因為更多的 Baas 服務都是云廠商提供的,使用者將會管理更少的組件,這意味著 Serverless 的使用者可以更簡單更方便的管理項目;同時 Serverless 架構擁有著彈性能力,即自動伸縮的能力,該能力可以讓項目在流量增加的時候,自動進行擴容,在流量降低的時候,自動進行縮容,進而保證整個業務的安全、穩定。專業團隊為用戶保障安全,保障性能,這使得 Serverless 架構:
安全風險更低
資源開銷更小
符合“綠色”計算思想
更加方便管理
彈性伸縮,服務更可靠
總體來說,托管給云廠商之后呢,不僅可以大規模的提升項目整體的安全性和穩定性,Serverless 架構也是明顯比其他架構更為簡單的。
面臨的挑戰
Serverless架構雖然出現多年但是真正步入“元年”并得以快速發展的時間其實很短暫;因此Serverless架構擁雖有諸多優點,但是也面臨一些困難和挑戰,包括但不限于冷啟動問題嚴重、開發工具不完善、廠商鎖定等現象。但是近些年 Serverless 架構熱度持續上升,人們對它寄予厚望,各個廠商也加大投入,相信目前的問題都是暫時的,Serverless 架構會朝著更好用、更易用的方向不斷演進。
Serverless 架構為使用者提供全新的編程范式的同時,當用戶在享受 Serverless 帶來的第一波技術紅利的時候, Serverless 的缺點也逐漸地暴露了出來,例如函數的冷啟動問題,就是如今頗為嚴峻且備受關注的問題。由于 Serverless 架構具有彈性伸縮的能力, Serverless 服務的供應商會根據用戶服務的流量波動進行實例的增加或縮減,其示意圖如圖所示。
以阿里云函數計算為例,當系統接收到第一個觸發函數的事件時,它將啟動一個容器來運行代碼。如果此時收到了新的事件,而第一個容器仍在處理上一個事件,平臺將啟動第二個代碼實例來處理第二個事件, Serverless 架構的這種自動的零管理水平縮放,將持續到有足夠的代碼實例來處理所有的工作負載為止。當然,不僅僅是并發情況下會比較容易觸發函數冷啟動,在函數的前后兩次觸發時間間隔超過了實例釋放時間的閾值時,也會觸發函數的冷啟動,如下圖所示。
然而這里就涉及一個問題,當新的請求或者說是事件到來時,在廣義上可能出現以下兩種情況:
存在空閑且可以直接復用的實例:熱啟動。
不存在空閑且可以直接復用的實例:冷啟動。
在本地執行一個函數,通常情況下是環境都已經準備妥當,每次執行只需要執行函數對應的方法即可,但是 Serverless 架構下并不是,本地與 FaaS 的函數調用區別示意圖如圖所示。
三、典型應用場景
Serverless 架構自提出到現在經過若干年的發展,已經在很多領域中有著非常多的最佳實踐,CNCF 總結出一些 Serverless 架構所適合的場景。
實時文件處理
視頻應用、社交應用等場景下,用戶上傳的圖片、音視頻往往總量大、頻率高,對處理系統的實時性和并發能力都有較高的要求。例如,對于用戶上傳的圖片,可以使用多個函數對其分別處理,包括圖片的壓縮、格式轉換等,以滿足不同場景下的需求。
數據ETL處理
通常要對大數據進行處理,需要搭建 Hadoop 或者 Spark 等相關大數據的框架,同時要有一個處理數據的集群。通過 Serverless 技術,只需要將獲得到的數據不斷的存儲到對象存儲,并且通過對象存儲相關觸發器觸發數據拆分函數進行相關數據或者任務的拆分,然后再調用相關處理函數,處理完成之后,存儲到云數據庫中。
函數計算近乎無限擴容的能力可以使用戶輕松地進行大容量數據的計算。利用Serverless架構可以對源數據并發執行多個 mapper 和 reducer 函數,在短時間內完成工作,整個流程可以簡化為以下圖中所示;相比傳統工作方式,使用 Serverless 架構更能避免資源的閑置浪費,從而節省成本。
機器學習(AI推理預測)
在AI模型完成訓練后,對外提供推理服務時,可以使用 Serverless 架構,通過將數據模型包裝在調用函數中,在實際用戶請求到達時再運行代碼。相對于傳統的推理預測,這樣做的好處是無論是函數模塊還是后端的 GPU 服務器,以及對接的其他相關的機器學習服務,都是可以進行按量付費以及自動伸縮,從而保證性能的同時也確保了服務的穩定。
Web 應用/移動應用后端
Serverless 架構和云廠商所提供的其他云產品進行結合,開發者能夠構建可彈性擴展的移動或 Web 應用程序,輕松創建豐富的無服務器后端,而且這些程序可在多個數據中心高可用運行,無需在可擴展性、備份冗余方面執行任何管理工作。
音視頻轉碼
在視頻應用、社交應用等場景下,用戶會上傳一些視頻,通常上傳的視頻會進行一些轉碼,包括轉換為不同的清晰度。 Serverless 技術與對象存儲相關產品組合后,可利用對象存儲相關觸發器,即上傳者將視頻上傳到對象存儲中,觸發 Serverless 架構的計算平臺(FaaS 平臺)對其進行處理,處理之后將其重新存儲到對象存儲中,這個時候其他用戶就可以選擇編碼后的視頻進行播放,還可以選擇不同的清晰度,如圖所示。
綜上所述, Serverless 架構的典型應用場景更多是由 Serverless 架構的特點決定的。當然,隨著時間的不斷推移, Serverless 架構也在不斷演進,特點會更加突出,劣勢會被彌補。
四、Serverless 產品介紹
公有云產品
自 Serverless 概念被提出,其從不為人知到引人注目經歷了數年,Serverless 架構也在飛速發展,在 Serverless 架構中,計算機服務通常由 Faas 平臺提供。AWS Lanmbda、Google Cloud Functions、阿里云函數計算等都是有代表性的工業化產品。
CNCF 列出的 Faas 平臺
阿里云 Serverless
Serverless 架構對底層的技術基礎要求很高,而從圖中可以看出阿里云關于 Serverless 架構的整體形態是十分完善的,并且一直在自建自研的路上不斷精進。阿里云 Serverless 產品在阿里巴巴經濟體內部已經實現落地,在淘寶、支付寶、閑魚、飛豬、釘釘,包括在語雀都有很好的體現。
函數計算是國內生態最完整、功能最豐富的 Serverless 產品,開發者一步上云、一鍵 Serverless 化將成為現實。上圖是阿里云 Serverless 從產品維度的一些分析,下圖則表達了 Serverless 從功能或者架構,底層基礎設施,和在計算層面所展現出來的典型業務能力。例如說彈性伸縮、負載均衡、流量控制、高可用部署、版本灰度故障恢復等。像在運行時的容器鏡像服務,阿里云在去年便已推出,隨后AWS 、騰訊等,也都相繼推出容器鏡像。圖中詮釋了阿里云 Serverless 是如何通過底層,逐漸的向上層建設,讓開發者可以更簡單、更方便的使用 Serverless 的全過程。
開源產品
不僅僅在工業界有諸多廠商不斷為 Serverless 架構努力,在開源領域也有諸多優秀的 Serverless 項目。包括 OpenWhisk、Fission、Knative 以及 Kubeless 等在內的眾多優秀的開源 FaaS 平臺都已得到 CNCF 的認可。









































