Ломаю голову на счёт «ручной» master-master синхронизации, скажем, того же, MySQL.
Понятно, что есть родная master-master синхронизация на bin-log. Но у неё есть ряд существенных недостатков. Например, она тяжело поднимается после падения одного из серверов. Часто вылезают рассинхронизации и т.п. И плюс оно гвоздями прибито к MySQL. А, да, главное — как я понял, оно позволяет вести только полностью синхронные сервера. Нельзя выборочно часть таблиц синхронизировать, а часть — нет.
Поэтому давно вынашиваю такие планы.
Программа-минимум. Заводим в таблице поле, модифицируемое по изменению записи. И на каждой машине храним время последней синхронизации с другой. Если нужно, делаем запрос, дёргая все ячейки, что обновлялись с последней синхронизации на другой и ставим их на машине первой по REPLACE. Да, естественно, все autoincrement идут с шагом, равным числу синхронизируемых машин, а смещение — номер машины. Также, как в нативной мастер-мастер репликации на бинлогах.
Плюсы — очень простая реализация.
Минус пока вижу один, но очень существенный — проблема конфликтов изменений. Для основных данных обычных web-сервисов (форумы, блоги, страницы сайта) это не проблема. Вероятность того, что за период синхронизации поменяют данные и там, и там — крайне мала. Проблема лезет в часто меняющихся «автоматических» данных. Например, чисто просмотров объекта (топика форума).
Боюсь, что просто так задачу не решить. Видимо, под учёт числа просмотров нужно придумывать отдельный механизм.
Программа-максимум — пока совсем теоретизация. Делать не mysql-dump, а дамп сразу объектов (JSON/XML — не важно). И втягивать на другом сервере изменившееся сразу в объектном виде. Дополнительный плюс — появляется возможность кроссплатформенной синхронизации. Например, MySQL на одной машине и хоть MongoDB на другой. Не то, чтобы пока было актуально и не факт, что понадобится, но интересно. И механизм вообще получается универсальный, не прибитый гвоздями к бэкенду. Но минус в виде конфликта не исчезает. Зато можно указать особое поведение при синхронизации отдельных свойств объекта.
Но я пока, всё же, больше думаю о первом варианте, на простых дампах. Усложнить можно будет всегда и уже в работающей системе.
Есть мысли на этот счёт?
Даже можно конкретизировать — пока реально первый затык именно в учёте числа просмотров. Делать его в виде отдельного центрального сервера? И фиг с ним, если он упадёт, не сказать, что это критичные данные?
Похожие темы
- Форум Гента - закат солнца вручную (2012)
- Форум Управление пакетами или закат солнца вручную... (2003)
- Форум postgres + синхронизация master БД (2010)
- Форум Закат пинга вручную (2020)
- Форум NginX и балансировка в статических html — закат Солнца вручную? (2016)
- Форум Синхронизация БД (2007)
- Форум синхронизация двух БД (2021)
- Форум [android] Обновить бд мультимедии вручную (2010)
- Форум Выбор БД для удобной синхронизации (2014)
- Форум Отваливается Multi-Master синхронизация LDAP (2013)