Categories
程式開發

看完這篇你就知道什麼是無服務器架構了


Gartner最近的一份報告表明,到2020年,全球將有20%的企業部署無服務器架構

這說明無服務器架構不只是一個流行語,而是一種眾所周知的雲計算趨勢,並且已經在軟件世界掀起一場革命。大型廠商(如亞馬遜、微軟和谷歌)已經在無服務器架構領域重資投入,追趕革命的浪潮。

與其名字相反,無服務器架構實際上並沒有把服務器去掉。那麼,究竟什麼是無服務器架構?

什麼是無服務器架構?

無服務器架構是指應用程序使用第三方Function和服務,但不需要管理服務器。無服務器架構主要包含了兩個方面:

  • FaaS(Function as a Service,Function即服務):包含服務器端業務邏輯的無狀態Function。這些Function運行在獨立的容器裡,基於事件驅動,並由第三方廠商託管,如AWS Lambda或者Azure Functions。

  • BaaS(Backend as a Service,後端即服務):使用第三方服務(如Firebase、Auth0)來達成目的。使用BaaS的應用程序通常是富客戶端應用程序,如SPA或移動App。客戶端負責處理大部分的業務邏輯,其他部分則依賴外部服務,如認證、數據庫、用戶管理,等等。

無服務器架構包含了BaaS和FaaS,不過這篇文章著重關注FaaS。

無服務器架構的特點

  • 不需要管理服務器;
  • 無狀態;
  • 自動伸縮;
  • 沒有運營成本;
  • 成本由事件驅動;
  • 處理第一個事件需要一些啟動時間;
  • 因為運行時小,所以具有較高的安全性。

無服務器的生命週期

下圖描述了一個Function的生命週期。

看完這篇你就知道什麼是無服務器架構了 1

無服務器應用程序架構示例

假設有一個簡單的線上汽車拍賣應用程序,用戶可以登錄並出價,拍賣時間結束時價高者得。

傳統上,架構裡會包含一個部署了應用程序和前端的單體服務器。

看完這篇你就知道什麼是無服務器架構了 2

上述架構採用的是瘦客戶端方式,所有的業務邏輯(如認證、回話管理、車輛管理等)都部署在服務器端。

那麼,在一個無狀態的微服務架構中,這個應用程序又會是什麼樣子?

看完這篇你就知道什麼是無服務器架構了 3

原來的單體應用程序被拆分成了多個服務器端組件。

  • 認證Function:這是一個用於管理用戶認證(登錄)的Function(Function,FaaS)。
  • 車輛管理服務:一個處理與車輛相關操作的微服務,如列出車輛、查看車輛信息、比較車輛,等等。這個服務可以使用任意的語言或框架來開發,它與數據庫通信,並且獨立運行。
  • 車輛出價Function:這是另外一個Function,也與數據庫通信,錄入用戶出價記錄。
  • API網關:所有服務的入口點和反向代理。來自客戶端的請求會先到達網關,網關根據路由規則將請求重定向到特定的服務。

在將服務拆分成微服務或FaaS時,需要考慮到業務邏輯、負載、規模等方面的因素。

上述的例子描述了無服務器架構和基於無服務器架構設計微服務時的大致過程。

無服務器架構與PaaS

平台即服務(Platform as a Service)是另一個不需要開發人員管理服務器(包括硬件和軟件)的架構莫斯。正因為如此,開發人員容易把無服務器架構和PaaS混為一談。接下來,我們來看一看它們之間的相似點和不同點。

相似點

  • 開發人員不需要管理服務器。
  • 開發人員只要關注應用程序代碼本身。

不同點

  • PaaS提供了更為可控的部署方式,而無服務器的部署則更為嚴格。
  • 無服務器架構可以自動伸縮,而PaaS的伸縮需要進行配置。
  • 無服務器架構的成本是由事件驅動的,而PaaS是固定的。
  • PaaS應用程序在部署之後會一直運行,並馬上開始處理請求,而無服務器需要等待第一個事件,具體取決於事件的發生頻率。

用例

無服務器的應用應該不僅限於某個領域、業務或架構。在進行應用程序架構時,你需要考慮多個因素,這些因素同樣適用於無服務器架構。

  • 成本——無服務器架構非常節約成本,具體取決於實際的負載。
  • 服務器管理——無服務器架構可以極大地降低用於管理服務器的運營成本。
  • 伸縮——無服務器架構可以自動伸縮。
  • 響應時間——FaaS需要一些初始化時間。如果負載很小(比如一個小時只有一個事件),每個請求都會經歷冷啟動,導致整體響應變慢。
  • 更快的發布週期——因為這些Function都是很小的單位,發布週期就變得很短。

以下是一些常見的用例

  • Web應用程序;
  • 批處理和調度;
  • 移動和IOT後端;
  • 聊天機器人。

為什麼要採用無服務器架構?

使用無服務器架構和FaaS有以下這些好處。

  • 減少服務器管理成本;
  • 減少運營成本;
  • 自動伸縮;
  • 比不間斷運行的服務更安全;
  • 成本由請求或事件數來決定;
  • 更簡單的打包和部署流程;
  • 縮短髮布週期;
  • 開箱即用的監控。

無服務器架構的限制

與其他任何一種技術架構一樣,無服務器架構也存在同樣的限制。

  • 啟動延遲;
  • 廠商鎖定,對服務器缺乏控制;
  • 性能優化局限於代碼內部;
  • 執行時間限制(AWS Lambda的執行時間限制為15分鐘);
  • 成本不可預測;
  • 開發環境和生產環境不一樣;
  • 測試和調試更為複雜。

總結

無服務器架構是一種架構風格,通過FaaS將業務邏輯從長期運行的組件中移到臨時的Function裡。它可以解決很多架構和運營問題,簡化開發者和運維人員的工作。

與其他解決方案一樣,無服務器架構並不是銀彈。它無法直接取代現有的組件,在決定是否要採用無服務器架構之前需要先分析一下自己的業務和技術需求,通盤考慮各種優點和缺點。

英文原文

Serverless Architecture- Why and How It’s a Smart Choice?