在題為“什么比微服務更好?無服務器微服務”的網絡直播中,Alan Williams(Autodesk)、Asha Chakrabarty(Amazon)和Alan Ho(Apigee)討論了一個無服務器微服務的架構。其中,該微服務的構建使用了AWS lambda 函數和運行在AWS上的Apigee端點。
據Chakrabarty介紹,無服務器是一種相對比較新的架構風格,其中的計算單元不是虛擬機,而是一個封裝了待執行代碼(事件觸發)的函數。Williams指出,無狀態計算模型的主要特點是:“代碼為主(code focused)”、沒有需要管理的服務器、沒有需要配置和管理的EC2實例、無需人工擴展、沒有空閑資源、沒有SSH或RDP。
下圖簡單地描述了一個由Autodesk實現的無服務器微服務的架構(點擊查看大圖):
該微服務有多個入口點作為HTTP端點(由Apigee管理)暴露。用戶發起一個HTTP調用,并不知道其請求會由一個無服務器微服務提供服務。該服務由多個Python編寫的lambda函數組成,這些函數之間通過AWS SNS異步通知進行通信。Lambda函數是相互獨立的,可以使用不同的語言開發,可以由不同的團隊維護。
由于lambda不是短期的,所以它們需要將狀態在某個地方持久化,其中一個選擇是使用DynamoDB表。這些表的訪問通過IAM角色控制,并且僅限于那些需要對它們進行讀/寫訪問的函數。這可以避免將不需要的數據暴露給某個lambda函數,如果存在安全漏洞的話,這還可以縮小微服務的攻擊面。Autodesk之所以選擇使用DynamoDB存儲狀態,是因為它簡單,可以將數據作為JSON傳遞,不需要管理一個服務器實例,并且支持自動向上擴展。
上圖底部的DynamoDB表(talr-taskstatus)將來自多個lambda函數的狀態持久化,并在表被修改時產生流式事件。這些事件由另一個lambda函數監控(talr-validator),它會在必要時采取行動。
對于在AWS上實現一個無服務器架構,Williams列舉了如下好處。
敏捷性:只需數周就可以實現。 不需要管理基礎設施,無需EC2或ELB實例,不需要打安全補丁。 開發人員只需專注于他們編寫的代碼。 通過無服務器框架管理代碼的能力。 成本。根據他們的經驗,運行lambda解決方案的成本只是傳統云解決方案的一小部分(約1%)。由于不需要雇傭運維人員配置和監控EC2和ELB實例,所以成本還會進一步降低。Williams還提到,無服務器架構不適合運行長期工作負載或者第三方應用程序。在那些情況下,他認為容器更合適。
本次直播還展示了如何在AWS上通過無服務器框架組織代碼、部署和運行演示程序。
查看英文原文:A Sample Serverless Microservice Architecture from Autodesk