Открыть сервис

Read Replicas

Read Replica (читаемая реплика, реплика для чтения) — это копия базы данных, которая синхронизируется с основной (первичной) базой данных и предназначена исключительно для обработки запросов на чтение (SELECT). Read Replica является одним из ключевых механизмов масштабирования систем управления базами данных (СУБД), позволяя снизить нагрузку на основной сервер за счёт распределения операций чтения между несколькими узлами.

Принцип работы

Read Replica создаётся на основе технологии репликации, при которой изменения, внесённые в основную базу данных (мастер-узел), асинхронно или синхронно передаются на одну или несколько реплик. В большинстве современных СУБД (PostgreSQL, MySQL, MariaDB, Oracle, SQL Server) используется асинхронная репликация: мастер сначала фиксирует транзакцию, а затем отправляет журнал изменений (WAL — Write-Ahead Log, бинарный лог) на реплику. Это позволяет мастеру не ждать подтверждения от реплики, что повышает производительность записи, но создаёт риск небольшой задержки (лаг репликации) между моментом записи на мастер и моментом, когда данные становятся доступны на реплике.

При синхронной репликации мастер ожидает подтверждения от реплики о том, что данные записаны, прежде чем завершить транзакцию. Это гарантирует полную актуальность данных на реплике, но снижает пропускную способность записи. Синхронные реплики часто используются для обеспечения высокой доступности (High Availability), а не для масштабирования чтения.

Read Replica не принимает запросы на запись (INSERT, UPDATE, DELETE). Попытка выполнить запись на реплику приводит к ошибке, так как реплика работает в режиме «только чтение» (read-only). Это жёсткое ограничение является принципиальным: если бы реплика могла изменять данные, то при синхронизации с мастером возникли бы конфликты, нарушающие целостность базы данных.

Классификация Read Replicas

Read Replicas можно классифицировать по нескольким признакам:

По способу репликации

  • Асинхронные — наиболее распространённый тип. Обеспечивают максимальную производительность записи на мастер, но допускают временную рассинхронизацию (лаг до нескольких секунд или минут при высокой нагрузке).
  • Синхронные — гарантируют актуальность данных на реплике, но замедляют запись на мастер. Используются в системах, где потеря данных недопустима (финансовые транзакции, критическая инфраструктура).
  • Полусинхронные — компромиссный вариант: мастер ждёт подтверждения хотя бы от одной реплики, но не от всех.

По географическому расположению

  • Локальные — размещаются в том же дата-центре или регионе, что и мастер. Обеспечивают минимальную задержку (latency) для клиентов, находящихся рядом.
  • Глобальные (кросс-региональные) — располагаются в разных географических регионах. Используются для обслуживания пользователей по всему миру с низкой задержкой и для обеспечения отказоустойчивости в случае сбоя целого региона.

По типу СУБД

  • Реляционные — PostgreSQL, MySQL, MariaDB, Oracle, SQL Server. Для каждой из этих СУБД существуют свои механизмы репликации (например, потоковая репликация в PostgreSQL, Group Replication в MySQL).
  • NoSQLMongoDB (реплика-сет), Cassandra (репликация на уровне кластера), Redis (репликация с помощью Redis Sentinel или Redis Cluster). В NoSQL-системах концепция Read Replica часто встроена в архитектуру кластера.

Применение

Read Replicas широко используются в веб-приложениях, где нагрузка на чтение значительно превышает нагрузку на запись (типичное соотношение — 80% чтения, 20% записи). Основные сценарии применения:

  • Разгрузка основного сервера: все операции SELECT направляются на реплики, а мастер обрабатывает только запись. Это позволяет избежать перегрузки мастера и увеличить общую пропускную способность системы.
  • Геораспределённые приложения: пользователи из разных регионов подключаются к ближайшей реплике, что снижает время отклика (latency). Например, приложение с пользователями в Европе и Азии может иметь мастер в Европе и реплику в Азии.
  • Аналитика и отчёты: сложные аналитические запросы (OLAP), которые могут выполняться десятки минут, направляются на реплику, чтобы не замедлять работу основного приложения (OLTP).
  • Отказоустойчивость: при выходе из строя мастера одна из реплик может быть повышена до роли нового мастера (ручное или автоматическое переключениеfailover). В этом случае реплика временно перестаёт быть read-only и начинает принимать запись.
  • Резервное копирование: реплика может использоваться для создания резервных копий без блокировки основного сервера.

Преимущества и недостатки

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

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

Недостатки

  • Задержка данных (лаг): при асинхронной репликации пользователь может увидеть устаревшие данные. Это критично для приложений, где требуется строгая консистентность (например, банковские переводы).
  • Сложность управления: необходимо настраивать мониторинг лага, автоматическое переключение при сбое, балансировку запросов между репликами.
  • Повышенная стоимость: аренда или обслуживание дополнительных серверов увеличивает расходы.
  • Ограничение на запись: реплики не могут принимать запись, что делает архитектуру непригодной для систем с высокой долей операций записи.

Примеры реализации

PostgreSQL

В PostgreSQL реализована потоковая репликация (streaming replication). Мастер передаёт журнал предзаписи (WAL) на реплику через TCP-соединение. Реплика работает в режиме hot standby, позволяя выполнять запросы на чтение. Для синхронной репликации используется параметр synchronous_standby_names.

MySQL

MySQL поддерживает несколько механизмов: асинхронную репликацию на основе бинарного лога (binlog), полусинхронную репликацию (плагин semisync) и Group Replication (синхронная репликация на уровне группы). В MySQL 8.0 появилась поддержка InnoDB Cluster, который автоматизирует управление репликами и failover.

Облачные провайдеры

Крупные облачные платформы предлагают Read Replicas как управляемый сервис:

  • Amazon RDS — позволяет создавать до 15 реплик для MySQL, PostgreSQL, MariaDB, Oracle. Реплики могут быть кросс-региональными.
  • Google Cloud SQL — поддерживает до 10 реплик для MySQL и PostgreSQL, включая кросс-региональные.
  • Yandex Managed Service for PostgreSQL — предоставляет возможность создания до 10 реплик с автоматическим мониторингом лага.

Критика и ограничения

Read Replicas не решают проблему масштабирования записи. Если нагрузка на запись растёт, добавление реплик не помогает — мастер остаётся узким местом. В таких случаях применяют шардирование (сегментирование) базы данных, когда данные распределяются между несколькими независимыми мастер-узлами.

Другая проблема — консистентность в конечном счёте (eventual consistency). В системах, где критична актуальность данных (например, торговые площадки с реальным временем), использование асинхронных реплик может приводить к ошибкам. Для решения этой проблемы применяют «чтение с мастера» (read-your-writes consistency) — после записи пользователь направляется на мастер, а не на реплику.

Источники

  • PostgreSQL Documentation: Chapter 26. High Availability, Load Balancing, and Replication
  • MySQL 8.0 Reference Manual: Chapter 17. Replication
  • Amazon RDS User Guide: Working with Read Replicas
  • Google Cloud SQL Documentation: Configuring Read Replicas
  • «Database Internals» by Alex Petrov (O'Reilly Media, 2019)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →