原標題:亞馬遜云科技的Amazon Lambda結合了Serverless和EDA,是一項Serverless事件驅動型計算服務
近年來,云計算和微服務架構的流行使得許多公司開始將應用程序部署到云上。在這個過程中,一些新的技術和概念也隨之而來,比如MAD(現(xiàn)代化應用)架構。MAD架構的主要目的是讓企業(yè)能夠更好地利用云計算和微服務架構來構建靈活、高效、可擴展的應用程序。
在介紹MAD架構之前,先回顧一下最近十年應用部署架構的演進。
假設現(xiàn)在有一個任務需求,需要將用戶上傳到mp4文件轉換為WMV格式再存儲到數(shù)據(jù)中。
單體架構
如果使用最早的單體架構部署,作為最傳統(tǒng)的應用部署模式,是將整個應用程序作為一個單一的、緊密耦合的單元進行開發(fā)和部署。
在這種情況下,MP4文件轉換為WMV格式的功能將作為應用程序的一部分實現(xiàn)。整個應用程序在一個部署單元中運行,包括處理用戶界面、業(yè)務邏輯和數(shù)據(jù)訪問等功能。
遇到問題
使用這種模式,問題非常明顯,雖然部署簡單,但會導致代碼和功能之間的緊密耦合,遇到局部bug會影響整個應用功能運行,可伸縮性受限,整個應用程序需要按照 負載需求進行伸縮,而不僅僅是轉換文件的功能。這可能導致資源浪費和低效的資源利用,另外也會存在單點故障問題,如果應用程序的某個組件出現(xiàn)故障,整個應用程序都會受到影響。
在單體架構中,所有的功能模塊都被打包在一起,共享同一個數(shù)據(jù)庫和用戶界面。單體架構在早期的軟件開發(fā)中非常常見,因為它簡單、易于理解和實現(xiàn),但受限于可擴展、可維護性、高可用性等問題,單體架構逐漸被時代淘汰。
容器技術/微服務
為了解決單體架構存在問題,容器技術孕育而生,直至docker容器技術出現(xiàn),行業(yè)改變了以往的架構模式。
從過去以物理機和虛擬機為主體的開發(fā)運維環(huán)境,向以容器為核心的基礎設施的轉變過程,這并不是一次溫和的改革,而是涵蓋了對網(wǎng)絡、存儲、調(diào)度、操作系統(tǒng)、分布式原理等各個方面的容器化理解和改造。
容器技術發(fā)展徹底釋放了微服務天性,在單體架構部署存在的問題,在微服務架構中,應用程序被拆分為多個小型、獨立部署的服務,每個服務專注于一個特定的功能。對于MP4文件轉換為WMV格式的過程,可以將其作為一個單獨的轉換服務實現(xiàn),甚至可以根據(jù)轉換過程進一步拆分,實現(xiàn)更精細化管理,每個服務可以獨立部署和伸縮,提供更好的靈活性和可擴展性,服務之間都是獨立的,可以獨立開發(fā)、測試、擴展和部署。
遇到問題
隨之而來地系統(tǒng)復雜性增加,微服務架構引入了分布式系統(tǒng)的復雜性,包括服務之間的通信、數(shù)據(jù)一致性和故障處理等方面。
部署和管理成本增加,管理多個服務的部署和運維需要更多的工作和資源。
企業(yè)需求
對于企業(yè),如果希望既要實現(xiàn)高效、可伸縮、高可用等功能,同時提高團隊人員效率,開發(fā)者可以專注于編寫業(yè)務邏輯,而無需擔心服務器的配置、擴展或管理。
還是之前“MP4文件轉換為WMV格式存儲到數(shù)據(jù)”例子中,如何實現(xiàn)開發(fā)者可以專注于編寫業(yè)務邏輯,而無需擔心服務器的配置、擴展或管理問題?
可以通過兩個步驟來了解:
1、Serverless服務
2、事件驅動架構(EDA)
Serverless在基礎設施端解決運維困擾
在Serverless計算服務中,開發(fā)人員只需關注應用程序的業(yè)務邏輯,云服務提供商將負責管理和調(diào)配計算資源,平臺根據(jù)需求自動擴展計算資源,以適應變化的工作負載,同時按使用付費,根據(jù)實際使用的計算資源付費,避免了長期維護和不必要的成本。
EDA讓開發(fā)者可以專注于編寫業(yè)務邏輯使用事件驅動架構
使用EDA架構來實現(xiàn)將MP4文件轉換為WMV格式的過程可以提供一種高度可擴展和靈活的方式。
1、事件源:
事件源是用戶上傳的MP4文件,上傳成功后存儲在云存儲服務(如Amazon S3)中。當有新的MP4文件上傳時,Amazon S3會發(fā)送一個事件通知。
2、事件觸發(fā)器:
創(chuàng)建一個事件觸發(fā)器,以捕獲Amazon S3的事件通知,并將其轉化為事件。這可以通過使用Amazon S3的事件通知功能,或者使用專門的觸發(fā)器服務來實現(xiàn)。
3、事件總線:
搭建一個事件總線(如消息隊列或事件流服務),用于接收和傳遞事件。事件總線可以作為中心樞紐,接收來自不同事件觸發(fā)器的事件。
4、事件處理程序:
編寫事件處理程序,可以使用云函數(shù)(如Amazon Lambda)或自己搭建的應用程序來處理事件。事件處理程序將接收到的事件作為觸發(fā)器,執(zhí)行MP4文件轉換為WMV格式的操作。
5、MP4轉換為WMV:
在事件處理程序中,使用適當?shù)墓ぞ呋蚍⻊?如FFmpeg)來執(zhí)行MP4文件轉換為WMV格式的任務。通過編寫代碼來提取上傳的MP4文件,使用合適的轉換命令和參數(shù)將其轉換為WMV格式。
6、結果處理:
一旦MP4轉換為WMV完成,將轉換后的文件存儲云存儲服務(如Amazon S3)中。根據(jù)需求,還可以將轉換結果通知相關方(如用戶、運維管理員),還可以將其集成到其他應用程序中。
通過以上的架構,當用戶上傳MP4文件到指定的存儲桶時,Amazon S3會發(fā)送事件通知到事件觸發(fā)器。事件觸發(fā)器將通知轉換為事件并發(fā)送到事件總線。事件總線將事件分發(fā)給相應的事件處理程序,觸發(fā)MP4到WMV格式轉換的任務。事件處理程序處理完任務后,將轉換后的文件存儲在適當?shù)奈恢,并可以通過適當?shù)姆绞酵ㄖ嚓P方。
通過EDA架構,每個事件模塊有自己的處理條件和界限,同時提供可擴展性和彈性,并且允許在需要時添加更多的事件處理程序來處理多個轉換任務。還可以與其他服務和組件進行集成(例如:日志監(jiān)控等),以實現(xiàn)更復雜的工作流程和自定義邏輯。
Amazon Lambda
Serverless和事件驅動架構(EDA)是現(xiàn)代應用開發(fā)中的兩個重要概念,在所有廠商中,亞馬遜云科技算是排在行業(yè)前茅,它們的Amazon Lambda結合了Serverless和EDA,是一項Serverless事件驅動型計算服務,可以從200多個Amazon服務和軟件即服務(SaaS)應用程序中觸發(fā)Amazon Lambda,且只需按 到毫秒級別的使用量付費。例如:
01/文件處理
使用Amazon S3在上傳后實時觸發(fā)Amazon Lambda數(shù)據(jù)處理,或連接到現(xiàn)有的Amazon EFS文件系統(tǒng),從而為大規(guī)模文件處理啟用大規(guī)模并行共享訪問。
根據(jù)需要,設置合適的Amazon Lambda內(nèi)存執(zhí)行代碼,Amazon Lambda實例數(shù)自動擴展以匹配請求量,并啟用自定義事件觸發(fā)器。
02/流處理
通過Serverless流處理的工作原理。社交媒體流加載到Amazon Kinesis中,然后觸發(fā)Amazon Lambda。Amazon Lambda運行代碼生成主題標簽趨勢數(shù)據(jù),并將數(shù)據(jù)存儲在DynamoDB中方便查詢。
03/Web應用程序
通過Amazon S3、API網(wǎng)關、Amazon Lambda和DynamoDB如何協(xié)同工作以檢索Web或移動應用程序的天氣數(shù)據(jù)。
04/IoT后端
使用Amazon Lambda構建無服務器后端,以處理Web、移動、物聯(lián)網(wǎng)(IoT)和第三方API請求。
對于開發(fā)者而言,Amazon Lambda允許開發(fā)人員在云中運行代碼,無需管理服務器,能以更簡單、更靈活的方式構建和運行應用程序,提供了自動擴展、事件驅動、事件日志和監(jiān)控、可定制性、多語言支持等功能,與其他Amazon服務集成緊密,可幫助開發(fā)人員構建高效、可靠的云應用。
投稿郵箱:chuanbeiol@163.com 詳情請訪問川北在線:http://m.fishbao.com.cn/