×

微服務(wù)與無服務(wù)器知識大放送(二)

  • 作者:新網(wǎng)
  • 來源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-03 13:24:03

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

 我們將一個微服務(wù)分為命令端、查詢端和事件處理器,這三個部分可以相互獨(dú)立地部署。

<div
命令端
 
5895d477-f76e-4df0-9ab4-6cfe1bce80ce.jpg
本示例中的命令端提供了REST API,可接受通過HTTP發(fā)送的請求。請求采取命令的形式,可以驅(qū)動對微服務(wù)所擁有的領(lǐng)域數(shù)據(jù)的狀態(tài)更改。簡單來說,對領(lǐng)域數(shù)據(jù)的任何寫入都將以命令形式從API請求流出,處理導(dǎo)致數(shù)據(jù)庫發(fā)生更改的操作。
 
命令觸發(fā)操作,操作觸發(fā)領(lǐng)域事件。領(lǐng)域事件保存在事件存儲中,也就是“一個將數(shù)據(jù)庫與消息代理相結(jié)合的系統(tǒng)。”最合適入門使用的事件存儲是Eventuate,是由Chris Richardson創(chuàng)建的項(xiàng)目,旨在幫助將CQRS和Event Sourcing應(yīng)用到微服務(wù)。
 
領(lǐng)域事件存儲為按時間順序排列的一系列事件,附加在日志上。由于每個命令都生成一個事件,我們能夠根據(jù)收集的事件歷史記錄重新構(gòu)建當(dāng)前系統(tǒng)的總體狀態(tài)。
 
事件處理器
 
我們要探討的下一個組件是事件處理器。這個CQRS組件采用Worker應(yīng)用的形式,負(fù)責(zé)攝取領(lǐng)域事件。事件處理器是無狀態(tài)的,并偵聽來自事件存儲的消息,對傳入的事件消息采取操作。
 
事件處理器可通過很多有用的方式對新的領(lǐng)域事件作出響應(yīng)。一個領(lǐng)域事件可以生成多個事件,這些事件可以發(fā)送到其他微服務(wù)。這就是為什么大多數(shù)微服務(wù)開發(fā)人員都被CQRS吸引,因?yàn)橥ㄟ^這種方法可以發(fā)布和訂閱來自限界環(huán)境之外的應(yīng)用的領(lǐng)域事件。
 
這種方法為我們提供了一種機(jī)制,可確保領(lǐng)域數(shù)據(jù)的引用完整性。來自其他微服務(wù)的消息可用來處理領(lǐng)域事件,從而讓我們能夠維護(hù)分布式系統(tǒng)中與其他記錄的領(lǐng)域數(shù)據(jù)相關(guān)的惱人的外鍵關(guān)系。
 
查詢端
 
事件處理器首要負(fù)責(zé)應(yīng)用可改變領(lǐng)域整合狀態(tài)的領(lǐng)域事件。每個領(lǐng)域事件都可用來更新數(shù)據(jù)庫記錄,形成描述整合的增量實(shí)體化視圖。反過來,查詢端將提供一個REST API,允許HTTP客戶端讀取從已處理事件生成的實(shí)體化視圖。
 
查詢端組件中的限制是領(lǐng)域數(shù)據(jù)是只讀的。此系統(tǒng)中的所有狀態(tài)更改都會從命令端流入,然后形成可在查詢端讀取的實(shí)體化視圖。
 

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢獲取折扣

Loading