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

如何将数据库与微服务(和新服务)同步?

顾英发
2023-03-14

我正在开发一个具有微服务架构的网站,每个服务都拥有一个数据库。数据库存储微服务所需的数据。

PostVideo服务都需要用户信息,所以这两个服务都订阅了NEW_USER_EVENT

当有新用户注册时,将触发NEW_USER_EVENT

一旦服务收到NEW_USER_EVENT,它们就会将传入的用户信息放入它们自己的数据库中。因此,他们可以在不询问用户服务的情况下做事。

到目前为止还不错。但问题来了:

  • 如果我要创建一个新服务呢?如何获取注册用户信息并将其放入新服务

也许我可以从现有服务中获取信息。但事件由消息传递队列 (NSQ) 推送。

如果我要从其中一个微服务复制数据,如何确保哪个服务具有最新的用户信息?(因为某些服务没有收到最新的事件)

阅读更多:

微服务最难的部分:你的数据

微服务简介,第4部分:依赖关系和数据共享

共有1个答案

秦凯旋
2023-03-14

如果我要创建新服务,该怎么办?如何获取注册用户信息并将其放入新服务中?

您必须从一开始就重播订阅此新服务的所有事件(您应该有一个“事件存储”来保存应用程序中已经发生的所有事件)。此外,在重播事件时,您可以通过从最近的事件开始并回到过去来放置更智能的逻辑。这样,您将能够首先恢复最有价值的数据。请注意正确处理相互依赖的事件。

数据源:事件由消息队列(NSQ)推送,如果我要从一个微服务中复制数据,我如何确保复制源有最新的用户信息?

你说的不是做备份吧?

除了备份之外,在事件驱动的系统中,人们通常不会以经典的方式逐行复制数据。相反,它们只是从一开始就重播事件存储中的事件,并将这些事件提供给新服务(或新实例)的事件处理程序。因此,新服务最终与系统的其他部分保持一致。

 类似资料:
  • 我读过萨姆·纽曼的《微服务》一书,在关于分裂整体的一章中,他举了一个“打破外键关系”的例子,他承认跨API进行连接会更慢--但他接着说,如果你的应用程序足够快,它比以前慢有关系吗? 这似乎有点油嘴滑舌?人的经历是什么?您使用了哪些技术来使API联接执行得令人满意?

  • 如果一个微服务只知道它自己的领域,但是有一个数据流需要多个服务以某种方式交互,那该怎么做呢? 假设我们有这样的东西: 为论证起见,假设一个订单发货后,就应该创建发票。 我确实知道这可以被认为是高度基于意见的。但它也有具体的一面,因为微服务不应该做上述的事情。因此,必须有一个“根据定义它应该做什么”,这不是基于意见的。 开枪啊。

  • 问题内容: 我已经使用sqlite3在xcode中创建了一个应用程序。我想创建一个名为sync的按钮以与服务器中的mysql数据库进行同步。关于同步过程有什么建议吗?请告诉我。 问题答案: 在服务器上使用Web服务返回架构版本号和上次更新的时间戳记。如果客户端已过时,它将再次调用以获取更新的架构和/或新数据。

  • 问题内容: 我需要每周将一个大型(3GB + / 40+个表)本地MySQL数据库同步到服务器数据库。这两个数据库完全相同。本地数据库会不断更新,每周大约需要用本地数据更新服务器数据库。您可以将其称为“镜像数据库”或“主服务器/主服务器”,但是我不确定这是否正确。 现在,数据库仅在本地存在。所以: 1)首先,我需要将数据库从本地复制到服务器。由于数据库大小和PHPMyAdmin的限制,使用PHPM

  • 我读了一些文章,看了一些视频,但在为这些微服务提供服务方面,没有找到具体的建议。我的理解是,他们应该使用自己的应用程序服务器。 我的问题是它们应该部署在不同的服务器上,还是没关系。 当它们在同一台服务器(计算机)上提供服务时,不会有端口冲突吗?

  • 我刚刚开始将我的项目分离到小微服务中。我有一个处理 API 授权的微服务(检查 API 请求中提供的 apiKey 是否有效),因此为此,我有一个单独的 API 授权数据库,其中包含下表和以下架构: APIKey: ApiKey (VARCHAR, PK) TenantID (INT, FK) 租户:租户ID(INT, PK)名称(VARCHAR) 如您所见,APIKey表链接到租户表。 我有另一