Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 事件源,带有Axon服务器/框架的CQRS-事件源整个应用程序是个好主意吗?_Design Patterns_Architecture_Microservices_Axon - Fatal编程技术网

Design patterns 事件源,带有Axon服务器/框架的CQRS-事件源整个应用程序是个好主意吗?

Design patterns 事件源,带有Axon服务器/框架的CQRS-事件源整个应用程序是个好主意吗?,design-patterns,architecture,microservices,axon,Design Patterns,Architecture,Microservices,Axon,这个问题与Axon服务器/框架的关系非常松散,因为我在学习和尝试学习如何构建微服务时专门学习了它。由于在没有实际动手经验的情况下很难了解所有的架构模式(并且在没有大型应用程序进行实际测试/构建的情况下很难获得动手经验),我在这里进行了大量的理论推导(我的问题可能很愚蠢,对不起,我还在学习) 我下载了Axon服务器,并在三个独立的微服务中成功构建并运行了附带的giftcard演示。它工作得很好,我在Axon仪表板上看到了事件和所有这些,但是如果我真的构建了一个非常大的企业应用程序,我会忍不住想到“

这个问题与Axon服务器/框架的关系非常松散,因为我在学习和尝试学习如何构建微服务时专门学习了它。由于在没有实际动手经验的情况下很难了解所有的架构模式(并且在没有大型应用程序进行实际测试/构建的情况下很难获得动手经验),我在这里进行了大量的理论推导(我的问题可能很愚蠢,对不起,我还在学习)

我下载了Axon服务器,并在三个独立的微服务中成功构建并运行了附带的giftcard演示。它工作得很好,我在Axon仪表板上看到了事件和所有这些,但是如果我真的构建了一个非常大的企业应用程序,我会忍不住想到“如果是什么”

考虑这一点:

我正在建立一个像Twitch这样的流媒体平台。有一些基本的、显而易见的服务,如客户服务及其配置文件数据、订单服务(用于订阅、捐赠)等

但还有其他服务,如聊天系统。假设,我觉得事件来源的聊天系统将是非常有益的,因为如果观众正在观看视频点播,你将有内置的时间戳来重播聊天。然而,我也觉得我不应该将聊天系统的事件与处理事务的事件存储混合在一起;这两个系统是完全独立的,只需将每个服务中的每个事件存储在一个事件存储中。。。整体的

我仍然不清楚什么是最佳实践。会谈中的所有样本和示例都显示了具有典型客户、订单、项目聚合的非常简单的系统,并且没有详细说明这个简单的应用程序将如何发展为像Twitch这样的大型服务

所以我的问题是

1) 您应该为整个应用程序设置事件源,还是可以选择哪些应用程序设置事件源而不是事件源

2) Axon服务器是否支持两种不同的事件存储,例如一种用于聊天系统,另一种用于其他服务?在这种情况下,我会运行两个不同的Axon服务器实例吗?一个应用程序是否应该有两个不同的事件存储,或者我是否应该将每个事件转储到一个事件存储中,而不管像聊天系统这样的东西是否发送的事件比其他任何东西都多(考虑到我指定的查看者可能希望“重播”聊天日志的用例,事件源化聊天系统是否是一个好主意?)

3) 单一事件存储是真理的单一来源的整个想法让人感觉像是铁板一块。我这样想是不是错了?如果我没有错,那么如果我有一个非常大的应用程序,有什么方法可以避免这种情况?

1)您应该为整个应用程序设置事件源,还是可以选择哪些应用程序设置事件源,哪些应用程序不设置事件源

您可能不应该这样做:如果我将您的应用程序视为子域模型(有界上下文),那么我将能够将这些子域作为核心、支持和通用来优先排序。我将使用EnvestObjo模式在核心(业务的关键微分器)和可能支持子域,但我不考虑在通用子域上使用EVENTION。通用子域通常是您外包或购买的东西,它们不会给您的业务增加太多价值

2) Axon服务器是否支持两种不同的事件存储,例如一种用于聊天系统,另一种用于其他服务?在这种情况下,我会运行两个不同的Axon服务器实例吗

我已经提到了有界上下文模式。Axon服务器使您能够使用此模式。Axon Server标准版只有一个上下文(称为
default
)。在Axon Server Enterprise Edition中,可以配置多个上下文,然后连接应用程序以使用它们(在基于角色的场景中)。每个上下文都物理链接到它自己的事件存储(一个上下文=一个存储)

我不介意将事件保留在单个默认上下文/事件存储中一段时间(使用Axon Server CE)。eventsourcing的问题在于,您正在将数据与行为分离,将来将eventstore迁移到多个eventstore应该很容易。我现在将重点关注应用程序的设计和行为,然后再关注迁移。这是一种进化的方法

3) 单一事件存储是真理的单一来源的整个想法让人感觉像是铁板一块。我这样想是不是错了?如果我没有错,如果我有一个非常大的应用程序,有什么方法可以避免这种情况


我可能已经在第2节中回答了这个问题。如果您有松散耦合的应用程序和组件(包括位置透明性),那么您就不必担心事件源数据在一个eventstore中。将来它可以发展到更多的活动商店。

非常感谢您的回复。在阅读本文之前,我还没有听说过有界上下文,在应用程序的设计中似乎有大量的准备和思考。我觉得随着软件的发展,做出“糟糕”的设计决策几乎是不可避免的,因为无论我如何规划或研究应用程序的不同领域,这都是极其困难的。我想这就是敏捷的全部,没问题。我已经写了一篇关于这个主题的博客文章:,以及示例应用程序。您还可以在AxonIQ站点上阅读DDD、eventsourcing和CQRS模式:。我希望这有助于。。。