微服务中的事件采购,CQRS和数据库

时间:2016-12-03 11:30:16

标签: microservices cqrs event-sourcing

我在微服务架构的背景下相当新,并阅读这篇文章:http://microservices.io/patterns/data/event-sourcing.html以熟悉微服务架构中的事件源和数据存储。 我已经阅读了很多关于系统的三个重要方面的文件:

  1. 使用事件来源而不是简单共享的数据库和ORM和     行更新
  2. 事件是JAVA对象。
  3. 永久保存数据的情况     ,我们需要使用DB(关系或noSQL)
  4. 以下是我的问题:

    1. 数据库如何与事件采购同时出现?我读过CQRS 模式,但我无法理解CQRS模式是如何与之相关的 事件存储和事件对象?

    2. 任何身体都可以提供给我一个     所有玩家都可以完成整个画面和一系列操作     收集:CQRS模式,事件采购(包括事件存储     模块)和最后不同的微服务?

    3. 在一个系统中         由许多微服务组成,我们应该有一个事件存储或         每个微服务都有自己的?或两者都可能?
    4. 相同     关于CQRS的问题。这种模式全部实施     微服务还是只有一个?
    5. 最后,在使用的情况下         微服务架构,必须只有一个DB或         每个Microserivce都应该有自己的?
    6. 正如你所看到的,我已经了解了所有小部分游戏,但我无法将它们联系在一起构成整个图像。 CQRS与事件源和在DB中存储数据之间的特别相关性。 我读了很多文章,例如:

      但在所有这些小球员中都有讨论。即使手绘图像也将受到赞赏。

1 个答案:

答案 0 :(得分:7)

  

数据库如何与事件采购同时出现?我已阅读CQRS模式,但我无法理解CQRS模式如何与事件存储和事件对象相关?

"查询" CQRS的一部分指示您如何创建事件的投影,这适用于某些有限的上下文",其中数据库可用作保持该投影的手段。 "命令" part允许您隔离数据转换逻辑并将其与"查询"和#34;持久性"您应用的各个方面。简单地说 - 你只需要以多种方式将事件流投影到数据库中(投影也可以是关系),具体取决于任务。在这个模型"查询"和"命令"有自己的方式来预测和存储事件数据,针对应用程序的特定部分的需要进行了优化。相同的数据将存储在事件和投影中,这将实现子域(有界上下文,微服务)之间的简单性和松散耦合。

  

任何机构都可以为我提供完整的图片,并且所有参与者都可以收集一系列操作:CQRS模式,事件源(包括事件存储模块)以及最终不同的微服务吗?

你见过Greg Young尝试提供simplest possible implementation吗?如果您仍然感到困惑,请考虑创建有关其示例的更具体的问题。

  

在由许多微服务组成的系统中,我们应该有一个事件存储器还是每个微服务器都有自己的存储器?或两者都可能?

它通常是一个常见的事件存储,但肯定会有一些例外情况,在这种情况下你真的需要为不同的微服务提供多个存储空间。这一切都取决于商业案例。如果你不确定 - 最有可能你现在只需要一个存储空间。

  

关于CQRS的相同问题。这种模式是在所有微服务中实现的,还是仅在一个?

中实现

它可以在大多数性能要求高的微服务中实现。这一切都取决于您将CQRS引入其中时实施的复杂程度。如果它变得更简单 - 为什么不在任何地方实现它?但是如果团队中的人越来越感到困惑,需要在命令和查询部分之间执行更明确的同步 - 也许cqrs对你来说太过分了。这一切都取决于你的团队,在你的领域......不幸的是,没有一个简单的答案。

  

最后,在使用微服务架构的情况下,必须只有一个DB或每个微服务应该有自己的?

如果相同的微服务共享相同的表 - 这通常被认为是反模式,因为它增加了耦合,系统变得更脆弱。您仍然可以共享同一个数据库,但不应该有共享表。此外,来自一个微服务的表更好地没有FK' s到另一个微服务中的表。同样的原因 - 减少耦合。

PS:考虑不要问粗粒度的问题,因为很难得到人们的回应。一些较小的,更具体的问题将有更好的机会得到解答。