В каких сценариях применяется репликация баз данных?

«В каких сценариях применяется репликация баз данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Репликация — это процесс копирования данных с одного сервера (primary/master) на один или несколько других (replica/slave). Основные цели и сценарии:

  1. Повышение доступности и отказоустойчивости. При сбое primary-узла одна из реплик может стать новой primary (failover).
  2. Масштабирование чтения (read scaling). Реплики обслуживают запросы на чтение, разгружая primary-узел, который занимается записями.
  3. Географическое распределение. Размещение реплик в разных регионах уменьшает задержку (latency) для локальных пользователей.
  4. Резервное копирование. Реплика может использоваться для создания бэкапов без нагрузки на 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). Репликационный лаг может привести к чтению устаревших данных.