digital-garden/dev/architecture/highload/Асинхронная репликация.md

6.0 KiB
Raw Permalink Blame History

aliases tags date zero-link parents linked
maturity/🌱
2024-06-07
../../../meta/zero/00 HighLoad
Репликация БД
Синхронная репликация
Полу-синхронная репликация

Изменения записываются на master и пересылаются на slaves с некоторой задержкой. Этот метод отличается от синхронной репликации тем, что подтверждение транзакции возвращается клиенту до того, как изменения применены на всех репликах, что позволяет улучшить производительность, но может привести к несогласованности данных.

Быстро, но не надежно. Возможно используется по умолчанию. Реализовано в MySQL, PostgreSQL

Схема выполнения на MySQL.

Как работает

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

Преимущества

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

Минусы

  • Потеря данных при сбое: Если master выходит из строя до пересылки изменений на реплики, данные могут быть потеряны. Это может привести к несогласованности данных и необходимости восстановления системы.
  • Отставание реплики БД: Задержка в применении изменений на репликах может привести к отставанию реплик от master, что может затруднить выполнение некоторых операций, требующих актуальных данных.
  • Проблемы с консистентностью данных: Каждая реплика может отставать по разному, из-за этого данные могут быть несогласованными между репликами. Например, пользователь может получить разные результаты для одного и того же запроса.

Примеры использования

Асинхронная репликация широко используется в системах, где высокая производительность и низкое время отклика имеют приоритет над полной консистентностью данных. Например, в системах аналитики и отчетности, где задержки в обновлении данных не критичны, асинхронная репликация позволяет эффективно распределять нагрузку и использовать реплики для выполнения сложных запросов, не влияя на производительность основного сервера.


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

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

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

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