首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使两个web应用程序的数据库保持同步?

如何使两个web应用程序的数据库保持同步?
EN

Stack Overflow用户
提问于 2018-05-13 04:23:49
回答 2查看 187关注 0票数 2

我有两个网络应用,每个都有自己的后端微服务,每个微服务都有自己的数据库。对于microservice1数据库表中的任何更改,我希望更改(创建/更新) microservice 2数据库表中的条目。

上下文:

Webapp 1:为人力资源协调员安排面试的 UI。

微服务1:安排面试的后端服务。

数据库用于微服务1:存储与面试候选人有关的信息。

代码语言:javascript
运行
复制
  interviews: [ {
      "interviewId": "1",
      "candidateId": "abc",
      "interviewers": [
      {
         "interviewer_name": "Thor",
         "schedule": {
            "startTime": "",
            "endTime": "",
            "roomNumber": 101
         }
      },
      {
         "interviewer_name": "Loki",
         "schedule": {
            "startTime": "",
            "endTime": "",
            "roomNumber": 101
         }
      }
   ]
} ]

Webapp 2:用户界面,让面试官在面试中协调提问。

微服务2:为面试官提供后端服务,以协调问题选择。也就是说,每个面试官都会在面试中从应聘者那里选择他/她要问的问题(这是为了确保不会有两个面试官最终从一个候选人那里问同样的问题)。

用于微服务的DB 2:模式

// QuestionBank :包含问题的表,面试官可以选择。

//面试官:包含公司所有面试官的表格。

// InterviewToInterviewer:(与面试官的访谈有很多次)。一次面试可以有很多面试官,每个面试官可以参加很多次面试。

// InterviewToInterviewerToQuestion:(许多到许多问题映射interviewToInterviewers )。对于每一次面试,面试官可以选择许多问题,而提问库中的每一个问题都可能是许多interviewToInterviewer条目的一部分。

当前工作流:

一旦webapp1安排了面试:

  1. 一封电子邮件发送给所有的面试官。电子邮件包含一个指向webapp 2的链接,点击这个链接会打开webapp2,为面试官提供一个界面,让他们在面试中选择要问的问题。

要求:

  1. 如果问题不是面试官选择的,那么我想给他们发提醒。为此,我想让webapp2知道面试已经安排好了。
  2. 我想让webapp2知道发生的任何阵容变化(在给定的面试中,面试官被改变或者面试被取消等)。

我想出的解决办法:

  1. 一旦从webapp1中安排/更改了面试,webapp1将调用webapp2 (webapp2公开了一个API ),让webapp2知道创建了一个新的面试或更新了一个现有的面试。
  2. 对于DB1中面试表中的任何新条目/更新,将向DB2启动DB触发器。我不知道这是否也有可能。

在以上两种方法中,有人可以帮助我了解一种选择而不是另一种方法的利弊。或者还有其他替代方法来实现这一目标。

这里的线索很受欢迎。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-13 07:03:18

不要使这两个服务紧密耦合,如果第二个服务依赖任何其他服务,您可能会面临延迟。如果第二次发球还没结束呢。因此,在这里尝试使用消息队列。让您的第一个服务发布采访事件,可以处于状态(新的,取消等,以及其他细节采访id,面试官等)。做第二次服务去听它。正如您所说的,面试请求发送给多个interviewers.Configure --第二服务中的提醒作业/调度程序,并在数据存储中进行配置,包括:面试官id、面试id、时间范围等,以便您可以轻松地向面试官发送提醒。这应该对你有帮助。如果我没有正确回答你的问题,请告诉我。Microservices使用变更事件来获得给定系统中的数据一致性。

票数 2
EN

Stack Overflow用户

发布于 2018-05-13 07:03:42

上述两种方法都是可行的。

  1. 在第一种方法中,您需要考虑使用观察者设计模式的设计,其中面试计划程序(webapp1)是webapp2中的观察者订阅的主题。这将是即时的,因为面试调度程序将立即通知其他webapp应用程序有关面试的日程安排。您可以在webapp 2中有一个服务端点,以便在安排面试时由webapp1调用通知目的。这种方法的缺点将是在这两个The应用程序上进行额外的编程工作。
  2. 该解决方案在许多数据库中是可行的,并将取决于您使用的是哪个数据库。但是,根据我的理解,你将面临的麻烦是它不是一个通知。即使触发器更新数据库,也不会通知任何人数据库已更改。无论如何,您都需要实现一个侦听器,以便webapp2知道数据库中是否有一些更改。

这不是你所希望的确切解决方案,但我想它将有助于你深入研究可能的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50312750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档