Как синхронизировать базы данных двух веб-приложений? - PullRequest
0 голосов
/ 13 мая 2018

У меня есть два веб-приложения, каждое со своим собственным микросервисом бэкэнда, и у каждого микросервиса есть своя собственная база данных.Для любых изменений в таблицах базы данных микросервиса1, я хочу изменить (создать / обновить) записи в таблицах базы данных микросервиса 2. Как я могу это сделать?

Контекст:

Webapp 1: Пользовательский интерфейс для координаторов по персоналу для планирования интервью.

Микросервис 1: Бэкэнд-сервис, который планирует интервью.

БД для микросервиса 1: Хранит информацию, касающуюся интервью кандидата.

  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: Внутренний сервис для интервьюеров для координации выбора вопросов.т. е. каждый интервьюер выбирает, какой вопрос он / она собирается задать кандидату во время интервью (это необходимо для того, чтобы два интервьюера не задавали один и тот же вопрос кандидату).

БД для микросервиса 2: Схемы

// QuestionBank: Таблица, содержащая вопросы, которые могут выбрать интервьюеры.

// Интервьюеры: Таблица, содержащая всех интервьюеров в фирме.

//InterviewToInterviewer: (много-много картографирования интервью с интервьюерами).В одном интервью может быть много интервьюеров, и каждый интервьюер может участвовать во многих интервью.

// InterviewToInterviewerToQuestion: (сопоставление интервью со многими собеседниками с вопросами).Для каждого интервью Интервьюер может выбрать много вопросов, и каждый из вопросов в банке вопросов может быть частью многих записей интервьюToInterviewer.

Текущий рабочий процесс:

Как только запланировано интервью из веб-приложения 1:

  1. Электронное письмо отправляется всем интервьюерам.В электронном письме содержится ссылка на веб-приложение 2, при щелчке по этой ссылке открывается веб-приложение 2, предоставляющее интервьюерам интерфейс для выбора вопросов, которые они планируют задать в интервью.

Требование:

  1. Если вопросы не выбраны интервьюером, я хочу отправить им напоминания.Для этого я хочу, чтобы webapp2 знал, что интервью запланировано.

  2. Я хочу, чтобы webapp2 знал о любых изменениях в составе (в данном интервью меняется интервьюер или интервью отменяется и т. Д.), Которые происходят.

Решения, которые я обдумал:

  1. Как только интервью запланировано / изменено с webapp1, webapp1 вызовет webapp2 (webapp2 предоставляет API длячто) сообщить webapp2, что создано новое интервью или обновлено существующее интервью.

  2. Для любой новой записи / обновления в таблице интервью в DB1 триггер БД запускается в DB2.Я не уверен, возможно ли это тоже.

Из двух приведенных выше подходов кто-то может мне помочь с плюсами и минусами одного выбора перед другим.Или есть другой альтернативный подход для достижения этой цели.

Лидеры здесь приветствуются.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Оба упомянутых выше подхода являются возможными подходами.

  1. В случае 1-го подхода необходимо рассмотреть проект с использованием шаблона проектирования Observer, где планировщик интервью (webapp1) является субъектом, подписанным наблюдателями в webapp2.Это будет происходить мгновенно, поскольку планировщик собеседований немедленно сообщит другому веб-приложению о назначенных собеседованиях.У вас может быть одна конечная точка службы в веб-приложении 2 для уведомления, вызываемого веб-приложением1, как только запланировано собеседование.Недостатками этого подхода будут дополнительные усилия по программированию обоих веб-приложений.

  2. Решение возможно во многих базах данных и будет зависеть от того, какую базу данных вы используете.Но проблема, с которой вы столкнетесь, насколько я понимаю, заключается в том, что это не уведомление.Даже если триггер обновляет базу данных, никто не уведомляется об ее изменении.В любом случае вам нужно будет реализовать прослушиватель, чтобы webapp2 знал, есть ли какие-то изменения в базе данных.

Это не точное решение, на которое вы рассчитывали, но, полагаю, оно поможет вам более подробно изучить возможные решения.

0 голосов
/ 13 мая 2018

Не делайте эти два сервиса тесно связанными, вы можете столкнуться с задержкой, если 2-й сервис зависит от любого другого сервиса. Что делать, если 2-й сервис не работает. Поэтому попробуйте использовать очередь сообщений здесь. Пусть ваша первая служба опубликует событие интервью, которое может быть в статусе (новое, отмененное и т. Д. Вместе с другими подробностями идентификатора интервью, интервьюеров и т. Д.). Сделайте 2-й сервис, чтобы послушать его. Как вы сказали, запрос на собеседование направляется нескольким интервьюерам. Сконфигурируйте задание / планировщик напоминаний во 2-й службе и настройте его для этого в вашем хранилище данных с такими деталями, как: идентификатор интервьюера, идентификатор интервью, диапазон времени и т. Д., Чтобы вы могли отправлять напоминания интервьюерам. без труда. Это должно помочь вам. Дайте мне знать, если я не правильно понял ваш вопрос. Микросервисы используют событие изменения, чтобы получить согласованность данных в данной системе.

...