引言
十年前,無服務器架構還像是痴人説夢。不再如此了! 有了 Amazon Lambda,我們現在可以建構和運行應用程序而不需要考慮服務器。雲供應商會無縫地處理所有服務器的供應、擴展和管理。我們只需要關注代碼。 這為雲部署帶來了前所未有的敏捷性、自動化和優化。但是,要發揮它的全部潛力需要對 Lambda 獨特的架構和能力有紮實的掌握。這篇文章旨在通過實際示例、經驗教訓和以工程師視角深入內部工作原理來揭開它的魔力!
| 亞馬遜雲科技開發者社區為開發者們提供全球的開發技術資源。這裏有技術文檔、開發案例、技術專欄、培訓視頻、活動與競賽等。幫助中國開發者對接世界最前沿技術,觀點,和項目,並將中國優秀開發者或技術推薦給全球雲社區。如果你還沒有關注/收藏,看到這裏請一定不要匆匆劃過,點這裏讓它成為你的技術寶庫! |
什麼是無服務器計算?
在深入探討 Lambda 之前,讓我們先釐清“無服務器“的真正含義。無服務器並不意味着完全沒有服務器。物理服務器仍然為雲基礎設施提供支持。 關鍵的區別在於開發人員不需要直接供應或管理這些服務器。雲供應商將基礎設施複雜性抽象出來。我們的代碼部署在短暫的容器中,這些容器是事件驅動的,會自動擴展,並且僅針對消耗的資源進行計費。 這種“無服務器,無運維“的模型將成本與使用量高度對齊,並加速了開發。傳統的服務器、虛擬機和容器在許多工作負載中仍然發揮着其作用。但是 Lambda 在處理事件驅動和瞬態計算需求方面表現卓越。
Lambda 執行模型
Lambda執行模型與傳統架構有根本不同。讓我們來剖析一下底層發生的事情
一些關鍵方面:
- 無狀態:每次執行都在單獨的容器中進行。執行之間沒有親和關係。
- 短暫:容器可以在毫秒內初始化和銷燬。
- 事件驅動:執行由配置的事件觸發。
- 可擴展: 根據隊列深度動態添加和刪除容器。
- 無服務器:我們不管理容器基礎設施。亞馬遜雲科技處理所有這些。 通過這種模型,Lambda 可以內在地處理許多並行請求並按需擴展。我們的代碼只關注業務邏輯。 接下來我們看看 Lambda 執行中的生命週期事件。
Lambda 函數生命週期
當發生事件調用時,Lambda 會經歷一個明確定義的生命週期:
- 冷啓動:對於首次調用,Lambda 必須初始化一個容器。這會導致一些延遲。
- 初始化和調用:代碼被加載並執行。調用處理程序方法。
- 關閉:一次執行完成後,容器停止。任何後續的執行都會重用熱容器。 理解這種冷啓動開銷對於優化 Lambda 性能至關重要。我們看看下面如何做。
優化 Lambda 冷啓動
沒有什麼比冷啓動慢更讓人痛苦的了。幸運的是,有一些經過驗證的技術可以緩解這一問題:
- 使用容器重用:設置非零超時,以便容器在調用之間保持存在。
- 優化部署程序包大小:刪除不需要的依賴項和工件以最小化下載時間。
- 選擇高性能運行時:Go、Python 和 NodeJS 初始化開銷很低。
- 預取容器:使用預配置併發性保持容器初始化。
- 優化IAM角色:使用 Amazon SSO 等服務減少角色承擔的延遲。
做好冷啓動是一門藝術和科學!有了上述技巧,我們可以輕鬆實現亞秒級的冷啓動。 現在讓我們轉而看一些Lambda實際應用的示例。
Lambda 使用案例
憑藉 Lambda 靈活的執行模型,可能性是無窮的。下面是一些喜歡的 Lambda 使用方式:
數據處理
- 流處理用於實時分析
- 批量數據轉換
- 生成聚合報告
集成和消息傳遞
- 通過 SQS 觸發用於分佈式工作負載
- 對 SNS 通知做出反應
- 服務之間的集成粘合劑
Web 應用程序
- 運行無服務器後端
- 提供 API 網關支持
- 預處理 HTTP 請求
基礎設施自動化
- 自定義自動化工作流程
- 程序化資源管理
- 自我修復能力
等等!
Lambda 僅由我們的創造力所限。
為了更具體,我們接下來演練一個真實的無服務器 Web 應用程序。
構建一個無服務器 Web 應用程序
我們來看看 Lambda 如何支持可擴展的無服務器 Web 架構:
- API網關: Lambda函數為API後端提供支持。
- 異步工作: SQS和SNS集成Lambda實現擴展工作負載。
- 靜態資產: S3託管前端靜態資產,如HTML/CSS/JS。 通過這種設置,我們可以獲得強大的可擴展性、出色的性價比和低管理開銷。Lambda服務處理基礎設施的重力勞動,如可用性、冗餘和擴展。我們只關注核心產品交付! 當然,無服務器應用程序也有其自己的細微差別。明天的文章將分享一些實際的優化、調試、CI/CD和其他運維方面的技巧。
總結思考
我們只觸及了 Lambda 和無服務器的改變遊戲規則的潛力。在底層, Lambda 通過無狀態、短暫和事件驅動的執行顛覆了基礎設施管理。 這為我們的雲架構帶來了前所未有的敏捷性、自動化和效率。請記住,大權帶來大責任! Lambda 仍需要經過深思熟慮的設計和運維才能平穩運行。 希望你喜歡這個 Amazon Lambda 快速概覽之旅。請告訴我哪些方面讓你產生共鳴,或者你想要了解的任何其他 Lambda 主題。再會,繼續構建那些無服務器解決方案!
參考資料
- Amazon Lambda 開發人員指南
* Amazon Lambda 最佳實踐 - 使用 Amazon Lambda 的無服務器架構
- Amazon 計算博客
文章來源:https://dev.amazoncloud.cn/column/article/64e5cea684d23218430...