近年來,雲原生應用程序已成為許多企業構建可擴展應用程序的首選標準。在雲技術的眾多進步中,無伺服器架構被視為一種具有轉型意義的方法。易用性和效率是現代應用程序開發中最可取的兩個特性,而無伺服器架構提供了這兩個特性。這使得無伺服器成為雲服務提供商和用戶的遊戲改變者。
對於希望採用這種方法構建應用程序的公司,主要的雲服務提供商提供了幾種無伺服器解決方案。在本文中,我們將探討這種架構的特點、優勢和挑戰,以及使用案例。在本文中,我以AWS為例來探索這些概念,但相同的概念適用於所有主要的雲服務提供商。
無伺服器
無伺服器並不意味著沒有伺服器。它只是意味著這些服務的基礕設施由雲服務提供商管理。這使得架構師和開發人員可以設計和構建應用程序,而不必擔心管理基礎設施。這類似於使用共乘應用程序Uber:當你需要搭車時,你不必擔心擁有或維護一輛車。Uber處理所有這些,你只需專注於通過支付車費抵達目的地。
無伺服器架構提供了許多優勢,使其適合並吸引許多使用案例。以下是一些主要優勢:
自動擴展
無伺服器架構的最大優勢之一是其天生支持擴展。雲服務提供商處理繁重的工作,提供幾乎無限的、開箱即用的擴展性。例如,如果使用無伺服器技術構建的應用程序突然變得受歡迎,工具或服務會自動擴展以滿足應用程序的需求。我們不必在半夜起來添加伺服器或其他資源。
專注於創新
由於不再需要管理伺服器,您可以專注於構建應用程序,增加功能以促進應用程序的增長。對於任何組織,無論大小,這種方法有助於專注於真正重要的事情——業務增長。
成本效率
使用傳統伺服器模型,您往往會因為事先購買並在不使用時進行管理而支付未使用的資源。無伺服器通過切換到按使用量付費的模式來改變這一點。在大多數情況下,您只支付您實際使用的資源。如果您構建的應用程序沒有立即獲得關注,您的成本將是最低的,就像支付單個會話而不是整整一年。隨著應用程序的流量增長,成本也會相應增長。
上市時間更快
使用無伺服器框架,您可以比傳統伺服器模型更快地構建和部署應用程序。當應用程序準備就緒時,可以使用無伺服器資源輕鬆部署。您可以專注於開發和添加新功能,以更快的速度交付,而不是花費時間在伺服器管理上。
減少操作維護
由於雲端提供商管理基礎設施,消費者無需擔心配置、維護、擴展或處理安全補丁和漏洞。
無伺服器框架提供靈活性,可以應用於各種使用案例。無論是構建網頁應用程式還是處理即時數據,它們都提供了這些使用案例所需的可擴展性和效率。
使用 AWS 無伺服器構建網路服務 API
現在我們已經討論了無伺服器架構的好處,讓我們深入一些實際範例。在這一部分,我們將使用AWS 無伺服器資源創建一個簡單的後端網頁應用程式。
上述後端應用程式設計包含三個層次,以為網頁應用程式提供 API。一旦部署在 AWS 上,網關端點便可供 API 消費使用。當使用者呼叫 API 時,請求將通過 API 網關路由到適當的 Lambda 函數。對於每個 API 請求,Lambda 函數會被觸發,並訪問 DynamoDB 以儲存和檢索數據。這種設計是一個簡化且具成本效益的解決方案,能夠隨著需求增長自動擴展,使其成為以最低開銷構建 API 的理想選擇。這個設計中的組件彼此之間整合良好,提供了靈活性。
這個架構中有兩個主要組件——計算和存儲。
無伺服器運算
無伺服器運算改變了雲原生應用程式和服務的建構與部署方式。它承諾提供真正的按需付費模型,具備毫秒級的粒度,並不浪費任何資源。由於其簡單性和經濟優勢,這種方法獲得了廣泛的支持,許多雲端服務提供商也支援這些功能。
使用無伺服器運算的最簡單方法是提供可按需執行的代碼。這種方法促使了功能即服務(FaaS)平台的興起,專注於允許以函數形式表示的小段代碼在有限的時間內運行。這些函數是由事件觸發的,例如HTTP請求、存儲變更、消息或通知。由於這些函數在代碼執行完成後被調用和停止,因此它們不保持任何持久狀態。要維護狀態或持久化數據,它們使用像DynamoDB這樣提供耐久存儲能力的服務。
AWS Lambda能夠根據需求進行擴展。例如,AWS Lambda在2024年Prime Day處理了超過1.3兆次調用。這種能力在處理突發的流量激增時至關重要。
無伺服器存儲
在無服務器計算生態系統中,無服務器存儲指的是基於雲的存儲解決方案,可以自動擴展,而無需消費者管理基礎設施。這些服務提供許多功能,包括按需擴展性、高可用性和按使用量付費。例如,DynamoDB是一個完全受管的、無服務器的NoSQL數據庫,旨在處理鍵-值和文檔數據模型。它是為需要在任何規模下保持一致性性能的應用程序而設計的,提供單位數毫秒的延遲。它還提供與許多其他服務無縫集成的能力。
主要的雲服務提供商為特定需求提供了眾多無服務器存儲選項,例如S3、ElastiCache、Aurora等。
其他使用案例
在前一部分中,我們討論了如何利用無服務器架構為 Web 應用程序構建後端 API。還有幾個其他使用案例可以從無服務器架構中受益。其中一些使用案例包括:
數據處理
讓我們來探討另一個例子,即如何使用無服務器架構來基於數據存儲中的更改通知服務。例如,在一個電子商務平台中,假設在創建訂單時需要通知多個服務。在 AWS 生態系統中,訂單可以在創建時存儲在 DynamoDB 中。為了通知其他服務,可以基於此存儲事件觸發多個事件。
使用DynamoDB Streams時,當事件發生時可以調用Lambda函數。然後,這個Lambda函數可以將變更事件推送到SNS(簡訊通知服務)。SNS充當通知服務,通知其他對這些事件感興趣的服務。
即時檔案處理
在許多應用程式中,用戶上傳需要存儲、調整大小、轉換格式和分析的圖像。我們可以使用AWS無伺服器架構來實現這個功能。當上傳圖像時,它會被推送到一個設定觸發事件以調用Lambda函數的S3存儲桶。Lambda函數可以處理圖像,將元數據存儲在DynamoDB中,並將調整大小後的圖像存儲在另一個S3存儲桶中。這種可擴展的架構可用於處理數百萬張圖像,而無需管理任何基礎架構或進行任何手動干預。
挑戰
無伺服器架構提供許多好處,但也帶來需要解決的特定挑戰。
冷啟動
當無伺服器函數被觸發時,平台需要創建、初始化並運行一個新的容器來執行代碼。這個過程稱為冷啟動,可能會在工作流程中引入額外的延遲。像是保持函數溫暖或使用預配置的並發性等技術可以幫助減少這種延遲。
監控與調試
由於可能會有大量的觸發,監控和調試可能變得複雜。在使用頻繁的應用程式中,識別和調試問題可能是具挑戰性的。強烈建議配置像是AWS Cloudwatch之類的工具來獲取指標、日誌和警報,以解決這些問題。
儘管無伺服器架構可以自動擴展,但資源配置必須優化以防止瓶頸。適當的資源分配和成本優化策略的實施是必不可少的。
結論
無伺服器架構是向基於無伺服器計算和存儲的雲原生應用程式發展的重要一步。它在許多類型的應用程式中被廣泛使用,包括事件驅動的工作流程、數據處理、文件處理和大數據分析。由於其可擴展性、敏捷性和高可用性,無伺服器架構已成為各種規模企業的可靠選擇。
Source:
https://dzone.com/articles/from-zero-to-scale-with-aws-serverless