【问题标题】:Scalability of Wolkenkit servicesWolkenkit 服务的可扩展性
【发布时间】:2019-06-07 20:30:10
【问题描述】:

在使用过另一个 CQRS/ES 框架后,我也看过 Wolkenkit。它看起来是一个不错的框架,可能缺少一些高级功能,但它使用简单但智能的 API 对 CQRS/ES 进行建模。

背景:我确实阅读了文档,但还没有在实践中查看它。

虽然文档没有回答一点,但恕我直言,重要的是通过其架构 Wolkenkit 如何实现水平扩展的问题,这意味着添加额外的服务实例(尤其是通过不同数量的写入和读取端)。听起来应该是可能的,但是(恕我直言)没有解释如何以及为什么。

CQRS/ES 有一些潜在的同步/序列化点,在命令顺序(可能由乐观锁定处理)或更重要的情况下,单个聚合实例的事件顺序具有得到保证(例如,如果事件的顺序错误,则无法正确构建读取端)。

我没有在文档中看到这个问题的答案,我认为单独使用 RabbitMQ 并不能解决这个问题。

是否已明确解决(通过自定义基础架构元素?)或者是否有一些(未提及的)约束(不)隐式解决?如果我错过了什么,简单的文档链接就可以了

【问题讨论】:

    标签: wolkenkit


    【解决方案1】:

    在谈到扩展时,您主要希望扩展两件事:代理(负责读取模型)和核心(负责写入模型)。

    关于核心,我们现在并行处理多个命令,只要它们针对不同的聚合。针对同一聚合的多个命令使用marble-run 进行序列化。如果有多个内核在运行,我们目前没有可靠扩展的机制,但这在我们的roadmap 上。请注意,还有一个 issue 用于此主题,非常欢迎对此主题提供帮助和/或赞助(尽管如此我们迟早会解决它)。

    关于代理,它们是相互独立的,因此它们可以毫不费力地进行扩展,因为它们之间没有任何依赖关系。

    目前,CLI 不支持扩展核心或代理,您需要手动执行此操作,但一旦上述问题得到解决,这将再次发生变化。

    免责声明:我是wolkenkit 的核心开发人员之一,所以请对我的回答持保留态度。

    【讨论】:

      最近更新 更多