我正在尝试在我的新项目中使用CQRS和EventSourcing。我遵循了几年前Greg Young建议的方式(Mark Nijhof实现-http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young/)。但是,我对此解决方案的可扩展性存在一些问题。
在这篇由Mark Nijhof撰写的文章中提到了一些要点。但现在的问题在于Denormalizer部分,它负责更新报告数据库。我想将这一部分变成异步模式,这样在发布事件到总线后,我就可以立即返回控制权。我们建议将Denormalizer实现为一个独立的Web服务(WCF),该服务将处理传入的事件并按批次进行命令更新报告数据库。它似乎可能会成为瓶颈,因此我们还想在此处添加一些可扩展性-集群解决方案。但在集群情况下,我们无法控制报告数据库更新的顺序(或者我们应该实现一些奇怪的、容易出错的逻辑来检查报告DB中的对象版本)。另一个问题是解决方案的可维护性:如果失败,我们将丢失Denormalizer中的更新,因为我们不会将它们持久化到任何地方。现在我正在寻找解决这个问题(Denormalizer的可扩展性)的方法,欢迎任何想法!
在这篇由Mark Nijhof撰写的文章中提到了一些要点。但现在的问题在于Denormalizer部分,它负责更新报告数据库。我想将这一部分变成异步模式,这样在发布事件到总线后,我就可以立即返回控制权。我们建议将Denormalizer实现为一个独立的Web服务(WCF),该服务将处理传入的事件并按批次进行命令更新报告数据库。它似乎可能会成为瓶颈,因此我们还想在此处添加一些可扩展性-集群解决方案。但在集群情况下,我们无法控制报告数据库更新的顺序(或者我们应该实现一些奇怪的、容易出错的逻辑来检查报告DB中的对象版本)。另一个问题是解决方案的可维护性:如果失败,我们将丢失Denormalizer中的更新,因为我们不会将它们持久化到任何地方。现在我正在寻找解决这个问题(Denormalizer的可扩展性)的方法,欢迎任何想法!