Architecture 无事件源和LMAX风格单线程设计审查的CQR
只是回顾一下我的计划,看看是否可行 Im正在使用RDBMS,并计划在没有事件来源的情况下使用CQR。我认为事件源对于第一次尝试来说有点高级,我不得不使用RDBMS 基于任务的UI由许多命令组成,其中大多数命令不需要响应 建筑基本上是Architecture 无事件源和LMAX风格单线程设计审查的CQR,architecture,cqrs,Architecture,Cqrs,只是回顾一下我的计划,看看是否可行 Im正在使用RDBMS,并计划在没有事件来源的情况下使用CQR。我认为事件源对于第一次尝试来说有点高级,我不得不使用RDBMS 基于任务的UI由许多命令组成,其中大多数命令不需要响应 建筑基本上是 /---- RDBMS ( EF ) IO ops \ | \ Single threaded Domains Fascade(DT
/---- RDBMS ( EF )
IO ops \
| \
Single threaded Domains Fascade(DTO) Queries
| /
Event/Command Dispatcher /
\ /
MVC client
单线程域彼此不通信,它们通过中断器(基本上是环形缓冲区)与外部世界通信
命令调度器将外部事件和命令复制到磁盘,并在崩溃时重新加载它们。已明确标记完成(通过IO Ops)
命令基本上是持久化的(具有命令的事务范围),IO Ops层将捕获所有事件并处理它们,并在一个事务中标记命令完成。(请注意,该命令通过日志服务(而不是域)持久化,但它与IO opps对话,后者将其与该命令的工作相匹配)。如果命令失败,并且其标记为persist(不是全部),则可以重放该命令。(仅当它拥有该命令并接收到DoTransation消息时,才会持久化该命令。)
命令调度器通过中断器连接到域
问题
- 指定命令guid,该命令将与 交易
- 假设完成(射击和祈祷)
- 提供一个回调命令,该命令传递给命令调度器,然后在域中重新出现。创建IO消息后,系统可以继续
当前命令或完成它并接收下一个命令。
这够好吗
这是一个实验性的米什网格。有什么想法吗?首先,这个架构相当复杂。仔细检查项目的预期寿命是否值得在建筑方面的所有初始投资。一句话:在5年或10年内,这个项目还会付账吗?客户是否会允许您在不提供业务价值的情况下在体系结构上花费数月的时间 问题 你没有提到什么是你的命令调度器的主机。无论这是什么,它都很可能是应用程序中的瓶颈。除非它从非常高性能的队列(例如ZeroMQ)中提取消息,否则我认为您不需要环形缓冲区。队列在大多数情况下都很好,而且简单得多 您的问题 我假设IO操作意味着事件/事件处理程序。可能还有其他细微差别我没有领会