營銷謊言:微信小程式目前並不是Serverless!

banq發表於2019-07-01

在InfoQ中文網站看到Serverless 最佳實踐:如何在兩週內開發出使用者量過億的微信小程式,這篇營銷文章很顯然認為Serverless=BaaS+FaaS,BaaS是後端即服務,根據Martin Fowler網站無伺服器架構定義:

  1. BaaS:無伺服器首先用於描述顯著或完全包含第三方雲託管應用程式和服務的應用程式,以管理伺服器端邏輯和狀態。這些通常是“富客戶端”應用程式 - 認為單頁網路應用程式或移動應用程式 - 使用龐大的雲可訪問資料庫生態系統(例如,Parse,Firebase),身份驗證服務(例如,Auth0,AWS Cognito),以及等等。這些型別的服務以前被描述為“ 後端即服務 ”,我在本文的其餘部分使用 “BaaS”作為速記。
  2. FaaS:無伺服器也可以指伺服器端邏輯仍然由應用程式開發人員編寫的應用程式,但是,與傳統體系結構不同,它在無狀態計算容器中執行,這些容器是事件觸發的短暫的(可能只持續一次呼叫),並且完全由第三方。想到這一點的一種方法是“作為服務的功能”或 “FaaS”。(注意:此名稱的原始來源 - @ marak的推文 - 不再公開。) AWS Lambda是目前功能即服務平臺最受歡迎的實現之一,但還有很多其他也是。

關鍵問題是在FaaS,FaaS不同於普通API,更不同於服務或微服務,在服務、微服務與無伺服器之函式的區別?一文中就提到,服務是一直駐留執行的,因為一直在執行,所以你要給雲廠商付費,不管在執行時空閒情況如何,或者說只有一兩次呼叫;而FaaS的函式是隻在請求呼叫執行時付費。因此為了做到這點,這個函式是即用即載入的,有所謂熱啟動的問題,用完就退出記憶體,不再消耗雲端計算平臺資源,這樣才能實現即用即付錢;雲平臺廠商為了實現即用即載入,一般使用容器Docker之類載入你的函式程式碼,由你的客戶端通過事件觸發這些函式的呼叫。

所以,無伺服器架構不只是Paas雲平臺,不只是BaaS,也不只是FaaS,特別是FaaS,不是普通的API的Http呼叫,如果真是這樣,其實沒有必要無伺服器,現在雲平臺PaaS+BaaS就能實現沒有後端伺服器管理的美好願望。

根據MF網站的無伺服器架構定義,FaaS是:

  1. 從根本上說,FaaS是關於執行後端程式碼而無需管理自己的伺服器系統或您自己的長期駐留long-lived的伺服器應用程式。與容器和PaaS(平臺即服務)等其他現代架構趨勢進行比較時,第二個子句 - 長期駐留(long-lived)的伺服器應用程式是一個關鍵的區別。(FaaS不是長期駐留的普通API
  2. FaaS產品不需要對特定框架或庫進行編碼。FaaS函式是語言和環境的常規應用程式。例如,AWS Lambda函式可以在Javascript,Python,Go,任何JVM語言(Java,Clojure,Scala等)或任何.NET語言中實現“第一類”。但是,您的Lambda函式還可以執行與其部署工件捆綁在一起的另一個程式,因此您實際上可以使用任何可以編譯為Unix程式的語言(請參閱本文後面的Apex)。
  3. 部署與傳統系統有很大不同,因為我們沒有自己執行的伺服器應用程式。在FaaS環境中,我們將功能的程式碼上傳到FaaS提供商,提供商執行配置資源,例項化VM,管理流程等所需的一切。
  4. 水平擴充套件是完全自動的,彈性的,並由提供者管理。如果您的系統需要並行處理100個請求,則提供商將處理該請求而無需您進行任何額外配置。執行功能的“計算容器”是短暫的,FaaS提供者建立和銷燬它們完全由執行時需求驅動。最重要的是,使用FaaS ,供應商可以處理所有底層資源配置和分配 - 使用者根本不需要叢集或VM管理。
  5. FaaS中的函式通常由提供程式定義的事件型別觸發。使用Amazon AWS,此類刺激包括S3(檔案/物件)更新,時間(計劃任務)以及新增到訊息匯流排(例如,Kinesis)的訊息。
  6. 大多數提供程式還允許觸發函式作為對入站HTTP請求的響應; 在AWS中,通常通過使用API​​閘道器來實現這一點。我們在Pet Store示例中使用API​​閘道器進行“搜尋”和“購買”功能。函式也可以通過平臺提供的API直接呼叫,無論是在外部還是在同一個雲環境中,但這是一種相對不常見的用法。

 

相關文章