您現在的位置是:首頁 > 單機遊戲首頁單機遊戲

為什麼事件驅動架構這麼火?亞馬遜雲科技給你答案

簡介這樣一來,應用載入的雲計算服務可以在一定程度上最小化,比如前文所舉的縮圖功能的例子,網站應用只有在使用者上傳檔案的時候才呼叫縮圖微服務,在沒有使用者上傳圖片之時,無伺服器Lambda Function微服務處於休眠狀態,不發生成本

相機縮圖快取能刪嗎嗎

近二三十年來,軟體開發領域毫無疑問是發展最為迅速的行業之一。

在上個世紀九十年代,世界上市值最高的公司大多是資源類或者重工業類的公司,例如埃克森美孚或者通用汽車,而現在市值最高的公司中,純粹的軟體公司谷歌微軟位列前五,而排名第一的蘋果公司也有相當部分是軟體業務。

現在每個企業機構無一例外地都在利用軟體最佳化自己的業務,因此也造就了軟體行業非常多的工作機會,從而也吸引了越來越多的小夥伴進入到軟體以及相關的行業中。

同樣,也正是因為軟體行業日新月異,催生了層出不窮的新技術和新正規化。

從較早的面向物件的程式設計和二十三個設計模式,到面向服務的軟體架構,一直到如今流行的微服務和雲原生軟體,讓人目不暇接。

而在軟體架構當中,最為流行的毫無疑問是事件驅動架構(EDA)。這種架構因其具備高容錯性,高可升級性以及其各個模組具備低耦合的特性,被各個軟體開發團隊廣泛採用。

作為現代軟體開發的基礎設施的雲計算服務提供商,也針對事件驅動架構軟體的開發和部署提供了一系列的原生服務。

今天我們就來看看事件驅動架構的應用是怎麼一回事。

讓我們用一個簡單的例子來說明。現在很多網站都具備上傳圖片的功能,無論是社交媒體網站還是電商網站,都允許使用者上傳圖片,之後上傳的圖片會顯示在這個網站上,例如買家秀這樣的功能。

對於普通使用者來說,上傳圖片是一個再簡單不過的動作,但是背後的邏輯就需要軟體開發團隊精心的設計。

得益於現在手機相機強大的功能,使用者上傳的圖片往往大小都比較大,直接放在網站上會超出螢幕顯示的大小,擠佔網頁其他元素的位置,而且太大的圖片載入速度較慢,又使得網頁載入和顯示備受影響,這個時候,把圖片縮小成縮圖再顯示就是一個很自然的思路。

那麼,從“上傳圖片”到“生成縮圖”然後“展示縮圖”,這個功能如何用軟體應用來實現呢?

用傳統的資料驅動的思維來進行分析,當圖片被使用者上傳到網站伺服器上的時候,直接呼叫一個壓縮圖片的方法,然後把原圖和縮圖分別儲存到檔案伺服器,然後網站上的圖片元素指向縮圖的位置,就可以實現生成縮圖的要求。

然而,隨著縮圖功能的使用者的增加,使用者們提出新要求,因為所使用的裝置螢幕有大有小,縮圖功能是否可以應對不同尺寸的螢幕生成多個不同大小的縮圖?一個簡單的縮圖功能逐漸開始延展。

與此同時,隨著縮圖功能的使用者越來越多,網站響應速度越來越慢,甚至直接崩潰。

從網站伺服器上看,上傳圖片的壓縮操作和網站響應使用者請求的功能耦合在一起同步執行,佔用了網站伺服器太多資源,使得網站無法響應越來越多使用者的請求。

開發團隊馬上決定將生成縮圖功能單獨提取出來,採取定時任務的方式,對於固定資料夾裡的圖片檔案進行壓縮,這樣可以把壓縮功能從網站伺服器移出,節省網站伺服器的資源。

可是,這麼一來,又造成了新的問題,究竟這個定時任務多久執行一次,才能讓使用者及時看到自己上傳的檔案呢?如何在定時任務執行的時候確定哪些檔案需要被壓縮呢?壓縮完畢後又應該如何通知網站應用,來載入壓縮完畢的檔案呢?

