Serverless 基本概念入門

Serverless發表於2020-02-13

從行業趨勢看,Serverless 是雲端計算必經的一場革命

2019 年,Serverless 被 Gartner 稱為最有潛力的雲端計算技術發展方向,並被賦予是必然性的發展趨勢。Serverless 從底層開始變革計算資源的形態,為軟體架構設計與應用服務部署帶來了新的設計思路。

為此,我們策劃了 Serverless 技術專欄,從基礎概念入門,到前後臺架構設計、應用擴充、最佳實踐等多維度,揭開 Serverless 的面紗,帶你走進無伺服器的世界。

什麼是 Serverless?

Serverless ,按中文翻譯,稱為「無伺服器」。

這究竟是一種什麼樣的形態或產品呢?無伺服器,就是真的沒有伺服器嗎?

其實,在行業內,目前對於 Serverless 有幾種解讀方法:

  • 在某些場景可以解讀為一種軟體系統架構方法,通常稱為 Serverless 架構
  • 而在另一些情況下,又可以代表一種產品形態,稱為 Serverless 產品

在說起 Serverless 架構時,Serverless 代表的是利用 Serverless 形態的產品實現的應用架構,這種架構完全依託於雲廠商或雲平臺提供產品完成系統的組織及構建。在這種架構中,使用者無需關注支撐應用服務執行的主機,而將關注點投入在系統架構,業務開發,業務支撐運維上。

而說起 Serverless 產品時,代表的是無需理解、管理伺服器,按需使用,按使用付費的產品。Serverless 產品中,其實也可以包含儲存、計算等多種型別的產品。而典型的計算產品,就是雲函式這種形態。

雲函式,或者稱為函式即服務 (Function as a Service),它和後端即服務 (Backend as a Service) 一起,都可以稱為 Serverless 產品。通過組合使用這些產品,開發者可以構建自身的業務 Serverless 架構。

Serverless 的價值

Serverless 技術為什麼會獲得越來越多的關注?我們可以從幾個角度來看。

首先,從開發者使用的來說,不用更多地去考慮伺服器的相關內容,無需再去考慮伺服器的規格大小、儲存型別、網路頻寬、自動擴縮容問題。同時,也無需再對伺服器進行運維,無需不斷打系統補丁、應用補丁,無需進行資料備份、軟體配置等工作。

其次,Serverless 產品是完全自動化的彈性擴縮容的。在業務高峰時,產品的計算能力、容量自動擴容,承載更多的使用者請求,而在業務下降時,所使用的資源也會同時收縮,避免資源浪費。

再次,跟隨著完全自動化的彈性所帶來的,是全新的計量計費模式。開發者僅需根據使用量來付費,而在深夜無業務量的情況下,不會有空閒資源佔用,因此也不會有費用產生。

隨著如上提到的特性,Serverless 給開發者或使用者帶來了具體的商業價值:

1. 降低運維需求

  • Serverless 使得應用與伺服器解耦,業務上線前無需預估資源,無需進行伺服器購買、配置
  • Serverless 也使得底層運維工作量進一步降低,業務上線後,也無需擔憂伺服器運維,而是全部交給了雲平臺或雲廠商

2. 降低運營成本

  • Serverless 的應用是按需執行的。應用只在有請求需要處理或者事件觸發時才會被載入執行,在空閒狀態下 Serverless 架構的應用本身並不佔用計算資源
  • 在使用 Serverless 產品時,使用者只需要為處理請求的計算資源付費,而無須為應用空閒時段的資源佔用付費

3. 縮短迭代週期、上線時間

  • Serverless 架構帶來的是進一步的業務解耦,應用功能被解構成若干個細顆粒度的無狀態函式,開發可以聚焦在單功能的快速開發和上線
  • 同時拆解後的雲函式,也都可以進行獨立的迭代升級,更快速的實現業務迭代,縮減功能的上市時間

4. 快速試錯

  • 利用 Serverless 架構的簡單運維、低成本及快速上線能力,可以來快速嘗試業務的新形態、新功能
  • 利用 Serverless 產品的強彈性擴容能力,在業務獲得成功時,也無需為資源擴容而擔心

Serverless 的技術特點

這裡提到的技術特點的物件,特指 Serverless 產品中的計算產品,也就是雲函式。雲函式包含了如下的技術特性:

1. 事件驅動

  • 雲函式的執行,是由事件驅動起來的,在有事件到來時,雲函式會啟動執行
  • Serverless 應用不會類似於原有的「監聽 - 處理」型別的應用一直線上,而是按需啟動
  • 事件的定義可以很豐富,一次 http 請求,一個檔案上傳,一次資料庫條目修改,一條訊息傳送,都可以定義為事件

事件驅動

