Architecture CQR/事件源架构的最佳实践/存储选择

Architecture CQR/事件源架构的最佳实践/存储选择,architecture,cassandra,redis,apache-kafka,cqrs,Architecture,Cassandra,Redis,Apache Kafka,Cqrs,任务。使用CQRS/事件源架构构建可扩展的高负载应用程序 让我们假设这是一个有很多在线用户的免费广告牌。因此,用户应该能够: 注册/登录 添加/更新/删除广告 参见广告列表 搜索广告 一段时间后分析广告/从事件存储中复制每个应用程序状态 我的想法。 我会考虑使用类似于: 卡桑德拉/蒙哥达…-存储事件 卡夫卡/Redis/Hazelcast/RabbitMQ…-事件队列 弹性搜索+缓存(如Redis)-用于查看 问题。 在每一步中使用一个与另一个相对的方法有什么利弊?或者将事件存储与队列相结合(例

任务。使用CQRS/事件源架构构建可扩展的高负载应用程序

让我们假设这是一个有很多在线用户的免费广告牌。因此,用户应该能够:

  • 注册/登录
  • 添加/更新/删除广告
  • 参见广告列表
  • 搜索广告
  • 一段时间后分析广告/从事件存储中复制每个应用程序状态
  • 我的想法。

    我会考虑使用类似于:

  • 卡桑德拉/蒙哥达…-存储事件
  • 卡夫卡/Redis/Hazelcast/RabbitMQ…-事件队列
  • 弹性搜索+缓存(如Redis)-用于查看
  • 问题。

  • 在每一步中使用一个与另一个相对的方法有什么利弊?或者将事件存储与队列相结合(例如,使用Kafka作为队列和长期事件存储)
  • 是否有人拥有经过验证的堆栈,可以分享CQRS/事件源架构的经验
    这是一个比较宽泛的问题,它可以归结为您对技术的满意程度

    我的选择是:
    1.卡桑德拉(你有没有尝试过扩展MongoDB?
    2.卡夫卡+Redis(如果需要缓存,则使用Redis)
    3.弹性搜索


    这三种技术可以为您提供所需的一切。

    对于我当前的项目,一个基于web的CRM应用程序,我使用以下堆栈:

  • MongoDB作为事件存储
  • 我不使用事件队列;我不需要它,因为我使用的是来自事件存储的池;每个消费者管理自己的状态
  • 查看MongoDB

  • PHP
    count吗?Constantin GALBENU,这个问题与编程语言无关,更多的是关于队列/存储堆栈。在我以前的项目中,我使用了4个mongo碎片,我们遇到了一些问题(行数、数据中心之间在高延迟情况下的不同步),但无论如何,它都很正常。现在我不确定我是否需要Cassandra或者配置为巨大的TTL Kafka作为存储和队列……这是一个很好的例子,但似乎它远没有高负载,而且我不确定它是100%CQRS体系结构,因为您每次都在为用户创建视图。在这种情况下,“删除”或“更新”是如何发生的?在复制状态之前是否检查相应的事件?它是100%CQRS+事件源。您正在运行多少MongoDB实例,每秒有多少事件,以及延迟的类型?事件池是处理和响应事件的可怕方式。@MatijaGobec每秒写入12000个事件,每秒读取35000个事件。如果您出于正确的原因使用池,那么池不是一种可怕的方式。微服务中的池是对事件做出反应的一种好方法,因为微服务以自己的速度(由硬件决定)做出反应,并且系统非常被动/有弹性。如果微服务出现故障,则系统的其余部分不受影响。