Domain driven design 领域驱动设计中的高可扩展性

Domain driven design 领域驱动设计中的高可扩展性,domain-driven-design,repository,scalability,soa,volume,Domain Driven Design,Repository,Scalability,Soa,Volume,我将DDD用于面向服务的应用程序,目的是在大量web客户端(即浏览器)之间传输大量消息 因为在所需功能的上下文中,传输的需求大于存储的需求,所以我喜欢主要依赖RAM并最小化数据库使用的想法 然而,我不清楚如何从可伸缩性的角度来构建它。web场创建服务端点和域逻辑处理的高可用性。但无论我有多少台服务器,它们似乎都必须共享一个公共存储库,以便数据保持一致 如何构建此存储库,使其尽可能具有可伸缩性?它如何能够以一种所有机器都是一致的并且每个机器都不关心另一台机器是否倒下的方式在一系列物理机器上传播 此

我将DDD用于面向服务的应用程序,目的是在大量web客户端(即浏览器)之间传输大量消息

因为在所需功能的上下文中,传输的需求大于存储的需求,所以我喜欢主要依赖RAM并最小化数据库使用的想法

然而,我不清楚如何从可伸缩性的角度来构建它。web场创建服务端点和域逻辑处理的高可用性。但无论我有多少台服务器,它们似乎都必须共享一个公共存储库,以便数据保持一致

如何构建此存储库,使其尽可能具有可伸缩性?它如何能够以一种所有机器都是一致的并且每个机器都不关心另一台机器是否倒下的方式在一系列物理机器上传播


此外,由于偶尔需要触摸数据库(例如,当客户端丢失时,必须存储用于该数据库的消息,直到其返回),我应该如何组织基于内存的代码和数据访问层?它们都被认为是“存储库”吗?你准备好阅读了吗?有很多选择,但我相信你应该从学习现代分布式NoSQL数据库的优势开始,并享受从facebook、linkedin和其他朋友那里学到的经验。从这里开始:


    • 有几种方法可以解决这个问题。没有一个单一的答案能真正涵盖一切

      确保可伸缩性的一种方法是简单地扩展硬件。将您的web服务编写为无状态,这样您就可以运行web场(所有web场都运行相同的服务,指向相同的DB),并将您的DB转换为集群。群集数据库运行在多个服务器上,并在同一个存储上工作。然而,这种情况很快就会变得复杂和昂贵

      一些有趣的链接:

      另一种方法是查看架构。CQRS是一种确保可伸缩性的通用体系结构模型。例如,这个体系结构模型(其名称代表命令/查询责任分离)构建了不同的读写数据库。这似乎是矛盾的,但如果你研究它,它会变得很自然,你会想为什么你以前从未想过它。简单地说,大多数应用程序的读操作要比写操作多得多,而且写操作往往比读操作复杂得多(需要业务规则验证等),所以为什么不将两者分开呢?您可以使用昂贵的事务数据库进行编写,然后通过多个读取服务器使用便宜的、可能是非SQL或开源的数据库。然后,您的读取模型针对应用程序的屏幕进行优化,而写入模型仅针对写入进行优化,实际上是一组基于DDD的存储库

      这里没有足够的空间来详细介绍这个选项,但是一旦您有了CQRS框架,CQRS是实现可伸缩性甚至易于开发的好方法。CQR还有许多其他优势,例如易于审计(如果您将其与“事件源”技术相结合,这在基于CQR的环境中很常见)

      一些有趣的链接:


      谢谢你的建议。若我更喜欢RAM而不是数据库,你们有什么建议吗?看起来我需要创建一个模拟数据库集群的无状态、无共享存储库。写入操作(这将是常见的)以同步或异步方式将更改提交给所有存储库计算机。然后,偶尔会有一个进程检查数据是否在RAM中过期,如果过期,则将数据从所有存储库计算机刷新到数据库中。我认为RAM优于数据库对于只读存储是一个不错的选择。如果您要写,RAM只有在您能够承受数据丢失的情况下才是好的。否则,我会选择事务(ACID)存储。我真想知道你为什么提到“存储库机器”(多个)。您指的是集群,还是指各种独立的机器/服务?我指的是一组RAM偏好的机器,它们可以降低硬件故障的风险,正如您所指出的,硬件故障会导致数据丢失。在我计划的系统中,数据将从一个客户机传输到服务器,然后通过另一个客户机的拉动快速从服务器中取出。因此,我的数据是暂时的,一次不会在服务器上停留超过秒。只有在例外情况下,数据才会滞留,在这种情况下,数据才会被检测到并从RAM迁移到数据库。在到达服务器和停留足够长的时间以标记为“用于数据库”之间,数据可能会丢失。但正如前面提到的,这一时刻既短暂又罕见。我想,如果我能将我的RAM首选存储库进行集群,我将得到相当好的覆盖。我只是想更好地了解这个集群应该如何工作。如果您对我提出的架构有任何想法,我们将不胜感激。那就是使用共享RAM进行集群?坦白地说,我不知道那会怎样。