2. 單事件處理

  • 雲函式由事件觸發,而觸發啟動的一個雲函式例項,一次僅處理一個事件
  • 無需在程式碼內考慮高併發高可靠性,程式碼可以專注於業務,開發更簡單
  • 通過雲函式例項的高併發能力,實現業務高併發

單事件處理

3. 自動彈性伸縮

  • 由於雲函式事件驅動及單事件處理的特性,雲函式通過自動的伸縮來支援業務的高併發
  • 針對業務的實際事件或請求數,雲函式自動彈性合適的處理例項來承載實際業務量
  • 在沒有事件或請求時,無例項執行,不佔用資源

自動彈性伸縮

4. 無狀態開發

  • 雲函式執行時根據業務彈性,可能伸縮到 0,無法在執行環境中儲存狀態資料
  • 分散式應用開發中,均需要保持應用的無狀態,以便於水平伸縮
  • 可以利用外部服務、產品,例如資料庫或快取,實現狀態資料的儲存

無狀態開發

Serverless 的應用場景

Serverless 架構或者技術,可以用在什麼樣的場景下,來充分發揮它的優勢呢?如下的場景,都適合使用 Serverless 架構或產品,來實現所需的業務邏輯。

1. WEB 及移動後端

通過結合使用雲函式和 API 閘道器或 HTTP 觸發器,可以對外提供 URL 訪問地址,成為 Web、小程式、或移動應用等的後端服務。Serverless 架構既可以直接用於構建後臺來服務應用,也可以通過類似 BFF 模式,構建中臺和應用間的橋樑。

Serverless 架構提供的強彈效能力,使得可以支撐業務或應用的暴漲;而提供的低運維需求,使得開發者可以專注於業務實現和優化;同時,按實際使用量的付費方式,使得開發者無需預配置資源,無需擔心預配置資源的浪費。

2. 訊息處理

Serverles 架構的應用本身是由事件觸發的,因此極其適合於進行訊息處理。無論是訊息佇列中傳遞的業務訊息,還是 Kafka 中採集應用日誌,均可以對接到雲函式上,進行實時的訊息處理、分析。

3. 物件儲存檔案處理

在 Serverless 應用場景中,由物件儲存中的檔案上傳事件,來觸發雲函式的執行,也是一種常見場景。

針對圖片檔案的上傳,可以藉助雲函式完成圖片的縮圖生成、二維碼或水印標記、圖片優化處理;而針對資料檔案的上傳,可以啟動資料的自動化分析

4. 物聯網

物聯網意味著成千上萬的裝置會連入網路,時刻在不斷的產生資料,這對資料的分析、處理的及時性提出了很高的挑戰。通過使用 Serverless 架構,物聯網裝置所採集的資料將可以作為雲函式的觸發事件,而實現資料的實時處理、分析和應用。

隨著物聯網裝置計算能力的進一步提升,雲函式作為最小粒度的計算單元,有機會被排程到裝置端執行,實現邊緣計算,達到「端 - 雲」聯合的 Serverless 架構。

5. 運維及整合

通過對接雲函式以及雲上的各個產品、日誌服務、監控告警系統,雲時代的運維也都可以用雲函式來構建。定時觸發的雲函式,將可以方便地替代需要在主機上來執行的定時任務;而日誌或告警觸發的雲函式,將可以對雲中的事件作出立刻迴應及處理。

Serverless — 雲原生時代的應用

雲端計算已經進入了新的時期,目前上雲已經不是應不應該,而是如何上雲的問題。在這種情況下,雲原生的概念也隨之而生。雲原生的架構或應用,是基於雲而設計的,充分利用現代雲端計算平臺所具備的彈性和分散式特性來實現應用架構。

而 Serverless 架構、產品、以及應用,均是完全依託於雲而構建的,是典型且完全的雲原生的架構、產品或應用。Serverless 產品所具備的產品特性、技術、費用等優勢,將成為新一代雲產品的發展方向;而基於 Serverless 架構推進完成開發的應用或架構,將充分享受到雲時代帶來的強大助力,使得雲端計算能真正成為業務的助推器。

Serverless 的計算產品 —— 雲函式,作為雲虛擬機器、容器技術之後的下一代計算形態,將引來雲端計算中新的熱潮。圍繞著雲函式而建設的產品能力、工具、生態、以及應用開發,也將引來新的一輪發展。隨著無伺服器的產品和生態走向成熟,將逐步承載起企業核心業務。在這個持續向前高速發展的過程中,騰訊雲的雲函式,將作為騰訊云云原生的重點發力領域,跟隨客戶需求、行業發展、技術發展,為使用者提供完整的 Serverless 解決方案。

傳送門:

- GitHub: github.com/serverless

- 官網:serverless.com

歡迎訪問:Serverless 中文網,您可以在 最佳實踐 裡體驗更多關於 Serverless 應用的開發!

推薦閱讀:《Serverless 架構:從原理、設計到專案實戰》

相關文章