При получении запроса от клиента master ожидает, пока все реплики получат новые данные и подтвердят их применение у себя, и только после этого сообщает клиенту, что запрос успешно выполнен. Работает надежно, но медленно.

Реализовано в PostgreSQL.

Механизм работы:

  • Подготовка транзакции в движке БД: Транзакция начинается на главном сервере (мастере), где собираются все изменения данных.
  • Запись транзакции в лог: Все изменения записываются в журнал транзакций, что обеспечивает возможность восстановления данных в случае сбоя.
  • Пересылка лога репликам: Журнал транзакций отправляется на все реплики для синхронного применения изменений.
  • Выполнение транзакций на репликах: Реплики применяют полученные изменения к своим копиям данных.
  • Завершение транзакции в движке БД: После успешного применения изменений на всех репликах транзакция завершается.
  • Возврат результата клиенту: Клиент получает подтверждение о завершении транзакции только после того, как изменения применены на всех репликах.

Плюсы:

  • Высокая надежность данных: Данные не теряются даже в случае сбоя одного из серверов, так как изменения применяются на всех репликах одновременно.
  • Консистентность данных: Обеспечивается консистентность данных на всех репликах, что исключает возможность получения различных результатов для одного и того же запроса.

Минусы:

  • Увеличенное время отклика: Поскольку подтверждение транзакции возвращается клиенту только после её завершения на всех репликах, время отклика увеличивается. Это может негативно сказаться на производительности системы, особенно при большом количестве реплик.
  • Высокая вероятность сбоев: С увеличением числа реплик общая вероятность сбоя возрастает, так как транзакция завершается только при успешном выполнении на всех репликах. Если хотя бы одна реплика не отвечает, транзакция не может быть завершена.

Мета информация

Область:: 00 HighLoad
Родитель:: Репликация БД
Источник::
Автор::
Создана:: 2024-06-07

Дополнительные материалы

Дочерние заметки