问题 多租户CQRS架构


我的团队正在开始实施一个绿地应用程序,需要多租户。我一直在进行大量关于简单可扩展性模式的研究,特别是在基于分布式云的基础架构上,而CQRS似乎是热门词汇(据称被称为“Crack for Architecture Addicts”,我发现这很有趣)。除了好处和陷阱之外,很难找到除了Greg Young以外的任何人在生产应用程序中广泛(或根本)使用这个想法并且可以为它提供真实世界的指导。

所以这是我的问题: 1. CQRS体系结构是否适合您的典型多租户应用程序,或者它是否更适合大规模内部企业应用程序。 2.如果您建议在这种情况下使用它,您是否可以提供一些关于方法的沟壑指导 - 特别是关于早期开始的事情,以及哪些方面应该有机地发展。 3.如果有人试过并发现它太难或没有意识到它的好处,或者有强烈的反对意见(并建议坚持使用CRUD和分层设计),我也想了解这些经验。

作为参考,该应用程序将使用.NET编写,前端最初将基于Web(ASP.NET MVC),可能会扩展到移动和胖客户端。预计并发性,事务活动和数据量在应用程序的整个生命周期内都会保持相对较低的水平(与高容量金融应用程序等相比)。对于基础架构,我们计划使用Azure。


7289
2017-12-15 02:15


起源

(把它作为评论而不是答案,因为它并没有真正解决你问题的具体细节)如果你还没有,我建议在这里阅读Udi的CQRS澄清文章: udidahan.com/2009/12/09/clarified-cqrs 并在这里观看他的视频: skillsmatter.com/podcast/open-source-dot-net/... - Michael Shimmins
还专门针对.NET Azure CQRS签出 abdullin.com 和Lokad项目 code.google.com/p/lokad-cqrs - Michael Shimmins
迈克尔,感谢您的评论。我确实已经阅读并观看了关于此模式的大量信息,包括这些资源。似乎缺乏的是那些使用过一段时间的人的声音,或者甚至只是在现在实施它的过程中。在我采取理论上的好处之前,我想验证伴随它们的现实挑战并不是太大。正如我最喜欢的一句话所说:“理论上,理论和实践都是一样的。在实践中,它们很少。” - Mafuba
仅供参考,在Lokad,我们广泛使用CQRS进行多租户应用。也可以看看 code.google.com/p/lokad-cqrs - Joannes Vermorel


答案:


在开始实际项目(我们仍在等待商业资金)之前,我从探索性角度亲自审视了同一个起点。在那里,我的研究和意见是,该架构的多租户轴在很大程度上与使用CQRS进行粗粒度服务的内部设计正交。多租户要求对应用程序如何将租户与安全性,数据,演示/个性化,部署/供应和可扩展性的观点分开进行了额外的总体限制。 CQRS并没有真正使这更好或更糟,我认为仍然有助于解决服务的宝贵架构挑战。也就是说,并非所有松散协作提供应用程序的服务都需要遵循CQRS模式,前提是所选择的松散耦合架构不会禁止其使用。


6
2018-03-09 14:17





  1. 多租户将改变一点CQRS读取方面。您需要过滤视图并仅返回与租户相关的数据。使用任何其他架构,您将面临同样的问题。
  2. 我建议CQRS,因为它会使您的应用程序基于任务(不是基于CRUD)。这意味着您将从UI接收命令,它们将比DTO更有意义。 如果你想用DDD原则编写你的核心,那么试着避免贫血领域模型( http://martinfowler.com/bliki/AnemicDomainModel.html )。执行此操作的方法 - 将所有特定于域的逻辑移动到域对象。您的命令处理程序应该非常简单(验证,加载聚合根,将命令对象转换为方法调用,如果没有抛出异常 - 应用更改)。 值得观看格雷格的班级记录(6个半小时): http://cqrsinfo.com/video/ 正如Michael Shimmins所说,如果你打算使用Azure作为你的平台 - 值得一看Lokad.CQRS项目。我用它来实现我们的一个项目。
  3. 如果您真的需要简单的CRUD应用程序(不是基于任务),CQRS将不适合。 CQRS需要更多时间来了解新手的原则。另一方面,它将允许在域核心程序员和经验不足的view-> dto-> ui程序员之间分离开发任务。

7
2017-12-25 07:51





我不认为多租​​户使用CQRS更难/更容易。如果使用消息传递,则具有各种优势:您可以将租户标识嵌入到命令和事件中作为标头数据,根据标识选择事件存储,将多租户与多实例结合使用。不过,问问自己,您的域名是否具有高度协作性,并且拥有域专家可供您使用...否则您最终会遇到命令/事件反馈;-)


2
2017-12-15 10:23