只是审查我正在计划,看看它是否可以工作。cqrs没有事件采购和LMAX风格单线程设计审查
我正在使用RDBMS并计划在没有事件源的情况下使用CQRS。我认为事件采购对于第一次尝试有点高级,我不得不使用RDBMS。
基于任务的UI由许多命令组成,其中大多数命令不需要响应。
架构基本上是
/---- RDBMS (EF)
IO ops \
| \
Single threaded Domains Fascade(DTO) Queries
| /
Event/Command Dispatcher/
\ /
MVC client
单线程域不相互交谈,他们通过干扰(基本上环形缓冲器)聊到了外面的世界。
命令调度程序将外部事件和命令复制到磁盘并在崩溃时重新加载它们。完成显式标记(由IO Ops)。
命令基本上会被持久化(使用命令的事务范围),IO Ops层将获取所有事件并处理它们并在1个事务中标记命令完成。 (请注意,该命令通过日志服务持续存在,而不是域,但它与IO opps进行通信,使其与命令的工作匹配)。如果命令失败并且其标记持续(不是全部),则可以重播。 (它只在命令有命令并且已收到DoTransation消息时才持续执行命令。)
命令调度程序通过disruptor连接到域。
问题
我应该加载整个域到内存?(约300 - 500 MEG)和该运行显然域只会数据库更新后更新。
可以将外部事件重新混合到命令调度程序中(所以它会被单线程处理并处理)。例如事件变成命令。
看起来很简单的代码域和用户代码(我得到一个很好的丰富的域),至少从我正在工作的原型。是吗?
当域做IO他们将消息发送到一个破坏者,并可以
- 指定命令GUID和命令被匹配了一个 交易
- 承担完成(拍摄和祈祷)
- 提供回调命令,将其传递给命令调度程序,然后再出现在域中。创建IO消息后,系统可以继续使用当前命令或完成当前命令并接收下一个命令。
这够好吗?
系统运行在一个进程和共享内存中,但域资源只能由自己和1个线程访问。这个可以吗?
这是一个实验性的微米网格。有什么想法吗?