Ответ
Репликация — это процесс создания и синхронизации копий данных на нескольких серверах (узлах). Это ключевой механизм для обеспечения отказоустойчивости, масштабируемости и снижения задержек.
Основные модели репликации:
1. Master-Slave (Ведущий-Ведомый / Primary-Secondary)
- Как работает: Все операции записи (
INSERT
,UPDATE
,DELETE
) выполняются на одном ведущем узле (Master). Эти изменения затем копируются на один или несколько ведомых узлов (Slaves). Чтение может происходить как с мастера, так и со слейвов. - Плюсы: Простота реализации, сильная консистентность при чтении с мастера, масштабирование чтения.
- Минусы: Мастер является единой точкой отказа для операций записи. Возможна задержка репликации (replication lag).
- Примеры: PostgreSQL, MySQL, Redis.
2. Multi-Master (Много-ведущая / Active-Active)
- Как работает: Любой узел в кластере может принимать операции записи. Изменения, сделанные на одном узле, синхронизируются с остальными.
- Плюсы: Высокая доступность для записи (нет единой точки отказа), низкая задержка записи для географически распределенных систем.
- Минусы: Сложность разрешения конфликтов записи (когда одни и те же данные изменяются одновременно на разных узлах).
- Примеры: Cassandra, CockroachDB, Galera Cluster для MySQL.
Синхронность репликации:
Это важная характеристика, определяющая, когда мастер считает операцию записи успешной.
Синхронная репликация: Мастер выполняет запись, отправляет изменения на реплику и ждет от нее подтверждения, что данные сохранены. Только после этого он отвечает клиенту успехом.
- Плюсы: Гарантия отсутствия потери данных при отказе мастера (высокая консистентность).
- Минусы: Увеличивает задержку операции записи.
Асинхронная репликация: Мастер выполняет запись и сразу отвечает клиенту, не дожидаясь подтверждения от реплик. Изменения отправляются в фоновом режиме.
- Плюсы: Низкая задержка записи.
- Минусы: Возможна потеря данных, которые не успели реплицироваться, если мастер выйдет из строя (replication lag).
Связь с Шардированием (Sharding)
Важно не путать репликацию с шардированием:
- Репликация — это копирование данных для отказоустойчивости.
- Шардирование — это разделение данных на части (шарды) для горизонтального масштабирования.
Часто эти подходы используются вместе: набор данных разбивается на шарды, и каждый шард реплицируется (например, по схеме Master-Slave).