傳統上,我們已經構建并部署了 web 應用程式,對這些應用程式,我們可以對服務器發出的 HTTP 請求進行一定程度的控制,我們的應用程式運行在該服務器上,我們負責為其配置和管理資源,但這會產生一些問題:
1、即使沒有處理任何請求,我們也要保持服務器正常運行,
2、我們負責服務器及其所有資源的正常運行及維護,
3、我們還負責對服務器進行適當的安全更新,
4、隨著使用量的擴張,我們還需要管理服務器的擴展,結果是,當我們沒有太多使用量時,我們要將其減少,
對于較小的公司和個人開發者而言,這可能需要處理很多作業,這使得我們無法專注于我們更重要的作業,構建和維護實際的應用程式,在大型組織中,這是由基礎設施團隊處理的,并且通常這不是開發者個人的責任,但是,為此所需的程序最終可能減慢開發時間,因為你不能不與基礎架構團隊合作來幫助你啟動和運行而直接繼續構建應用程式,作為開發者,我們一直在尋找一種解決這些問題的方法,這就是無服務器的來源,
無服務器計算
無服務器計算(或簡稱 serverless),是一種執行模型,在該模型中,云服務商(AWS,Azure 或 Google Cloud)負責通過動態分配資源來執行一段代碼,并且僅收取運行代碼所使用資源的費用,該代碼通常運行在無狀態的容器中,能夠被包括 HTTP 請求、資料庫事件、佇列服務、監控報警、檔案上傳、調度事件(cron 任務)等各種事件觸發,被發送到云服務商執行的代碼通常是以函式的形式,因此,無服務器計算有時是指 “函式即服務” 或者 FAAS,以下是主要云服務商提供的 FAAS 產品:
- AWS: AWS Lambda
- Microsoft Azure: Azure Functions
- Google Cloud: Cloud Functions
盡管無服務器計算對開發人員抽象了底層基礎設施,但服務器仍然參與執行我們的函式,由于你的代碼將要作為獨立的函式執行,我們需要知道以下幾點:
微服務
當向無服務器計算的世界過度時,我們面臨的最大變化是我們的程式需要被組織成函式的形式,你可能習慣于將你的應用程式部署為單個 Rails 或 Express 整體應用程式,但是在無服務器計算的世界里,你通常需要采用更多基于微服務的架構,你可以通過在單個函式中作為一個整體運行你的整個應用程式并自行處理路由來解決此問題,但不建議這樣做,因為減小你的函式的大小更好,我們將在下面討論,
無狀態函式
你的函式通常運行在安全的(幾乎是)無狀態容器中,這意味著你將無法在一個事件已經完成后長時間執行的應用服務器中運行代碼,或者無法使用先前的執行背景關系為請求提供服務,你不得不有效地假定你的函式每次都在一個新容器中被呼叫, 對此有一些微妙之處,我們將會在 什么是 AWS Lambda 一章中進行討論,
冷啟動
由于你的函式在需要回應事件的容器中運行,因此存在一定的延時,這被稱為”冷啟動”,當你的函式執行完成后,你的容器可能會保留一段時間,如果另一個事件在此時被觸發,則它的回應速度要快得多,這通常被稱為”熱啟動”,
冷啟動的持續時間取決于特定云服務商的實作,在 AWS Lambda 上,它的范圍從幾百毫秒到幾秒不等,它可能取決于使用的運行時(或編程語言)、函式(以包的形式)的大小,當然,還取決于所討論的云服務商,多年以來,隨著云服務商在優化時延方面變得越來越出色,冷啟動已經大為改善,
除了優化你的函式,你還可以使用一些簡單的技巧,例如使用單獨的調度函式每隔幾分鐘來呼叫你的函式以使其保持運行狀態,我們在此教程中使用的 Serverless Framework 中,有一些插件能夠幫助保持你的函式處于運行狀態,
既然我們對無服務器計算有了一些了解,讓我們更深入地了解什么是 Lambda 函式以及你的代碼是如何被執行的,
Serverless = Faas + Baas,它代表的是無(少)服務器架構開發,從而使得開發者的精力主要放在了系統架構和軟體開發上,
全文一覽:
- 什么是 Faas、Baas?
- Serverless 執行程序是怎樣的?
- Serverless 技術特點是什么?
- Serverless 優缺點與應用場景?
什么是 Faas、Baas?
Faas 是 Function-as-a-service 的縮寫,這里指的是“云函式運行平臺”,開發者可以拆分業務邏輯,并將其上傳到云函式平臺,配置函式觸發條件、路由等,
Baas 是 Backend-as-a-service 的縮寫,這里指的是“后端服務組件”,例如檔案存盤、資料庫、實時通信等等,
Fass 和 Bass 共同組成了 Serverless,
Serverless 執行程序是怎樣的?
根據我自己的使用情況,Serverless 的執行程序主要途徑三個主體:Client => Function => Backend,
舉個例子,如果想在云服務中,用超級管理員的身份對云資料庫進行讀寫,根據檔案,超級管理員只能在 Function 中通過 SDK 使用,因此,整個處理邏輯是:
- 微信開發者工具呼叫撰寫好的云函式
- 云函式進行鑒權
- 鑒權成功后,啟動容器,加載 sdk,執行邏輯
- sdk 通過 HTTP API 的方式呼叫云資料庫服務
- 云資料庫的運行結果原路回傳給微信開發者工具
除此之外,有時候可能的呼叫流程是:Client => Function,這種情況可能是為了不影響用戶體驗,而將復雜計算放入了云函式中,
有時候可能的呼叫流程是:Client => Backend,比如在微信開發工具內,內置了云開發 SDK,可以直接呼叫云開發后端組件,大大降低了開發難度,
Serverless 技術特點是什么?
事件驅動
這里的“事件”含義比較豐富,包括 http 請求等各種方式的呼叫,只有當事件發生時,云函式才會執行,后端服務組件才會開始計算,完成后,結果回傳給用戶,相關容器會被銷毀,
彈性擴縮
云計算廠商會根據實際使用的資源量(呼叫次數、云函式運行記憶體、云存盤空間等等)來進行計費,
并且在業務量激增的情況下,云計算廠商會自動調度資源進行分配,開發者無需關心高并發的情況(只要充錢,就能變強),
無狀態與有狀態
云函式是無狀態的,在事件發生時計算,計算后相關資源會被釋放,
而狀態是存放在后端服務組件中,例如云資料庫,
這點和傳統的服務器開發有區別,
Serverless 優缺點與應用場景?
優點
- 免運維,自動彈性擴容
- 快速開發,不需要自建后端服務
- 開發者關注點集中在業務上
缺點
- 除錯成本高:目前的解決方法主要是通過查看呼叫/報錯日志,體驗上,和本地開發工具除錯有差距,
- 啟動時間長:目前的解決方法是對于經常性任務采取“熱啟動”,對用到的第三方庫提前快取,減少網路呼叫鏈路上的節點,
應用場景
- 互動體驗:將計算放入云函式,避免影響用戶體驗
- AI 計算:直接呼叫云計算廠商提供的 AI 服務
- IoT:設備不具備計算能力(大小、電池)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/256773.html
標籤:其他
上一篇:群集的基本概念(了解即可)
