当前位置: 首页 > 知识库问答 >
问题:

如何迁移到事件源?

宋鸿云
2023-03-14

我们正在从传统的单一应用程序迁移到微服务体系结构。我们使用CQRS和事件源模式以及消息代理(rabbitmq)作为通信机制。现在我们面临着一个挑战,即如何将旧数据库转换为新的体系结构,以及如何使用事件源进行这些转换?假设旧数据库没有事件,我们可以在不创建事件的情况下进行数据转换吗?在事件源模式中,旧数据库数据的起点是什么?

共有3个答案

陶飞英
2023-03-14

您有一个事件存储,它是事件的数据库。您可以创建旧数据库所需的事件数据,并将其插入到事件存储中。之后,进行事件重放以创建读取模型。

司寇山
2023-03-14

通过引用@alexey-zimarev在这篇文章中的回答,在事件来源数据库中拥有起始事件是至关重要的。如果不重放事件,则无法配置事件源聚合。因此,需要将遗留快照映射到相关聚合的单个域事件。

不管怎样,考虑到马丁·福勒的事件恶化定义

事件源的基本思想是确保应用程序状态的每一次更改都在事件对象中捕获,并且这些事件对象本身存储在它们应用的序列中,其生存期与应用程序状态本身相同。

因此,在不提取和存储域事件的情况下,将旧快照迁移到新快照不是合适的解决方案。它将把你的事件源项目变成半事件源项目,而不是作为设计和开发的范例。

栾弘新
2023-03-14

需要记住的一点是,许多数据库内部都有事件源:每次写入都会进入一个日志,该日志用于更新表、复制等,之后日志会被截断。它相当于事件源,有很多快照,很少保留事件和旧快照。

在这些数据库中(包括Postgres、MySQL、Oracle、SQL服务器、Cassandra、CosmosDB等,这些都是我从经验中知道的),有一种叫做更改数据捕获的技术,它本质上是访问日志并公开一个流对数据库的更改,这些更改可以被视为数据库中的事件(或者扩展为命令:“一个服务的事件是另一个服务的命令”)。Debezium可以用来向Kafka写入CDC记录;对于RabbitMQ,您可能需要自己滚动一些东西,在这种情况下,您需要了解CDC是如何在您的数据库中公开的。

即使数据库不支持CDC,如果数据没有那么大,您也可以通过定期转储其数据(如果记录带有时间戳,甚至在数据移动特别慢的情况下也可以工作)并实现跟踪更改内容的服务,将其转换为一个仿人事件流:这不会告诉您已完成的更改,但总比什么都没有好。如果您需要一个“genesis”事件,以确保您的初始状态是当前状态(当您移动到事件源或CDC时),也可能需要这种转储。

与完整的事件来源相比,这一系列广泛的技术都有局限性:具体化改变的内容不如具体化改变的内容和改变的原因更有价值。但在迁移到事件源时,它可能是一个有用的中间地带。

 类似资料:
  • 添加了一些与CLANG相关的新属性: 如何配置项目以使用Xcode12.5部署此应用程序? $React-本机信息获取系统和库信息...System:OS:macOS 11.3 CPU:(4)x64 Intel(R)Core(TM)i3-8100B CPU@3.60 GHz内存:256.45MB/8.00 GB shell:3.2.57-/bin/bash二进制文件:node:10.16.0-/u

  • 问题内容: 我很了解Java。哪些警告和资源将帮助我尽可能轻松地跨过另一端(C#)。 问题答案: 最大提示:请使用go一词中的.NET命名约定。这样,您将不断被提示使用的是哪种语言。(听起来很愚蠢,但这确实有帮助。)尽可能多地接受该语言的习惯用法。 有许多专门针对您所处地区的人们的书籍-在亚马逊上搜索“ C#for Java”,您将获得很多成功。值得 仔细 阅读以确保您不认为C#和Java中的功能

  • Angular 是使用 TypeScript 构建的,并且支持向 Angular 提供元信息的装饰器。 TypeScript 的装饰器会让语法感觉更加“自然”,尽管有可能使用 Angular 没有的功能。

  • 迁移包括以下部分: MIP 核心库迁移 将站点引用的 mip.js 和 mip.css 版本由 1.0 修改为 2.0。MIP 核心库 2.0 版本完全兼容 1.0 版本,开发者可放心升级。具体做法如下: mip.js 文件迁移 将站点中的所有如下引用: <script src="https://c.mipcdn.com/static/v1/mip.js"></script> 改为: <scrip

  • 我在雪花上做POC,探索这个产品。 我有一个问题:在SQL Server中,我们有400-500个存储过程,这些存储过程是从SSRS报告调用的。这些存储过程本质上很简单,如下所示:

  • Redux 不是一个单一的框架,而是一系列的约定和一些让他们协同工作的函数。你的 Redux 项目的主体代码甚至不需要使用 Redux 的 API,大部分时间你其实是在编写函数。 这让到 Redux 的双向迁移都非常的容易。 我们可不想把你限制得死死的! 从 Flux 项目迁移 Reducer 抓住了 Flux Store 的本质,因此,将一个 Flux 项目逐步到 Redux 是可行的,无论你使