看來這麼一個小小的功能,設計起來也是頗有講究,要支援不同型別不同尺寸的壓縮功能,需要能夠非同步執行、能分隔部署到不同的伺服器上,加上別的團隊對這個功能也有興趣,這個生成縮圖功能還需要可以和其他應用程式整合。從一個簡單的功能擴充套件開來,要兼顧各種不同的需求,這時候就是應該利用事件驅動架構來構建了。

事件驅動架構,顧名思義就是讓架構中的各個模組,按照事件發生的順序靈活地執行,並且可以把執行結果作為新的事件來驅動下一個模組的執行。

如此一來,每個模組都有了明確的執行邊界和啟動條件,而架構的作用就是將這些事件和對應的模組組合起來就組成了完整的應用。

在這個圖片上傳功能的例子中,首先發生的事件就是使用者上傳,當網站伺服器接收到使用者上傳的圖片,則將圖片儲存在檔案伺服器中,則可將“上傳完畢”的結果返回給客戶,簡單而迅速;檔案伺服器上的檔案變化就成為了第二個事件,這個事件則可以即時驅動縮圖模組的啟動,將圖片作為引數傳入縮圖模組,以非同步的方式執行,從而使得其他模組的執行不會被阻擋,提高其他模組的響應速度。

同時,不同尺寸的壓縮任務可以序列也可並行執行,就如同流水線一般將任務傳遞下去,每個模組僅僅只負責一個獨立的任務,高效而簡潔,而模組的組合則由架構靈活控制,方便未來的擴充套件和修改。

如此一來,剛才看似複雜功能,就變成了簡單的功能組合,而且可以靈活響應不同事件的發生,開發的任務也就變得簡單明瞭。

未來,當運營團隊提出新的要求,例如為使用者上傳新增日誌功能,就變得十分簡單,只需要新增一個日誌功能,然後將其設定為到使用者上傳事件驅動,功能就實現了。

並且,因為每個模組都是獨立的,因此測試和擴容都變得簡單了,整個應用也變得更加健壯和快速了。從工程構建的角度,事件驅動架構滿足了軟體開發高內聚低耦合的規範,大大簡化了開發和擴充套件的難度,因此,國內外的大大小小的開發團隊都在積極擁抱事件驅動架構應用。

為什麼事件驅動架構這麼火?亞馬遜雲科技給你答案

在目前的科技巨頭裡,亞馬遜雲科技是對於事件驅動架構支援力度最大的頭部玩家之一。

在亞馬遜雲科技平臺上,其原生的無伺服器的微服務就完全遵循了事件驅動架構的正規化。

還是用上傳圖片的功能作為事例,當上傳圖片被儲存到亞馬遜雲科技S3儲存上的時候,就可以觸發檔案增加事件,而開發者只需要把縮圖功能作為一個微服務寫入Lambda Function之中,然後將該微服務的觸發條件設定為相應的檔案增加事件,就可以在圖片上傳儲存之時被觸發執行。

為什麼事件驅動架構這麼火?亞馬遜雲科技給你答案

在亞馬遜雲科技平臺上,Lambda Function提供了多種雲服務常用的事件可供開發團隊直接使用,其中包括剛剛提到的亞馬遜雲科技S3儲存服務上的事件,還有云服務監控監測到的事件,物聯網Alexa裝置上的事件,API Gateway上的API呼叫事件,DynamoDB NoSQL資料庫的事件,MQ資訊流事件等等。

想了解更多,可以複製這個連結到瀏覽器中檢視:

https://aws。amazon。com/cn/lambda/

這些原生支援的事件產生的資訊被很好地封裝了起來,供Lambda Function使用。豐富的事件形態支援使得開發人員不必過多關心這些事件背後的底層技術,從而能更好地把注意力集中到實現業務邏輯上。

亞馬遜雲科技對於事件驅動架構的全面擁抱,就體現在這裡——幾乎所有的亞馬遜雲科技提供的雲計算服務,都實現了對於事件的支援。這些雲計算服務的事件觸發器有著統一而完善的介面,使得開發者能夠自由組合,以產生最佳的組合效應。

為什麼事件驅動架構這麼火?亞馬遜雲科技給你答案

在開發團隊關心的應用執行效能問題和雲計算成本問題,亞馬遜雲科技也透過利用事件驅動架構做了極具伸縮性的設計。

