欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

歡迎來到云服務(wù)器

云資訊

怎樣將微服務(wù)和無服務(wù)器相結(jié)合?用新型事件驅(qū)動型架構(gòu)CQRS!

本文是將介紹如何在微服務(wù)中實施CQRS模式,并深入探討為什么無服務(wù)器和這種類型的系統(tǒng)無比契合。在最后,將介紹一個使用Spring Cloud Stream實施CQRS的參考應(yīng)用。

什么是事件驅(qū)動型架構(gòu)?

事件驅(qū)動型架構(gòu)會優(yōu)先處理領(lǐng)域事件,但這種架構(gòu)已經(jīng)逐漸被淘汰。

我們?nèi)粘J褂玫囊粋€示例是前端應(yīng)用。在如今使用的Web瀏覽器中,事件的處理方法是捕獲用戶表單的輸入數(shù)據(jù),而連接到頁面元素的事件將由一個顯式映射函數(shù)來處理,在觸發(fā)時在用戶界面應(yīng)用對狀態(tài)的更改。

最近,隨著微服務(wù)的廣泛普及,人們對如何在分布式后端系統(tǒng)中利用事件驅(qū)動技術(shù)重新產(chǎn)生了興趣。

怎樣將微服務(wù)和無服務(wù)器相結(jié)合?用新型事件驅(qū)動型架構(gòu)CQRS!

CQRS

如今,事件驅(qū)動型架構(gòu)中最熱門的實踐之一叫做CQRS,全稱是命令查詢責任分離。CQRS是一種架構(gòu)風格,能讓您使用不同模型來更新和讀取領(lǐng)域數(shù)據(jù)。

怎樣將微服務(wù)和無服務(wù)器相結(jié)合?用新型事件驅(qū)動型架構(gòu)CQRS!

CQRS的基本理念是,您用來更新和讀取數(shù)據(jù)的模型要相互分離是很自然的事情。上圖描述了這種基本思想。

CQRS之所以在事件驅(qū)動型架構(gòu)中如此受歡迎,是因為作為輸入的領(lǐng)域事件與其所屬的領(lǐng)域模型在結(jié)構(gòu)上有所差異。以下面這個代表一個帳戶的領(lǐng)域模型對象為例。

示例1.帳戶整合

"createdAt":1481351048967, 

"lastModified":1481351049385, 

"userId":1, 

"accountNumber":"123456"

"defaultAccount"true

"status":"ACCOUNT_ACTIVE" 

當某個服務(wù)想查詢帳戶時,就會使用該模型。那么,如果我們要將狀態(tài)更新為ACCOUNT_SUSPENDED,該怎么辦?通常,只需簡單更新領(lǐng)域?qū)ο蟮臓顟B(tài)字段即可?,F(xiàn)在,如果我們想使用領(lǐng)域事件來更新狀態(tài),該怎么辦?由于領(lǐng)域?qū)ο笤诮Y(jié)構(gòu)上與事件不同,我們需要一個可將不同模型作為命令接受的API。

以下代碼段是將帳戶狀態(tài)從ACCOUNT_ACTIVE轉(zhuǎn)換為ACCOUNT_SUSPENDED的領(lǐng)域事件。

示例2.帳戶事件

"createdAt":1481353397395, 

"lastModified":1481353397395, 

"type":"ACCOUNT_SUSPENDED"

"accountNumber":"123456" 

要處理此領(lǐng)域事件并將更新應(yīng)用到查詢模型,我們必須有接受命令的API。該命令將包含領(lǐng)域事件的模型,并使用模型來處理對帳戶查詢模型的更新。

怎樣將微服務(wù)和無服務(wù)器相結(jié)合?用新型事件驅(qū)動型架構(gòu)CQRS!

將命令模型與查詢模型相分離是對CQRS最簡單的解釋。我們?nèi)缃癯R姷膹?fù)雜性更多地與實施類型有關(guān),將模式應(yīng)用到微服務(wù)時尤為如此。

CQRS和微服務(wù)

如果CQRS與微服務(wù)相結(jié)合,毫不夸張地說,情況就變得有點復(fù)雜了。我們來看看使用Spring Boot實施CQRS的“簡單”微服務(wù)是什么樣。

怎樣將微服務(wù)和無服務(wù)器相結(jié)合?用新型事件驅(qū)動型架構(gòu)CQRS!

上圖是CQRS模式實施的簡略圖示。圖中,我們將一個微服務(wù)分為命令端、查詢端和事件處理器,這三個部分可以相互獨立地部署。

命令端

本示例中的命令端提供了REST API,可接受通過HTTP發(fā)送的請求。請求采取命令的形式,可以驅(qū)動對微服務(wù)所擁有的領(lǐng)域數(shù)據(jù)的狀態(tài)更改。簡單來說,對領(lǐng)域數(shù)據(jù)的任何寫入都將以命令形式從API請求流出,處理導(dǎo)致數(shù)據(jù)庫發(fā)生更改的操作。

怎樣將微服務(wù)和無服務(wù)器相結(jié)合?用新型事件驅(qū)動型架構(gòu)CQRS!

命令觸發(fā)操作,操作觸發(fā)領(lǐng)域事件。領(lǐng)域事件保存在事件存儲中,也就是“一個將數(shù)據(jù)庫與消息代理相結(jié)合的系統(tǒng)。”最合適入門使用的事件存儲是Eventuate,是由Chris Richardson創(chuàng)建的項目,旨在幫助將CQRS和Event Sourcing應(yīng)用到微服務(wù)。

領(lǐng)域事件存儲為按時間順序排列的一系列事件,附加在日志上。由于每個命令都生成一個事件,我們能夠根據(jù)收集的事件歷史記錄重新構(gòu)建當前系統(tǒng)的總體狀態(tài)。

事件處理器

騰訊云代理

Copyright © 2003-2021 MFISP.COM. 國外vps服務(wù)器租用 夢飛云服務(wù)器租用 版權(quán)所有 ? 粵ICP備11019662號

主站蜘蛛池模板: 西贡区| 鄯善县| 安龙县| 乌拉特后旗| 西宁市| 潍坊市| 铜陵市| 大港区| 岳普湖县| 山阴县| 三都| 北海市| 铜陵市| 庐江县| 佳木斯市| 左云县| 宣威市| 桂阳县| 台中县| 乾安县| 巴青县| 南投市| 晋城| 定襄县| 乌苏市| 陈巴尔虎旗| 正安县| 南涧| 宿州市| 启东市| 临汾市| 河源市| 阆中市| 同心县| 鄂托克前旗| 夏津县| 梁平县| 湄潭县| 永丰县| 秦皇岛市| 望城县|