Каковы преимущества и недостатки логической репликации в PostgreSQL?

«Каковы преимущества и недостатки логической репликации в PostgreSQL?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Логическая репликация в PostgreSQL основана на репликации изменений на уровне отдельных записей (INSERT, UPDATE, DELETE), а не на физических блоках данных. Это открывает специфические возможности.

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

  1. Гранулярный контроль: Можно реплицировать не всю базу, а конкретные таблицы или даже части таблиц (с помощью публикаций/подписок). Это снижает нагрузку на сеть и дисковое пространство на реплике.

    -- На primary создаем публикацию только для нужных таблиц
    CREATE PUBLICATION sales_publication FOR TABLE invoices, customers WHERE (region = 'EU');
  2. Обновление мажорных версий: Поскольку реплика логическая, реплика может работать на более новой мажорной версии PostgreSQL (например, primary на 14, replica на 15). Это основной метод бесшовного обновления версий.

  3. Трансформация данных и мультимастер: Можно направлять данные в разные схемы или таблицы на реплике, агрегировать их. Существуют сторонние решения (например, pglogical, BDR) для построения multi-master топологий на основе логической репликации.

  4. Селективная репликация для отчетов: Можно создать реплику только с подмножеством данных для аналитических запросов, разгрузив primary.

Недостатки и ограничения:

  1. Нет репликации DDL: Команды изменения схемы (CREATE/ALTER/DROP TABLE) не реплицируются автоматически. Их нужно применять на всех узлах согласованно, что усложняет управление.
  2. Большая нагрузка на CPU: Декодирование WAL в логический поток (с помощью логического декодирования, output plugin) и применение отдельных строковых операций на реплике создает большую нагрузку, чем простая пересылка бинарных WAL-файлов при физической репликации.
  3. Задержка (lag): При высокой частоте изменений логическая репликация может отставать сильнее, чем физическая, так как изменения применяются последовательно и могут конфликтовать.
  4. Требует первичных ключей: Для таблиц, участвующих в публикации UPDATE/DELETE, обязательно должен быть первичный ключ или реплика идентичности, чтобы однозначно идентифицировать изменяемую строку.

Выбор: Физическая репликация используется для high availability и disaster recovery (полная, бинарная копия). Логическая репликация — для гибких сценариев: обновление версий, консолидация данных, географическое распределение и отчетность.