
作者 | aoho
來源 |
Serverless 公衆号Serverless 是什麼?
Serverless 架構是不是就不要伺服器了?回答這個問題,我們需要了解下 Serverless 是什麼。
Serverless 架構近幾年頻繁出現在一些技術架構大會的演講标題中,很多人對于 Serverless,隻是從字面意義上了解——無伺服器架構,但是它真正的含義是開發者再也不用過多考慮伺服器的問題,當然,這并不代表完全去除伺服器,而是我們依靠第三方資源伺服器後端,從 2014 年開始,經過這麼多年的發展,各大雲服務商基本都提供了 Serverless 服務。比如使用 Amazon Web Services(AWS) Lambda 計算服務來執行代碼。
國内 Serverless 服務的發展相對 AWS 要晚一點,目前也都有對 Serverless 的支援。比較著名的雲服務商有阿裡雲、騰訊雲。它們提供的服務也大同小異:函數計算、對象存儲、API 網關等,非常容易上手。
架構是如何演進到 Serverless ?
看看過去幾十年間,雲計算領域的發展演進曆程。總的來說,雲計算的發展分為三個階段:虛拟化的出現、虛拟化在雲計算中的應用以及容器化的出現。雲計算的高速發展,則集中在近十幾年。
總結來說有如下的裡程碑事件:
- 通過虛拟化技術将大型實體機虛拟成單個的 VM 資源。
- 将虛拟化叢集搬到雲計算平台上,隻做簡單運維。
- 把每一個 VM 按照運作空間最小化的原則切分成更細的 Docker 容器。
- 基于 Docker 容器建構不用管理任何運作環境、僅需編寫核心代碼的 Serverless 架構。
從裸金屬機器的部署應用,到 Openstack 架構和虛拟機的劃分,再到容器化部署,這其中典型的就是近些年 Docker 和 Kubernetes 的流行,進一步發展為使用一個微服務或微功能來響應一個用戶端的請求 ,這種方式是雲計算發展的自然過程。
這個發展曆程也是一場 IT 架構的演進,期間經曆了一系列代際的技術變革,把資源切分得更細,讓運作效率更高,讓硬體軟體維護更簡單。IT 架構的演進主要有以下幾個特點:
- 硬體資源使用顆粒度變小
- 資源使用率越來越高
- 運維工作逐漸減少
- 業務更聚焦在代碼層面
1. Serverless 架構的組成
Serverless架構分為 Backend as a Service(BaaS) 和 Functions as a Service(FaaS) 兩種技術,Serverless 是由開發者實作的服務端邏輯運作在無狀态的計算容器中,它是由事件觸發、完全被第三方管理的。
2. 什麼是 BaaS?
Baas 的英文翻譯成中文的含義:後端即服務,它的應用架構由大量第三方雲伺服器和 API 組成,使應用中關于伺服器的邏輯和狀态都由服務提供方來管理。比如我們的典型的單頁應用 SPA 和移動 APP 富用戶端應用,前後端互動主要是以 RestAPI 調用為主。隻需要調用服務提供方的 API 即可完成相應的功能,比如常見的身份驗證、雲端資料/檔案存儲、消息推送、應用資料分析等。
3. 什麼是 FaaS?
FaaS 可以被叫做:函數即服務。開發者可以直接将服務業務邏輯代碼部署,運作在第三方提供的無狀态計算容器中,開發者隻需要編寫業務代碼即可,無需關注伺服器,并且代碼的執行是由事件觸發的。其中 AWS Lambda 是目前最佳的 FaaS 實作之一。
Serverless 的應用架構是将 BaaS 和 FaaS 組合在一起的應用,使用者隻需要關注應用的業務邏輯代碼,編寫函數為粒度将其運作在 FaaS 平台上,并且和 BaaS 第三方服務整合在一起,最後就搭建了一個完整的系統。整個系統過程中完全無需關注伺服器。
Serverless 架構的特點
總得來說,Serverless 架構主要有以下特點:
- 實作了細粒度的計算資源配置設定
- 不需要預先配置設定資源
- 具備真正意義上的高度擴容和彈性
- 按需使用,按需計費
由于 Serverless 應用與伺服器的解耦,購買的是雲服務商的資源,使得 Serverless 架構降低了運維的壓力,也無需進行伺服器硬體等預估和購買。
Serverless 架構使得開發人員更加專注于業務服務的實作,中間件和硬體伺服器資源都托管給了雲服務商。這同時降低了開發成本,按需擴充和計費,無需考慮基礎設施。
Serverless 架構給前端也帶來了便利,大前端深入到業務端的成本降低,開發者隻需要關注業務邏輯,前端工程師輕松轉為全棧工程師。
Serverless 有哪些應用場景?
應用場景與 Serverless 架構的特點密切相關,根據 Serverless 的這些通用特點,我們歸納出下面幾種典型使用場景:彈性伸縮、大資料分析、事件觸發等。
1. 彈性伸縮
由于雲函數事件驅動及單事件處理的特性,雲函數通過自動的伸縮來支援業務的高并發。針對業務的實際事件或請求數,雲函數自動彈性合适的處理執行個體來承載實際業務量。在沒有事件或請求時,無運作執行個體,不占用資源。如視訊直播服務,直播觀衆不固定,需要考慮适度的并發和彈性。直播不可能 24 小時線上,有較為明顯的業務通路高峰期和低谷期。直播是事件或者公衆點爆的場景,更新速度較快,版本疊代較快,需要快速完成對新熱點的技術更新。
2. 大資料分析
資料統計本身隻需要很少的計算量,離線計算生成圖表。在空閑的時候對資料進行處理,或者不需要考慮任何延時的情況下。
- 開發者編寫代碼,目前支援的語言 Java、NodeJS、Python 等語言;
- 把代碼上傳到函數計算上,上傳的方式有通過 API 或者 SDK 上傳,也可以通過控制台頁面上傳,還可以通過指令行工具 Fcli 上傳;
- 通過 API&SDK 來觸發函數計算執行,同樣也可以通過雲産品的事件源來觸發函數計算執行;
- 函數計算在執行過程中,會根據使用者請請求量動态擴容函數計算來保證請求峰值的執行,這個過程對使用者是透明無感覺的;
- 函數執行結束。
3. 事件觸發
事件觸發即雲函數由事件驅動,事件的定義可以是指定的 http 請求,或者資料庫的 binlog 日志、消息推送等。通過 Serverless 架構,在控制台上配置事件源通知,編寫業務代碼。業務邏輯添加到到函數計算裡,業務高峰期函數計算會動态伸縮,這個過程不需要管理軟硬體環境。常見的場景如視訊、OSS 圖檔,當上傳之後,通過進行後續的過濾、轉換和分析,觸發一系列的後續處理,如内容不合法、容量告警等。
小結
回到我們文章的開頭,Serverless 架構不是不要伺服器了,而是依托第三方雲服務平台,服務端邏輯運作在無狀态的計算容器中,其業務層面的狀态則被開發者使用的資料庫和存儲資源所記錄。
Serverless 無伺服器架構有其适合應用的場景,但是也存在局限性。總得來說,Serverless 架構還不夠成熟,很多地方尚不完善。Serverless 依賴雲服務商提供的基礎設施,目前來說雲服務商還做不到真正的平台高可用。Serverless 資源雖然便宜,但是建構一個生産環境的應用系統卻比較複雜。
雲計算還在不斷發展,基礎設施服務日趨完善,開發者将會更加專注于業務邏輯的實作。雲計算将平台、中間件、運維部署的責任進行了轉移,同時也降低了中小企業上雲的成本。讓我們一起期待 Serverless 架構的未來。
參考: