日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2023-11-20 17:10:44 226觀看
導讀CQRS(命令查詢職責分離)是一種在復雜商業應用中非常有用的模式,特別是當讀操作和寫操作有不同需求時。舉個例子,寫操作可能想要在關系型數據庫中以規范化形式維護一個模型,而讀操作則可以將模型表現為文檔數據庫中的文檔。

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

ZAl28資訊網——每日最新資訊28at.com

我們的CQRS實現

為了將CQRS集成到我們的自定義框架中,我們使用了Axon框架。因為Axon是最容易使用的,并且對Spring Boot框架有很好的支持。架構圖如下所示:ZAl28資訊網——每日最新資訊28at.com

ZAl28資訊網——每日最新資訊28at.com

我們為寫入和讀取創建了兩個單獨的服務。這兩個服務通過 RabbitMQ 連接。ZAl28資訊網——每日最新資訊28at.com

寫入服務

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

讀取服務

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

這是一個非常簡單的實現。我們將讀取和寫入分為兩個服務,那么我們為什么失敗了呢?ZAl28資訊網——每日最新資訊28at.com

為什么我們失敗了?

1. 異步性

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

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

2.工作量大

第二個主要抱怨是“完成基于 CQRS 的微服務需要兩倍的工作量。“ 開發人員必須創建兩項服務:命令服務和讀取服務。但這就是我們實施 CQRS 的方式。ZAl28資訊網——每日最新資訊28at.com

3.對所有服務使用 CQRS

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

4.較小的微服務

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

更小的微服務意味著更多的微服務。由于我們將 CQRS 應用于所有服務,最終使服務數量增加了一倍。這是無法控制的。ZAl28資訊網——每日最新資訊28at.com

總結

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

本文鏈接:http://www.www897cc.com/showinfo-26-31528-0.html微服務架構中實施CQRS失敗的四個重大原因,引以為戒!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 管理 Spring 微服務中的分布式會話

下一篇: 將 Spring 微服務與 BI 工具集成:最佳實踐

標簽:
  • 熱門焦點
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 把LangChain跑起來的三個方法

    使用LangChain開發LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創 作者|程心 羅輯2023年之前,對于自己的“今天”,百度也很迷茫。“新業務到 2022 年底還是 0,希望 2023 年出來一個 1。”這是2022年底,李彥宏
  • 華為Mate60標準版細節曝光:經典星環相機模組回歸

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項實用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發布的朋友圈
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主“七王”在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 万州区| 家居| 岑溪市| 正安县| 金川县| 安西县| 都匀市| 永善县| 屏山县| 宁德市| 临猗县| 个旧市| 黔南| 潮州市| 固安县| 县级市| 牟定县| 黄大仙区| 都江堰市| 东阿县| 布拖县| 浑源县| 安丘市| 襄樊市| 丹寨县| 巴东县| 上犹县| 文昌市| 临猗县| 兴仁县| 措美县| 增城市| 莱芜市| 南城县| 扎兰屯市| 高阳县| 东乡族自治县| 佛山市| 漳浦县| 宁德市| 富源县|