Синхронизация нескольких баз данных между несколькими экземплярами приложений на одном централизованном сервере - PullRequest
0 голосов
/ 28 января 2019

У меня есть веб-приложение, которое работает на PHP, с базой данных в MySQL.У каждой компании есть свой локальный сервер с собственным экземпляром этого приложения (гоночные залы) и один облачный сервер с собственным экземпляром.

У меня есть таблицы, такие как Пользователи, Билеты, RaceResults.Каждая таблица имеет некоторое отношение к другим таблицам.Мне нужно сохранить пользователей, билеты в облачном экземпляре приложения и распространить их среди других экземпляров зала.RaceResults необходимо загружать только в облако.

У меня есть идея сделать это, используя следующие шаги:

  • В каждой таблице, которую я хочу получить в облаке, должен быть столбец cloud_id, запоминающий идентификатор сохраненной записив облаке.
  • Мне нужно, чтобы REST API создавался как на клиентах, так и на сервере - клиент отправляет запрос API на сервер всякий раз, когда мне нужно синхронизировать записи - облако возвращает новый идентификатор - и распространяет эти записи среди другихэкземпляры клиента, если это необходимо.
  • Каждая таблица, которую я хочу синхронизировать, имеет свои собственные отношения - которые необходимо разрешать либо на клиенте, либо на сервере - например tickets.user_id будет отличаться от экземпляра клиента - каждая из этихстолбцы необходимо изменить перед отправкой или после получения в порядке

. При таком подходе мне не нравится:

  • . Во время отладки и ошибок возникает много проблем.обработка - что если этот конкретный пользователь, указанный в тикете, не существует
  • Что произойдет, если я захочу централизованно удалить драйвер - если я удаляю его в облачной базе данных, он должен каким-то образом обрабатываться на других машинах
  • Каждая таблица, которую я синхронизирую, имеет свой собственный процесс синхронизации, собственный код для изменения полей, которые будут отправлены (например, ticket.user_id должен быть изменен на users.cloud_id перед отправкой в ​​облако)
  • Если я добавлю в стек другой экземпляр клиента (зал), янужно синхронизировать все билеты в новый зал.Когда я удаляю экземпляр клиента из синхронизированного стека, мне нужно, чтобы он был удален.Все это идет с большим количеством кода, который я должен написать для каждого конкретного случая.

Мой вопрос: есть ли какое-то рабочее решение для чего-то подобного, или я делаю это совершенно неправильно?

...