Как устроена схема репликации в базе данных
Что проверяют
Понимаете ли вы, зачем нужна репликация и чем за неё платят. Различить репликацию и шардирование, синхронный и асинхронный режим тут важнее, чем знать конкретные команды PostgreSQL.
Как отвечать
Скажите коротко о цели: репликация это копии данных на других узлах ради отказоустойчивости и разгрузки чтения. Место для данных она не добавляет, за это отвечает шардирование, и путать их нельзя.
Дальше по схемам:
- лидер и реплики: запись идёт в один узел, изменения расходятся на реплики, чтение можно снимать с них. Самая распространённая схема;
- несколько лидеров: запись в разные узлы, обычно между дата-центрами. Приносит конфликты записи и необходимость правил их разрешения;
- без лидера (кворум): запись и чтение по нескольким узлам с условием вида
W + R > N, как в Cassandra.
Отдельно про режим доставки. Синхронная репликация подтверждает запись только после того, как реплика её приняла: потери данных нет, зато каждая транзакция ждёт сеть. Асинхронная быстрее, но при падении лидера теряется хвост незавезённых изменений. Реальный компромисс это одна синхронная реплика и несколько асинхронных.
Полезно назвать способы передачи: физическая репликация переносит журнал (WAL) байт в байт, копия идентична и годится под горячее резервирование; логическая передаёт изменения строк, позволяет реплицировать отдельные таблицы и работает между разными версиями.
Закончите практикой: лаг реплики измеряется и мониторится, чтение с отстающей реплики даёт эффект «сохранил и не увидел своё изменение», поэтому после записи читают с лидера. Про переключение при отказе скажите, что оно должно быть управляемым, автоматический failover без защиты приводит к двум лидерам сразу.
Где спотыкаются
Считают, что репликация заменяет резервные копии. Ошибочный DELETE доедет до всех реплик за секунду, а бэкап позволит откатиться.
Забывают про лаг и отдают пользователю устаревшие данные сразу после его же записи.
Смешивают репликацию с шардированием и обещают ростом числа реплик ускорить запись. Запись быстрее не станет, реплики её только повторяют.