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