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