日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

业务流程、长周期服务和微服务

發(fā)布時間:2023/12/4 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 业务流程、长周期服务和微服务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在近期于倫敦Skills Matter舉行的DDD eXchange 2018會議上,Martin Schimak認為在最近幾年間,領域事件引發(fā)了越來越多的討論,但是我們對命令也應如此,在這次會議上他討論了微服務領域的事件、命令以及長周期的服務,以及流程管理器和類似的工具如何有助于運行核心的業(yè)務邏輯。

Schimak是奧地利的一名獨立咨詢顧問,他認為,事件最好的一點在于,它們代表了已經(jīng)發(fā)生過的事情。我們正在處理越來越多的分布式系統(tǒng),通過來自服務本身的保證能夠讓我們更加相信最終一致性。事件還有助于我們解耦服務,并且能夠回過頭去看過去發(fā)生了什么。

事件的優(yōu)勢是事件驅動架構越來越流行的原因之一,有時候,設計只依賴事件就能實現(xiàn)集成服務。有時這種簡化是合理的,但是Schimak指出,這也可能會帶來一些危險。以簡單訂單處理為例,在處理過程中,只包含order placedpayment receivedgoods fetchedgoods shipped事件,它們會被支付、存儲和運輸服務所使用。一個簡單的變更,比如在跟客戶收費之前就將貨物提取出來,就會改變消息流,從而要求所有涉及到的服務都要進行變更,對于Schimak來說,服務之間的這種耦合是一個次優(yōu)的方案。

因為事件僅僅是已發(fā)生的事實,它們本身并不會觸發(fā)任何的操作。在監(jiān)聽事件的時候,我們需要一定形式的策略,該策略能夠決定當特定的事件接收到的時候,應該發(fā)生些什么。在純粹的基于事件的系統(tǒng)中,這種策略始終要位于事件消費服務之中。在基于命令的方式中,這個策略可以位于事件發(fā)布服務中,但是Schimak認為,有時候這兩個服務都不是合適的選擇。對他來講,第三種方案是新增一個中介者(mediator),它監(jiān)聽特定的事件并決定后續(xù)的步驟。

以上面的訂單服務為例,這個服務可能會監(jiān)聽相關的事件并發(fā)送命令,因此當客戶下單時協(xié)調流程并完成該訂單。在樣例中發(fā)生這樣的變化時,不僅訂單服務需要變更。Schimak指出,在這個過程中運行的邏輯通常是屬于業(yè)務核心領域中的邏輯。

對Schimak而言,命令是一些意圖,針對的是未來要發(fā)生的事情,他定義了命令執(zhí)行的兩種類型:

  • 原子性事務執(zhí)行,一般的意圖是變更一個模型;例如,下單命令會創(chuàng)建一個訂單并發(fā)布下單事件;

  • 復合的、長周期執(zhí)行,其意圖是更加業(yè)務級別的結果,可能需要多個步驟才能實現(xiàn)。樣例可以是相同的下單命令,但是這里的最終結果是完成訂單或取消訂單的事件。

在請求支付的場景中,我們應該努力實現(xiàn)有價值的業(yè)務結果。支付服務可能會發(fā)布payment received或payment cancelled事件。在Schimak的經(jīng)驗中,我們往往會采取相反的措施,暴露一些臨時的問題,比如信用卡收費失敗,并委托客戶端來對其進行處理。這意味著我們要強迫客戶端來處理策略方面的問題,而這些問題顯然是支付相關的——可能稍后進行重試,有可能使用新的信用卡數(shù)據(jù)。如果客戶端是訂單服務的話,那么它不僅要處理訂單,還要處理支付,這樣就將支付領域的知識擴展到了支付服務之外。這同時也會增加訂單服務的規(guī)模和復雜性。

將我們的問題委托給客戶端并強迫它們處理各種問題,那么它們就變成了上帝服務。

相反,我們應該將支付視為長周期的服務,它要處理支付相關的所有內部問題,并且只發(fā)布最終結果相關的事件,即payment received或payment cancelled。Schimak強調,這并不是要創(chuàng)建一個中心化的協(xié)調器(coordinator)來處理 整個業(yè)務,它指的是更好的API設計,保護不同的限界上下文。

在使用長周期服務時,一個通用的工具是Process Manager。流程管理的常見需求是處理時間和超時、重試以及流程失敗時的補償。我們可以自己實現(xiàn)所有這些功能,但Schimak更喜歡使用Axon消息和Saga管理或Lagom這樣的框架。他還建議使用某種形式的業(yè)務流程執(zhí)行引擎,但他強調工具必須是輕量級的,并且可以在單個服務中使用。開源的過程引擎框架包括Activiti、Camunda和Zeebee(也來自Camunda)。在serverless領域,AWS創(chuàng)建了Step Functions,其他云供應商也在朝著這個方向發(fā)展。

Schimak個人在長周期服務和業(yè)務處理引擎方面的經(jīng)驗包括多年在Zalando的訂單處理流程中使用Camunda。他和聯(lián)合來自Camunda的Bernd Rücker在InfoQ上撰寫了兩篇文章:事件、流程和長期運行的服務:工作流自動化的現(xiàn)代解決方案和洞悉流程!微服務與事件協(xié)同。

原文地址:http://www.infoq.com/cn/news/2018/07/events-commands-services

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結

以上是生活随笔為你收集整理的业务流程、长周期服务和微服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。