Что такое репликация баз данных и зачем она нужна?

Ответ

Репликация — это процесс создания и синхронизации нескольких копий (реплик) одной и той же базы данных на разных серверах. Основная копия называется master (или primary), а остальные — slave (или replica).

Основные цели репликации:


  1. Отказоустойчивость (High Availability): Если основной сервер (master) выходит из строя, система может автоматически переключиться на одну из реплик, минимизируя или полностью исключая простой в работе сервиса.



  2. Масштабирование нагрузки (Scale-out): Нагрузку можно распределить между серверами. Как правило, все запросы на запись (INSERT, UPDATE, DELETE) отправляются на master-сервер, а запросы на чтение (SELECT) распределяются между несколькими slave-серверами. Это значительно повышает общую производительность системы.



  3. Уменьшение задержек (Low Latency): Реплики можно размещать в разных географических регионах. Пользователи будут обращаться к ближайшему серверу, что сокращает время отклика.


Типы репликации:

  • Асинхронная: Master-сервер записывает изменения и немедленно отвечает клиенту, а затем отправляет обновления на реплики. Это быстро, но есть риск потери данных, если master упадет до того, как данные будут скопированы.
  • Синхронная: Master-сервер ждет подтверждения от одной или нескольких реплик, что данные были записаны, и только после этого отвечает клиенту. Это надежно, но увеличивает задержку на запись.

Как это используется в приложении на Go:

Вместо прямого указания хоста реплики в коде, как правило, используют более гибкие подходы:

  • Два пула соединений: Приложение настраивает два источника данных (Data Sources):
    • Один для записи, который всегда указывает на master-сервер.
    • Второй для чтения, который является балансировщиком нагрузки между всеми slave-серверами.
  • Прокси-сервер: Используется специальный прокси (например, ProxySQL), который автоматически направляет запросы на запись и чтение на нужные серверы. Приложение подключается только к прокси.

Важный аспект: При асинхронной репликации возникает лаг репликации — небольшая задержка, из-за которой данные на реплике могут быть неактуальными. Это нужно учитывать при проектировании системы.