做者 | 許曉斌 阿里雲高級技術專家數據庫
回顧架構的演進過程,咱們不難發現,研發運維人員正在逐漸地把關注點從機器上移走,再也不去管理機器。編程
其實咱們都知道,雖說是 Serverless,但 Server(服務器)是不可能真正消失的,Serverless 裏這個 less 更確切地說,應該是開發者不用關心服務器的意思。這就比如現代編程語言 Java 和 Python,開發不用手工分配和釋放內存,但內存依然在哪裏,只不過交給垃圾收集器管理了。稱一個能幫助你管理服務器的平臺爲 Serverless 平臺,就比如稱呼 Java 和 Python 爲 Memoryless 語言同樣。後端
可是,若是咱們把目光放到今天這個雲的時代,那麼就不能狹義地把 Serverless 僅僅理解爲不用關心服務器。雲上的資源除了服務器所包含的基礎計算、網絡、存儲資源以外,還包括各類類別的更上層的資源,例如數據庫、緩存、消息等。緩存
2019 年 2 月,UC 伯克利大學發表了一篇標題爲《Cloud Programming Simplified: A Berkeley View on Serverless Computing》的論文,論文中也有一個很是清晰形象的比喻,文中這樣描述:安全
在雲的上下文中,Serverful 的計算就像使用低級的彙編語言編程,而 Serverless 的計算就像使用 Python 這樣的高級語言進行編程。例如 c = a + b 這樣簡單的表達式,若是用匯編描述,就必須先選擇幾個寄存器,把值加載到寄存器,進行數學計算,再存儲結果。這就比如今天在雲環境下 Serverful 的計算,開發首先須要分配或找到可用的資源,而後加載代碼和數據,再執行計算,將計算的結果存儲起來,最後還須要管理資源的釋放。服務器
論文中所謂的 Serverful 計算,是咱們今天主流的使用雲的方式,但不該該是將來咱們使用雲的方式。我認爲 Serverless 的願景應該是 Write locally, compile to the cloud,即代碼只關心業務邏輯,由工具和雲去管理資源。網絡
在對 Serverless 有一個整體的抽象概念以後,也須要具體瞭解 Serverless 平臺的主要特色,同時這些特色也是 Serverless 核心優點的體現。架構
管理一兩臺服務器可能不是什麼麻煩的事情,管理數千甚至數萬臺服務器就沒那麼簡單了。任何一臺服務器均可能出現故障,如何自動識別故障,摘除有問題的實例,這是 Serverless 平臺必須具有的能力;此外,操做系統的安全補丁升級,須要作到不影響業務,自動完成;日誌和監控系統須要默認打通;系統的安全策略須要自動配置好以免風險;當資源不夠時,須要可以自動分配資源並安裝相關的代碼和配置,等等。併發
今天的互聯網應用都被設計成可伸縮架構,當業務有比較明顯的高峯和低谷時,或者業務有臨時的容量需求時(好比營銷活動),Serverless 平臺都可以及時且穩定地實現自動彈性。爲了實現這個能力,平臺須要有很是強大的資源調度能力,以及對應用各項指標(如 load、併發)很是敏銳的感知能力。框架
Serverful 的方式使用雲資源,是按佔用而非使用計費的,例如用戶在雲上購買了三臺 ECS,那麼無論用戶實際使用了這三臺 ECS 多少的 CPU 和內存,他都須要支付這三臺 ECS 總體的費用。而在 Serverless 模式下,用戶是按實際使用的資源付費的,例如一個請求實際使用了一臺 1core2g 規格資源 100ms 的時間,那麼用戶就只須要爲該規格的單價乘以時間(即100ms)付費。相似的,用戶若是用的是 Serverless 數據庫,那麼就只須要爲 query 實際消耗的資源,以及數據存儲的資源付費。
基於 Serverless 架構的代碼一般會重度使用後端的服務,將數據、狀態管理等內容從代碼中分離出去;此外,更完全的 FaaS 架構則把代碼的 Runtime 也交給了平臺管理。這就意味着,一樣的應用,Serverless 模式下的代碼相比 Serverful 模式會少不少,所以不管是從分發仍是啓動,都會更快。Serverless 平臺也一般可以提供很是成熟的代碼構建發佈、版本切換等特性,提高交付速度。
許曉斌,阿里雲高級技術專家。目前負責阿里集團 Serverless 研發運維平臺建設,在這以前負責 AliExpress 微服務架構、Spring Boot 框架、研發效率提高工做。《 Maven 實戰》做者,曾經是 Maven 中央倉庫的維護者。