@artemko

Интеграция данных в распределенном веб-приложении PHP+Mysql

Есть веб-приложение (PHP+Mysql), которое необходимо доработать с целью работы в распределённом режиме. Доработка подразумевает объединение нескольких копий приложения и выделение в них одного центрального приложения.

Цель доработки:
• централизованный сбор статистики, данных мониторинга с дочерних приложений
• реализация бронирования на дочернем приложении через центральное приложение
• управление определённым набором сущностей (справочников) в дочернем приложении через центральное приложение.

С точки зрения кода и функциональности центральное и дочерние приложения являются полностью идентичными. СУБД приложения имеет следующие перечень сущностей:

SnimokPNG_8957819_10428358.png

Репликация других сущностей может быть реализована при необходимости аналогичным образом, часть сущностей БД не требует репликации.

Структура таблиц в различных установках приложения, как правило, будет идентичной, но может иметь не значительные отличия (Одно из приложений обновлено до более новой версии, а другие еще нет).

Содержание таблиц на дочернем и центральном приложении не идентично, например, таблицы статистики центральном сервере содержат все данные с дочерних серверов, а на дочерних серверах только свою статистику.

Каждое из дочерних приложений должно взаимодействовать только с центральным сервером. Взаимодействие дочерний-дочерний невозможно. Взаимодействие центральный дочерний под вопросом.
Дочерним приложениям известен IP адрес центрального сервера, а IP адрес дочерних приложений для центрального сервера может быть не известен или не доступен. Предпочтительный протокол взаимодействия HTTP.

Окружение: CentOS 6.4, PHP 5 и выше, Mysql или MariaDb

Взаимодействие приложений (репликация) должно быть реализовано в асинхронном режиме. Максимально допустимая задержка при репликации некоторых сущностей (Броней) не может превышать 10-20 секунд.

Приложения должны штатно отрабатывать ситуацию потери связи с центральным приложением и после ее возобновления обмениваться только изменениями, которые произошли с момента потери связи.
Для решения задачи планируем написать веб-сервис для приложения с методами get и update (по необходимости) для каждой сущности.

При добавлении или изменении данных в дочернем приложении оно в фоновом режиме делает их update на центральном приложении.

Дочернее приложение периодически опрашивает путем вызова метода get по каждой сущности центральное приложение, при наличии изменений центральное приложение отдает изменившееся записи.

Есть ли какие-либо готовые решения для реализации этой функциональности в части интеграции данных между таблицами mysql c пред настроенными условиями? Есть ли более рациональное решение данной задачи?

Заранее большое Спасибо.
  • Вопрос задан
  • 3166 просмотров
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега PHP
♬♬
Репликация MySQL вполне вписывается в описанный сценарий, за исключением несовпадения структуры таблиц из-за разности версий: все копии БД должны быть идентичны. Асинхронность ОК.

Придется только озадачиться обработкой восстановления синхронизации после серьезных сбоев на дочерних узлах: выкачивать копию с центрального (master), полностью заменять ей бд в дочке (slave), перезапускать slave.

И важный момент — локальные изменения должны писаться сразу на центральный сервер, локальный – read only.

Подобная схема реализуется например для WordPress с помощью HyperDB.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы