.net 实现 CQRS 的的一个设想
一、先总结一下以前的经验
本人前公司项目开发基本算是CQRS的
后台和数据接口用.net(后大部分转java),前台nodejs
数据统计用hive
但是涉及列表含模糊搜索基本都是交给站内搜索团队,他们用Lucene
碰到的问题主要有两个:
1. 数据库负载问题
很多系统需要相同数据库的数据,导致死锁、io高负载
DBA弄很多从库,有时又出现数据同步延时和数据不一致问题
2. 数据不一致不及时问题
后台、接口、搜索、统计、中转接口的数据有时出现不一致
有些数据还是T+1或者T+2的统计数据
其中极少数是多从库数据不一致和多个“相同功能”逻辑不一致
大部分还是多级缓存的问题
每个程序为了保证可用性,或多或少都自己做了缓存处理
打接口查问题,清缓存都是家常便饭
二、现在也有很多.net开源的DDD和CQRS框架
原理也很简单,把已经发生的事情包装为事件(一般用MQ),其他关联系统订阅事件再写逻辑处理
关联系统需要什么数据就要联系对方提供对应的事件,可能需要开发排期,需要更高层次的领导协调,有时也是苦不堪言
三、为此本人有个设想使用ShadowSql来简化这个过程
比如用mysql存储业务原始数据、es用来做前端展示、hive做数据挖掘
ShadowSql做添加、修改、删除都继承IExecuteSql接口
业务系统执行sql成功后把IExecuteSql对方发送到队列,相当于是mysql的binlog
由于ShadowSql支持多种数据库,也可以扩展来支持es和hive等
其他关联系统订阅队列,就可以直接执行sql了
当然这最好有个前提,主键、Id等最好不要用数据库的自增列,否则可能导致不一致
业务要用的字段最好也别用数据库默认值规则产生(比如添加、修改时间等)或触发器修改
当然也是有少部分逻辑不能通过数据同步来简单实现
我相信通过IExecuteSql对象来同步数据库可以解决80%+的问题
以上只是设想,ShadowSql暂时还不支持es和hive,为了方便消息处理IExecuteSql对象ShadowSql逻辑可能还需要调整
.net 实现 CQRS 的的一个设想的更多相关文章
- IDDD 实现领域驱动设计-一个简单的 CQRS 示例
上一篇:<IDDD 实现领域驱动设计-CQRS(命令查询职责分离)和 EDA(事件驱动架构)> 学习架构知识,需要有一些功底和经验,要不然你会和我一样吃力,CQRS.EDA.ES.Saga ...
- CQRS之旅——旅程8(后记:经验教训)
旅程8:后记:经验教训 我们的地图有多好?我们走了多远?我们学到了什么?我们迷路了吗? "这片土地可能对那些愿意冒险的人有益."亨利.哈德逊 这一章总结了我们旅程中的发现.它强调了 ...
- DDD CQRS架构和传统架构的优缺点比较
明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...
- Command and Query Responsibility Segregation (CQRS) Pattern 命令和查询职责分离(CQRS)模式
Segregate operations that read data from operations that update data by using separate interfaces. T ...
- CQRS, Task Based UIs, Event Sourcing agh!
原文地址:CQRS, Task Based UIs, Event Sourcing agh! Many people have been getting confused over what CQRS ...
- CQRS FAQ (翻译)
我从接触ddd到学习cqrs有6年多了, 其中也遇到了不少疑问, 也向很多的前辈牛人请教得到了很多宝贵的意见和建议. 偶尔的机会看到国外有个站点专门罗列了ddd, cqrs和事件溯源的常见问题. 其中 ...
- CQRS\ES架构介绍
大家好,我叫汤雪华.我平时工作使用Java,业余时间喜欢用C#做点开源项目,如ENode, EQueue.我个人对DDD领域驱动设计.CQRS架构.事件溯源(Event Sourcing,简称ES). ...
- 如何快速开发出一个高质量的APP——创业谈
[起] 今早,一个技术群里有人想快速做出一个app,然后询问技术方案,大概是这样, 拿到了200w投资,期望花20w两个月先做出一个app,包括iOS,Android, 先,呵呵,一下, 大概预估了一 ...
- 【创业积累】如何快速开发出一个高质量的APP
[起] 今早,一个技术群里有人想快速做出一个app,然后询问技术方案,大概是这样, 拿到了200w投资,期望花20w两个月先做出一个app,包括ios,android, 先,呵呵,一下, 大概预估了一 ...
- 转:命令和查询责任分离(CQRS)架构模式
读了“蓝皮书”距今差不多一年,它改变了我的软件开发和构建软件架构观.在我作为一名程序员期间,我尝试了许多不同的方式来构建软件.方法有很多,包括一个贫血的域模型(Anemic Domain Model) ...
随机推荐
- php去除金额后面多余的0(零)
第一种: 使用floatval() 第二种: rtrim(rtrim($str, '0'), '.'); 比如$str=2.360000; 最后会输出2.36 第三种使用正则: /** * 去除多余的 ...
- SpreadJS V18.0 新版本发布!数据驱动革新,效率与体验全面升级
表格控件SpreadJS推出V18.0及V8.0版本!本次更新聚焦数据管理.多语言适配.报表与透视表增强,新增多项重磅功能,赋能企业高效应对复杂业务场景.核心亮点速览 一.表格绑定数据源:直连数据管理 ...
- 深入理解Hadoop读书笔记-3
背景 公司的物流业务系统目前实现了使用storm集群进行过门事件的实时计算处理,但是还有一个需求,我们需要存储每个标签上传的每条明细数据,然后进行定期的标签报表统计,这个是目前的实时计算框架无法满足的 ...
- Sublime Text 3汉化教程
一.初始化插件仓库 ctrl+`(esc键下方那一个)打开控制台输入以下代码回车 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx上特色外设XBAR那些事(1)- 初识
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列上的XBAR外设. 得益于 Arm Cortex-M 内核的普及,现如今 MCU 厂商遍地开花,只要能取 ...
- 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明 @ 目录 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明 1. Exchanges 交换机的 ...
- 修显示器led屏幕能亮但是显示异常
用电吹风热风大风 对着显示器的 ' led 区域 ' 吹十分钟 吹显示器线插口 电源线 插口 机箱 断电吹 // 温度挺高 还得吹显卡接口 线也要换新的 插口需要用线的接口 打磨金属 ...
- IOC 中 bean 标签
- 结合laravel深入理解php的服务容器和依赖注入
原文:laravel 学习笔记 -- 神奇的服务容器 容器,字面上理解就是装东西的东西.常见的变量.对象属性等都可以算是容器.一个容器能够装什么,全部取决于你对该容器的定义.当然,有这样一种容器,它存 ...
- 等保2.0>Windows下实现MySQL数据库自动备份
说明: MySQL数据库安装目录:C:\Program Files\mysql-5.7.37-winx64\mysql-5.7.37-winx64 MySQL数据库存放目录:C:\Program Fi ...