Есть веб-приложение (PHP+Mysql), которое необходимо доработать с целью работы в распределённом режиме. Доработка подразумевает объединение нескольких копий приложения и выделение в них одного центрального приложения.
Цель доработки:
• централизованный сбор статистики, данных мониторинга с дочерних приложений
• реализация бронирования на дочернем приложении через центральное приложение
• управление определённым набором сущностей (справочников) в дочернем приложении через центральное приложение.
С точки зрения кода и функциональности центральное и дочерние приложения являются полностью идентичными. СУБД приложения имеет следующие перечень сущностей:
Репликация других сущностей может быть реализована при необходимости аналогичным образом, часть сущностей БД не требует репликации.
Структура таблиц в различных установках приложения, как правило, будет идентичной, но может иметь не значительные отличия (Одно из приложений обновлено до более новой версии, а другие еще нет).
Содержание таблиц на дочернем и центральном приложении не идентично, например, таблицы статистики центральном сервере содержат все данные с дочерних серверов, а на дочерних серверах только свою статистику.
Каждое из дочерних приложений должно взаимодействовать только с центральным сервером. Взаимодействие дочерний-дочерний невозможно. Взаимодействие центральный дочерний под вопросом.
Дочерним приложениям известен IP адрес центрального сервера, а IP адрес дочерних приложений для центрального сервера может быть не известен или не доступен. Предпочтительный протокол взаимодействия HTTP.
Окружение: CentOS 6.4, PHP 5 и выше, Mysql или MariaDb
Взаимодействие приложений (репликация) должно быть реализовано в асинхронном режиме. Максимально допустимая задержка при репликации некоторых сущностей (Броней) не может превышать 10-20 секунд.
Приложения должны штатно отрабатывать ситуацию потери связи с центральным приложением и после ее возобновления обмениваться только изменениями, которые произошли с момента потери связи.
Для решения задачи планируем написать веб-сервис для приложения с методами get и update (по необходимости) для каждой сущности.
При добавлении или изменении данных в дочернем приложении оно в фоновом режиме делает их update на центральном приложении.
Дочернее приложение периодически опрашивает путем вызова метода get по каждой сущности центральное приложение, при наличии изменений центральное приложение отдает изменившееся записи.
Есть ли какие-либо готовые решения для реализации этой функциональности в части интеграции данных между таблицами mysql c пред настроенными условиями? Есть ли более рациональное решение данной задачи?
Заранее большое Спасибо.