Serverless 比你預期要貴得多

作者 | COLIN CHARTIER

譯者 | 張健欣

策劃 | 萬佳

1 架構介紹:Serverless 和容器 +CDN

 Serverless

當然,serverless 最終還是會使用 Web 服務器。關鍵是你不必自己去創建這些服務器。你所要做的只是指定構建它們的方法,然後你的雲提供商會隨着併發請求數量的增加或減少來創建 Web 服務器的副本。即使對於用戶很少的小項目,你也可以通過在夜間沒有人訪問你的網站時關閉 Web 服務器來節省資金。

 容器 + CDN

你可以將託管網站的計算成本最高的部分包給其他人,而非指定一個方法來創建 Web 服務器。這就是 CDN 的思路。當一個 Web 服務器的運行速度變慢,通常是由數百個請求要獲取相同的不怎麼變的資源。CDN 會爲你負責這些常見的請求,例如靜態圖片。

容器(左)和 CDN(中間)處理來自用戶的數百個請求

在這種架構中,你的網站用戶會從 CDN 請求資源,CDN 將響應大部分(大約 90%)請求。只有那些不能明顯緩存的請求會被轉發到你的容器。

Serverless“Web 服務器” 通常是如何創建真正的 Web 服務器的方法,然後你的雲服務商會在一個訪問者首次請求某些東西時啓動一個 Web 服務器。

容器通常啓動速度慢得多,因此你需要保持至少一臺 Web 服務器 24/7 運行,以防有人訪問你的網站。

當 AWS Lambda 在 2014 年推出時,它聽起來不可思議:1GB 內存,每毫秒 0.0000000167 美元的計算量。一個典型的 API 請求可能是 20ms,因此你需要爲每個請求支付 0.000000334 美元。

由於大多數工作負載都非常 “火爆”,因此即使是用 Lambda 託管一個非常流行的服務,你也只需要支付不到 100 美元每年。

相比之下,對大多數產品來說,一個類似的容器 +CDN 架構可能耗費每年 500 美元。

當然,這是一個非常簡單的比較(彈性負載均衡、CDN 入口 / 出口、serverless 也可以使用 CDN 等...),但對於今天的大多數在線產品來說是正確的。在其它同等的情況下,serverless Web 服務器的成本是類似的容器的 10%-20%。

基礎設施成本是一個很好的指標——很容易預測,是比較一個 “好架構” 與一個 “壞架構” 的便捷方法。

然而,基礎設施成本與開發人員的工資相比卻相形見絀。每年 500 美元的容器會由一名每年 75000 美元的開發者維護。

實際上,人力成本是很多公司低估的。如果你有一個本地無法復現的 bug,開發人員使用一個閉源的 AWS 賬戶會很難復現和調試它。

三個因素結合在一起讓用 serverless 進行開發變得異常困難:

你不能本地模擬 serverless 實例,只能在雲上模擬。

很少有公司能創建它們的生產環境的基礎設施的副本。開發人員通常會花幾個小時來申請合適的環境,並確保沒有其他人同時使用這個環境。

開發人員很少能訪問生產環境資源,因此它們不得不花費數個小時協調一個編程會話才能在生產環境調試。

世界各地的 slack 工程頻道的一個常見場景

如果單個開發人員每週修復一個 bug,並且由於上述因素,修復每個 bug 所需的時間延長一個小時,那麼你的公司每年會爲單個開發人員的生產力損失支付 1872 美元。這個數字已經是最初成本差異的 4 倍。

相反,一個容器架構可能完全運行在一個開發人員的電腦上,因此每個開發人員都可以在他們自己的筆記本上重現 bug,而不必使用一個演示(staging)環境。

出於與前一點相似的原因,使用一個持續集成 / 持續部署系統自動測試一個 serverless 架構要困難得多。

容器化架構更容易進行測試,因爲你可以在單個 VM 中運行它。想要運行持續集成,serverless 架構需要請求你的雲服務商爲每次更改進行部署。

系統的最終測試是端到端(end-to-end,E2E)測試:通過創建一個假用戶,然後像一個真用戶一樣與整個應用程序進行交互,來驗證通用工作流程。如果可以根據需要創建架構副本,這些測試就能針對提出的更改自動運行。

在許多公司中,demo 演示中的一個 bug 可能意味着損失 6-7 位數的銷售額。這些 bug 通常是影響不同組件交互的看似無害的更改結果。如果開發人員不在每次更改後測試這些流程是否繼續生效,那麼就很容易損壞一個 “立即支付(pay now)” 按鈕或者登入。

如果整個堆棧能運行在單個機器上,那麼它就可以不怎麼麻煩地運行在一個持續集成服務商上。相比之下,一個 serverless 棧可能需要爲每個更改在你的雲服務商中從頭創建整個環境,這會花費 10 倍更長的時間。

5 解決方案

顯然,對於服務器的解決方案是讓供應商採用一個通用標準(AWS kubeless 或 AWS OpenFAAS)。只要 serverless 與閉源雲產品同名,那麼就會因爲開發人員的生產力的損失而大大增加成本。

實際上,最好的解決方案是完全避免使用 AWS Lambda 或 Cloudflare Workers 這樣的平臺作爲核心基礎設施,直到能自行託管它們進行問題復現和測試。

對於幾乎每一個架構決策,託管成本都比開發者行動緩慢的成本要重要得多。在考慮到需要使用基礎設施工作的開發人員的時間成本之前,不要因爲價格來進行架構決策。

原文鏈接:

https://layerci.com/blog/the-hidden-costs-of-serverless/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/HnY6uARDzI9PrriUmLJaUQ