Базы данных: Репликация и шардирование

7 вопросов

1 Что такое репликация БД? Зачем нужна?

Репликация - копирование данных с одного сервера (master/primary) на другие (replicas/secondaries). Цели: отказоустойчивость (failover), масштабирование чтения (read scaling), географическое распределение. Запись обычно на primary; чтение можно распределять по репликам. Реплики могут быть синхронными или асинхронными.

Открыть отдельно →
2 Синхронная vs асинхронная репликация?

Синхронная - primary ждет подтверждения от реплики перед коммитом. Гарантирует, что при падении primary данные есть на реплике. Минус: задержка записи, при недоступности реплики запись блокируется. Асинхронная - primary не ждет; реплика догоняет. Меньше задержка записи, но при падении primary возможна потеря последних данных (replication lag). Для большинства сценариев используют асинхронную с приемлемым RPO.

Открыть отдельно →
3 Логическая vs физическая репликация?

Физическая - копируются блоки данных (WAL в PostgreSQL). Реплика идентична побайтово. Быстрее, но версия СУБД должна совпадать. Логическая - реплицируются логические изменения (INSERT/UPDATE/DELETE). Можно реплицировать выборочно (таблицы, строки), в другую СУБД или в очередь. PostgreSQL logical replication, MySQL binlog row format. Гибкость в обмене данными между системами.

Открыть отдельно →
4 Что такое шардирование (sharding)?

Горизонтальное разделение данных: строки одной логической таблицы распределяются по разным узлам (шардам) по ключу шардирования (user_id, region, hash(id)). Каждый шард - отдельная БД. Цель - масштабирование записи и объема данных. Минусы: сложность запросов по нескольким шардам, перебалансировка, транзакции и JOIN между шардами затруднены. Применяют когда один узел не справляется с объемом или нагрузкой.

Открыть отдельно →
5 Шардирование vs партиционирование?

Партиционирование - логическая таблица разделена на партиции внутри одной СУБД (один сервер). Запросы с условием по ключу партиционирования обращаются только к нужным партициям. Упрощает архивацию и удаление. Шардирование - данные на разных серверах (разные инстансы БД). Масштабирование по объему и нагрузке. Партиционирование не решает лимит одного сервера; шардирование усложняет операции и администрирование.

Открыть отдельно →
6 Что такое consistent hashing?

Способ распределения ключей по узлам так, что при добавлении или удалении узла перераспределяется минимум ключей. Обычный hash(key) % N при изменении N инвалидирует почти все ключи. Consistent hashing: ключи и узлы размещаются на кольце (hash space); ключ принадлежит следующему узлу по часовой стрелке. При добавлении узла только соседние ключи переезжают. Используется в распределенных кешах (Memcached), шардировании, CDN.

Открыть отдельно →
7 Что такое split-brain при репликации?

Ситуация, когда после разрыва связи оба узла (или группы) считают себя primary и принимают записи. При восстановлении связи данные расходятся, возможны конфликты и потеря. Предотвращение: quorum, единственный arbiter (судья), fencing (отключение старого primary при смене). Решения: PostgreSQL с Patroni/etcd, MySQL Group Replication, ручной failover с проверкой. Важно иметь только один писатель в момент времени.

Открыть отдельно →
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.