一、先总结一下以前的经验

本人前公司项目开发基本算是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 的的一个设想的更多相关文章

  1. IDDD 实现领域驱动设计-一个简单的 CQRS 示例

    上一篇:<IDDD 实现领域驱动设计-CQRS(命令查询职责分离)和 EDA(事件驱动架构)> 学习架构知识,需要有一些功底和经验,要不然你会和我一样吃力,CQRS.EDA.ES.Saga ...

  2. CQRS之旅——旅程8(后记:经验教训)

    旅程8:后记:经验教训 我们的地图有多好?我们走了多远?我们学到了什么?我们迷路了吗? "这片土地可能对那些愿意冒险的人有益."亨利.哈德逊 这一章总结了我们旅程中的发现.它强调了 ...

  3. DDD CQRS架构和传统架构的优缺点比较

    明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...

  4. Command and Query Responsibility Segregation (CQRS) Pattern 命令和查询职责分离(CQRS)模式

    Segregate operations that read data from operations that update data by using separate interfaces. T ...

  5. CQRS, Task Based UIs, Event Sourcing agh!

    原文地址:CQRS, Task Based UIs, Event Sourcing agh! Many people have been getting confused over what CQRS ...

  6. CQRS FAQ (翻译)

    我从接触ddd到学习cqrs有6年多了, 其中也遇到了不少疑问, 也向很多的前辈牛人请教得到了很多宝贵的意见和建议. 偶尔的机会看到国外有个站点专门罗列了ddd, cqrs和事件溯源的常见问题. 其中 ...

  7. CQRS\ES架构介绍

    大家好,我叫汤雪华.我平时工作使用Java,业余时间喜欢用C#做点开源项目,如ENode, EQueue.我个人对DDD领域驱动设计.CQRS架构.事件溯源(Event Sourcing,简称ES). ...

  8. 如何快速开发出一个高质量的APP——创业谈

    [起] 今早,一个技术群里有人想快速做出一个app,然后询问技术方案,大概是这样, 拿到了200w投资,期望花20w两个月先做出一个app,包括iOS,Android, 先,呵呵,一下, 大概预估了一 ...

  9. 【创业积累】如何快速开发出一个高质量的APP

    [起] 今早,一个技术群里有人想快速做出一个app,然后询问技术方案,大概是这样, 拿到了200w投资,期望花20w两个月先做出一个app,包括ios,android, 先,呵呵,一下, 大概预估了一 ...

  10. 转:命令和查询责任分离(CQRS)架构模式

    读了“蓝皮书”距今差不多一年,它改变了我的软件开发和构建软件架构观.在我作为一名程序员期间,我尝试了许多不同的方式来构建软件.方法有很多,包括一个贫血的域模型(Anemic Domain Model) ...

随机推荐

  1. 从上下文切换谈thread_local工作原理

    从上下文切换谈thread_local工作原理 thread_local是什么 熟悉多线程编程的小伙伴一定对thread_local不陌生,thread_local 是 C++11 引入的一种存储类说 ...

  2. this和super--java进阶day01

    1.this和super的代表 super是父类的标识符,如堆内存中的标志 2.this和super的访问 重点说访问构造方法,super()访问父类构造方法我们已经清楚,但是this()访问本类构造 ...

  3. 【QT】解决生成的exe文件出现“无法定位程序入口”或“找不到xxx.dll”的问题

    [QT]解决生成的exe文件出现"无法定位程序入口"或"找不到xxx.dll"的问题 零.问题 使用QT编译好项目后,想直接在文件资源管理器中运行exe程序或想 ...

  4. C# 中合并2个 Dictionary

    内置方法 using System.Collections.Generic; using System.Linq; Dictionary<string, object> dicA = ne ...

  5. study Python3 【1】

    用VSCode来编辑Python代码,作为IDE使用,有点头晕. https://www.runoob.com/python3/python-vscode-setup.html有介绍.还有更好的博客介 ...

  6. 航天信息诺税通SAAS接口封装DLL

    项目中需要对接航天信息的诺税通接口开具电子发票,为此将功能封装到了DLL中,其他项目也可以方便的引用. Delphi调用示例: 有需要可以和我联系:yzqnet(微信)

  7. MySQL 的乐观锁和悲观锁是什么?

    MySQL 的乐观锁和悲观锁是什么? 在并发环境下,为了避免数据竞争和保证数据一致性,可以使用不同的锁策略.乐观锁和悲观锁是两种常见的并发控制机制,它们在锁定数据时的理念和实现方式上有显著区别. 1. ...

  8. DPDI online

    DPDI online @三倍镜 用户名:dpdi 密码 dpdi

  9. 让IE6、IE7、IE8支持CSS3的圆角、阴影样式-最好的插件

    想做个页面用到css3的圆角和阴影效果,但ie浏览器不支持,之前也听说有插件可以实现,周六在网上找到了一个方法,原文如下: 但凡是前端工程师,都知道IE6,IE7,IE8不支持.或者不完全支持CSS3 ...

  10. github仓库的README文件在线预览视频

    1. 新建一个 issue ,在 issue 里面上传 mp4 视频文件(有限制,不能超过10MB) 上传超过10MB的视频会提示报错 2. 拿到视频文件的上传地址 3. 将这个地址直接贴到 READ ...