成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

微服務架構中實施CQRS失敗的四個重大原因,引以為戒!

開發 架構
CQRS(命令查詢職責分離)是一種在復雜商業應用中非常有用的模式,特別是當讀操作和寫操作有不同需求時。舉個例子,寫操作可能想要在關系型數據庫中以規范化形式維護一個模型,而讀操作則可以將模型表現為文檔數據庫中的文檔。但是理解CQRS并不容易。

CQRS(命令查詢職責分離)是一種在復雜商業應用中非常有用的模式,特別是當讀操作和寫操作有不同需求時。舉個例子,寫操作可能想要在關系型數據庫中以規范化形式維護一個模型,而讀操作則可以將模型表現為文檔數據庫中的文檔。但是理解CQRS并不容易。它涉及到讀操作、寫操作、事件、命令、領域驅動設計(DDD)、事件溯源以及最終一致性等概念。實現CQRS的常見方式是創建兩個服務,并通過事件進行通信。

我們的CQRS實現

為了將CQRS集成到我們的自定義框架中,我們使用了Axon框架。因為Axon是最容易使用的,并且對Spring Boot框架有很好的支持。架構圖如下所示:

我們為寫入和讀取創建了兩個單獨的服務。這兩個服務通過 RabbitMQ 連接。

寫入服務

寫入服務處理所有的更新操作。我們并沒有試圖說服開發人員認為寫請求就是真正的命令。控制器負責從請求中創建命令,并通過命令網關發布命令。控制器與命令處理程序之間的通信是異步的。命令處理程序通過加載聚合根,執行業務邏輯,然后將事件發布到RabbitMQ來處理命令。與此同時,事件也被保存到事件存儲中。在這個實現中,事件存儲充當我們的單一真相來源。

讀取服務

讀取服務處理所有讀取請求。這里沒有應用任何業務邏輯。通過監聽發布到 RabbitMQ 的事件來更新數據。開發人員可以選擇任何關系數據庫或 MongoDB 作為讀取數據庫。我們希望開發人員實現的是讀取優化的模型。它們可以存儲數據而不進行任何規范化以提高讀取性能。

這是一個非常簡單的實現。我們將讀取和寫入分為兩個服務,那么我們為什么失敗了呢?

為什么我們失敗了?

1. 異步性

當我們引入CQRS時,開發人員的主要抱怨是“我們將如何更新UI,我們不知道記錄是否成功保存”。這是一個非常合理的問題,它涉及到我們所熟悉的同步通信方式。這種方式很好,也是我們從一開始就習慣使用的編碼方式。因為它易于推理。我們可以得到請求的完整流程。

那么為什么我們在事件驅動架構(EDA)中使用異步調用呢?很簡單,就是為了提高響應能力。EDA 與異步通信無關。我們可以在不使用異步通信的情況下實現 CQRS。

2.工作量大

第二個主要抱怨是“完成基于 CQRS 的微服務需要兩倍的工作量。“ 開發人員必須創建兩項服務:命令服務和讀取服務。但這就是我們實施 CQRS 的方式。

3.對所有服務使用 CQRS

我們告訴開發人員的是在每個微服務中使用 CQRS。我們認為整個系統應該是一個CQRS系統。其結果是引入了難以管理的復雜性,這是我們在實施 CQRS 時犯的主要錯誤之一。

4.較小的微服務

我們不能說微服務應該有多小,但我們可以確定它的邊界。我們可以使用DDD和限界上下文等概念來識別微服務邊界。在 CQRS 中,我們使用聚合的概念。聚合是 邏輯上相關的域對象。例如訂單和訂單項目。我們將訂單和訂單項目視為一件事。當我們保存訂單時,會將其與訂單項目一起保存。當我們無法識別聚合時,最終會將其拆分為單獨的微服務。這給 CQRS 增加了巨大的復雜性。當收到保存訂單的請求時,要如何保存訂單項目?

更小的微服務意味著更多的微服務。由于我們將 CQRS 應用于所有服務,最終使服務數量增加了一倍。這是無法控制的。

總結

這次失敗的主要原因是因為錯誤的實現,并且大多數與 CQRS 無關。我們從中學到的是,必須理解微服務和 CQRS 的關鍵概念,然后才能將它們整合好。

責任編輯:華軒 來源: 今日頭條
相關推薦

2009-04-29 11:20:24

.NET開發常見錯誤

2011-08-04 10:14:25

監控分布系統

2011-06-09 10:25:25

手機病毒

2011-01-27 09:19:14

Mono開發

2022-06-16 13:37:47

RPA機器人流程自動化

2009-07-23 13:32:04

SilverlightFlash

2012-11-14 14:39:21

2019-07-17 06:03:57

物聯網IOT技術

2024-03-04 11:07:27

云計算

2013-05-10 10:39:15

2021-09-07 15:41:35

Bug誘因代碼

2021-04-15 09:42:21

程序開發軟件開發

2017-08-31 09:39:56

微服務架構演進

2017-07-12 13:49:45

微服務架構數據共享

2013-04-26 09:26:56

軟路由升級失敗

2011-04-18 14:12:44

2010-09-01 11:29:04

CSS

2020-05-20 15:27:44

智慧城市數據技術

2012-03-30 09:17:31

惠普馬克赫德惠普CEO

2010-07-19 13:28:31

配置Telnet服務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 老妇激情毛片免费 | 久久国内精品 | 亚洲免费福利视频 | 99re在线视频 | 天堂av免费观看 | 日韩中文视频 | www.四虎.com| 日本超碰 | 成人av资源在线 | 久久久久久999 | 午夜精品久久久久久久星辰影院 | 最新黄色毛片 | 男人天堂网址 | 犬夜叉在线观看 | 国产免费一区二区 | 亚洲欧美综合精品久久成人 | 国产成人综合在线 | 黄视频网站免费观看 | 亚洲欧美在线观看 | 久久久久国产一区二区三区四区 | 日韩精品一区二区三区四区视频 | 亚洲精品影院 | 国产区在线视频 | 免费一级片 | 欧美一级一区 | 欧美中文字幕一区二区三区亚洲 | 亚洲一区二区三区在线视频 | aa级毛片毛片免费观看久 | 日韩在线第一 | 久久久久成人精品免费播放动漫 | 蜜桃传媒一区二区 | 色狠狠一区 | 日韩亚洲一区二区 | 日本午夜在线视频 | 成人免费视频网站在线看 | 成人午夜精品一区二区三区 | 黄色大片免费网站 | 中文字幕一区二区三区不卡 | 精品欧美一区二区三区精品久久 | 日韩午夜在线观看 | 色爱区综合 |