Ответ
Репликация — это процесс копирования данных с одного сервера (primary/master) на один или несколько других (replica/slave). Основные цели и сценарии:
- Повышение доступности и отказоустойчивости. При сбое primary-узла одна из реплик может стать новой primary (failover).
- Масштабирование чтения (read scaling). Реплики обслуживают запросы на чтение, разгружая primary-узел, который занимается записями.
- Географическое распределение. Размещение реплик в разных регионах уменьшает задержку (latency) для локальных пользователей.
- Резервное копирование. Реплика может использоваться для создания бэкапов без нагрузки на primary.
Пример настройки репликации в Spring Boot (application.yml):
spring:
datasource:
url: jdbc:mysql://primary-host:3306/db
username: user
password: pass
hikari:
read-only: false
datasource:
replica:
url: jdbc:mysql://replica-host:3306/db
username: user
password: pass
hikari:
read-only: true
Типы репликации:
- Синхронная: Данные записываются на primary и все реплики перед подтверждением клиенту. Гарантирует консистентность, но снижает производительность.
- Асинхронная: Primary подтверждает запись клиенту до того, как данные скопируются на реплики. Выше производительность, но возможна потеря данных при сбое и репликационный лаг (replication lag).
Ключевой компромисс: Теорема CAP — между консистентностью (Consistency) и доступностью (Availability) в случае сетевого раздела (Partition). Репликационный лаг может привести к чтению устаревших данных.