我在微服务架构的背景下相当新,并阅读这篇文章:http://microservices.io/patterns/data/event-sourcing.html以熟悉微服务架构中的事件源和数据存储。 我已经阅读了很多关于系统的三个重要方面的文件:
以下是我的问题:
数据库如何与事件采购同时出现?我读过CQRS 模式,但我无法理解CQRS模式是如何与之相关的 事件存储和事件对象?
任何身体都可以提供给我一个 所有玩家都可以完成整个画面和一系列操作 收集:CQRS模式,事件采购(包括事件存储 模块)和最后不同的微服务?
正如你所看到的,我已经了解了所有小部分游戏,但我无法将它们联系在一起构成整个图像。 CQRS与事件源和在DB中存储数据之间的特别相关性。 我读了很多文章,例如:
但在所有这些小球员中都有讨论。即使手绘图像也将受到赞赏。
答案 0 :(得分:7)
数据库如何与事件采购同时出现?我已阅读CQRS模式,但我无法理解CQRS模式如何与事件存储和事件对象相关?
"查询" CQRS的一部分指示您如何创建事件的投影,这适用于某些有限的上下文",其中数据库可用作保持该投影的手段。 "命令" part允许您隔离数据转换逻辑并将其与"查询"和#34;持久性"您应用的各个方面。简单地说 - 你只需要以多种方式将事件流投影到数据库中(投影也可以是关系),具体取决于任务。在这个模型"查询"和"命令"有自己的方式来预测和存储事件数据,针对应用程序的特定部分的需要进行了优化。相同的数据将存储在事件和投影中,这将实现子域(有界上下文,微服务)之间的简单性和松散耦合。
任何机构都可以为我提供完整的图片,并且所有参与者都可以收集一系列操作:CQRS模式,事件源(包括事件存储模块)以及最终不同的微服务吗?
你见过Greg Young尝试提供simplest possible implementation吗?如果您仍然感到困惑,请考虑创建有关其示例的更具体的问题。
在由许多微服务组成的系统中,我们应该有一个事件存储器还是每个微服务器都有自己的存储器?或两者都可能?
它通常是一个常见的事件存储,但肯定会有一些例外情况,在这种情况下你真的需要为不同的微服务提供多个存储空间。这一切都取决于商业案例。如果你不确定 - 最有可能你现在只需要一个存储空间。
关于CQRS的相同问题。这种模式是在所有微服务中实现的,还是仅在一个?
中实现
它可以在大多数性能要求高的微服务中实现。这一切都取决于您将CQRS引入其中时实施的复杂程度。如果它变得更简单 - 为什么不在任何地方实现它?但是如果团队中的人越来越感到困惑,需要在命令和查询部分之间执行更明确的同步 - 也许cqrs对你来说太过分了。这一切都取决于你的团队,在你的领域......不幸的是,没有一个简单的答案。
最后,在使用微服务架构的情况下,必须只有一个DB或每个微服务应该有自己的?
如果相同的微服务共享相同的表 - 这通常被认为是反模式,因为它增加了耦合,系统变得更脆弱。您仍然可以共享同一个数据库,但不应该有共享表。此外,来自一个微服务的表更好地没有FK' s到另一个微服务中的表。同样的原因 - 减少耦合。
PS:考虑不要问粗粒度的问题,因为很难得到人们的回应。一些较小的,更具体的问题将有更好的机会得到解答。