在事件驅動架構的應用中,事件驅動的邏輯模組都可以是非同步呼叫的,也就是說,如果事件不發生,則對應邏輯模組不載入不執行。

這樣一來,應用載入的雲計算服務可以在一定程度上最小化,比如前文所舉的縮圖功能的例子,網站應用只有在使用者上傳檔案的時候才呼叫縮圖微服務,在沒有使用者上傳圖片之時,無伺服器Lambda Function微服務處於休眠狀態,不發生成本。

而在微服務啟動之時,亞馬遜雲科技也是按照秒級單位來計算微服務執行的時間,按使用時間收費。與此同時,微服務也具備自動彈性伸縮的能力。

亞馬遜雲科技Lambda Function允許使用者設定同時執行的微服務數量上限,如果將這個上限設為1000,則表明微服務可以同時啟動1000個例項來響應事件的觸發,同時,微服務因為其無伺服器的高度虛擬化的特性,啟動執行和回收資源都發生在毫秒級別,在面對大量的事件觸發之時,真正做到了唯快不破。而且微服務還有各種其他涉及到效能和資源自動伸縮的設定,可以滿足使用者各種不同的需求模式。

回到縮圖功能的事例,產生不同大小的縮圖的微服務可以並行執行,用同一個S3儲存的新增檔案事件來驅動多個不同的縮圖微服務,輔以不同的壓縮引數,可以並行生成不同大小的縮圖。

那麼,如果我們需要在縮圖生成以後,再為不同大小的縮圖新增水印,這就需要微服務能夠序列執行。

開發人員可以直接將水印功能的程式碼加入縮圖微服務中,但更好的做法,顯然是單獨將水印功能封裝成為單獨的微服務獨立部署,這樣,不僅功能上得到了更好的劃分,同時也提升了網站應用程式整體的執行效能和健壯性。

一個可以參考的做法是,第一步將使用者上傳的圖片原圖儲存於第一個S3檔案basket,這個basket會觸發新增檔案的事件,來驅動縮圖微服務的執行;當縮圖微服務執行完畢,就會將縮圖儲存於S3的第二個basket中,而這第二個basket則會驅動下一個新增檔案的事件,來驅動新增水印的微服務;最後,新增水印的微服務將最終的圖片檔案存入第三個basket中,交還給網站引用。

如此一來,透過一系列的事件的驅動,多個微服務可以靈活組成不同的邏輯流程來處理資訊,實現使用者期待的功能。

這充分表明了事件驅動架構在亞馬遜雲科技中的廣泛應用,而且亞馬遜雲科技也切實利用事件驅動架構的優勢來為使用者和開發者賦能。

如果我們完整地看待縮圖功能的實現,除了剛才提到的亞馬遜雲科技的各個服務,亞馬遜雲科技還提供了數以百計的其他服務來完善縮圖功能。

API Gateway提供了將微服務組織起來的API統一介面;亞馬遜雲科技CloudFront CDN網路可以將縮圖快取到不同地區的資料中心,加速網路資源的訪問速度;亞馬遜雲科技還提供了完備的開發者工具,讓開發者方便地管理程式碼、自動部署、監控應用狀態等。

亞馬遜雲科技一站式服務及工具集合為開發團隊、運營團隊和終端使用者提供了最接近完美的解決方案。

為什麼事件驅動架構這麼火?亞馬遜雲科技給你答案

現代軟體工程技術的發展中,事件驅動架構應用並不是一個新概念,在多年的發展中歷久彌新,在現在雲計算技術爆炸的當下,完美地指引了軟體應用應該如何靈活高效地設計和構建。

亞馬遜雲科技作為雲計算平臺的領軍者,也受益於對事件驅動架構的全面擁抱,也進一步鞏固了其在雲計算領域的領先優勢,也是開發團隊的不二之選。

下個月就會是亞馬遜雲科技中國峰會(線上直播),峰會中將會涉及到事件驅動架構的應用實踐,除此之外大會還涉及到:機器學習的演進趨勢、Web3的發展和趨勢等等。內容十分豐富,強烈推薦每一位技術同學觀看直播。

點選連結

免費報名參加。

https://summit。awsevents。cn/2022/signin?source=gh/ZsR4xii4TX2Vs20QVMs418wSR/csct97RbvSDowE=&tab=1&type=2

Top