领域驱动设计的高度可扩展性

| 我将DDD用于面向服务的应用程序,该应用程序旨在在大量Web客户端(即浏览器)之间传输大量消息。 因为在所需功能的上下文中,传输的需求大于存储的需求,所以我喜欢主要依赖RAM并最大程度地减少数据库使用的想法。 但是,从可伸缩性的角度来看,我尚不清楚如何进行架构。 Web场可创建服务端点和域逻辑处理的高可用性。但是,无论我拥有多少服务器,似乎它们都必须共享一个公共存储库,以便它们的数据保持一致。 如何建立这个储存库,使其尽可能可扩展?如何以一种使所有机器保持一致并且每台机器都不关心其他机器出现故障的方式在一系列物理机器上飞溅? 另外,由于偶尔需要触摸数据库(例如,当客户端丢失并且必须存储打算返回的消息直到返回),我应该如何组织基于内存的代码和数据访问层?他们都被视为“存储库”吗?     
已邀请:
        有几种方法可以解决此问题。没有一个答案能真正涵盖全部内容... 确保可伸缩性的一种方法是简单地扩展硬件。将您的Web服务编写为无状态的,以便您可以运行Web场(所有服务器场都运行相同的相同服务,指向同一个DB)并将DB变成集群。群集数据库在多个服务器上运行,并在同一存储上工作。但是,这种情况很快就会变得复杂且昂贵。 一些有趣的链接: http://scale-out-blog.blogspot.com/2009/09/future-of-database-clustering.html http://en.wikipedia.org/wiki/Server_farm 另一种方法是查看体系结构。 CQRS是确保可伸缩性的通用体系结构模型。例如,此体系结构模型(其名称代表“命令/查询职责隔离”)构建用于读取和写入的不同数据库。这似乎是矛盾的,但是如果您学习它,它就会变得自然,并且您想知道为什么以前从未想过它。简而言之,大多数应用程序的阅读能力远不如写作,写作往往要比阅读复杂得多(需要业务规则验证等),那么为什么不将两者分开?您可以使用昂贵的事务性数据库进行写入,然后在多个读取服务器上使用廉价的(可能基于非SQL或开源的)数据库。然后,您的读取模型针对应用程序的屏幕进行了优化,而写入模型仅针对写入进行了优化,并且实际上是基于DDD的存储库集。 这里没有足够的空间来详细讨论此选项,但是一旦有了CQRS框架,CQRS是实现可伸缩性甚至易于开发的好方法。 CQRS还有许多其他优点,例如易于审核(如果将其与“事件源”技术结合使用,这在基于CQRS的环境中很常见)。 一些有趣的链接: http://cqrsinfo.com http://abdullin.com/cqrs http://blog.fossmo.net/post/Command-and-Query-Responsibility-Segregation-(CQRS).aspx     
        您准备好阅读了吗?有很多选择,但是我相信您应该从了解现代分布式NoSQL数据库的优势开始,并从在Facebook,linkedin和其他朋友中获得的经验中学习。从这里开始: http://highscalability.com/ http://nosql-database.org/     

要回复问题请先登录注册