Как работает Single-Leader Replication (Репликация с одним лидером)
(продолжение предыдущего поста)
По мере роста нагрузки на приложение на первый лан выходят такие характеристики как отказоустойчивость и надежность. И одним из способов повышения отказоустойчивости и надежности является "Репликация с одним лидером" или Single-Leader Replication. Рассмотрим, как она работает.
1. Назначение ролей узлов
В системе Single-Leader Replication:
* Один узел назначается лидером (leader) — он отвечает за обработку всех операций записи (DML-запросов: INSERT, UPDATE, DELETE).
* Остальные узлы называются последователями (followers) — они реплицируют изменения, сделанные лидером, и могут отвечать на запросы чтения.
2. Обработка операций записи (write operations)
* Все операции записи направляются исключительно на лидер.
* Лидер записывает изменения в своё локальное хранилище.
* Затем лидер распространяет изменения на все последователи — это может происходить асинхронно или синхронно:
* Асинхронная репликация: лидер сразу подтверждает успешную запись, а затем отправляет изменения последователям. Быстрее, но есть риск потери данных, если лидер выйдет из строя до отправки изменений.
* Синхронная репликация: лидер ждёт подтверждения от всех последователей, что они записали изменения, прежде чем подтвердить успешную запись. Надежнее, но медленнее.
* Также существует полусинхронная репликация, когда лидер ждёт подтверждения от заданного количества последователей.
3. Обработка операций чтения (read operations)
* Запросы на чтение могут направляться как к лидеру, так и к последователям:
* Чтение с лидера: обеспечивает строгую согласованность (strong consistency) — клиент всегда получает самые актуальные данные.
* Чтение с последователей: может привести к окончательной согласованности (eventual consistency) — данные могут быть немного устаревшими, пока последователи не обновятся. Задержка репликации может составлять от нескольких секунд до нескольких минут.
4. Отказоустойчивость (failover)
* Если лидер выходит из строя, один из последователей автоматически становится новым лидером.
* Клиенты перенастраиваются для отправки записей новому лидеру.
* Остальные последователи начинают получать изменения данных от нового лидера.
* При этом возможны проблемы:
* Если использовалась асинхронная репликация, новый лидер может не получить все записи от старого лидера.
* Возможен сценарий «split brain» (расщеплённый мозг), когда старый лидер возвращается в сеть и считает себя действующим лидером.
5. Распределение нагрузки
* Добавление новых последователей помогает распределить нагрузку на чтение — больше узлов могут отвечать на запросы чтения.
* Однако пропускная способность записи (write throughput) не увеличивается, так как все операции записи по-прежнему проходят через одного лидера.
6. Репликация изменений
* Последователи получают журнал изменений (log) от лидера и применяют их к своей локальной копии базы данных.
* Если последователь выходит из строя, он может восстановиться, запросив у лидера все изменения, произошедшие с момента последней транзакции.
7. Итоги
Single-Leader Replication обеспечивает:
* Централизованную обработку записей через одного лидера.
* Распределение нагрузки чтения между последователями.
* Отказоустойчивость за счёт автоматического повышения последователя до лидера при сбое.
* Гибкость в выборе стратегии репликации (асинхронная, синхронная, полусинхронная) в зависимости от требований к скорости и надёжности.
Post #3240
1.86K