Что такое шардирование и репликация?
Подробный ответ
Репликация
Репликация — это механизм, при котором копия данных поддерживается на нескольких серверах. Базовый вариант:
master (primary) — узел, куда идут операции записи
INSERT/UPDATE/DELETE;replica (standby/slave) — один или несколько узлов, которые получают изменения от мастера и содержат его копию.
Основные цели репликации:
отказоустойчивость: если мастер падает, можно переключиться на реплику;
масштабирование чтения: читать можно и с реплик (read‑replicas), разгружая мастер;
геораспределение: ближе к пользователю можно держать реплику для быстрых чтений.
Важно помнить о возможной задержке репликации: данные могут появиться на реплике с небольшой задержкой относительно мастера.
Шардирование
Шардирование (sharding) — это разделение базы на несколько независимых фрагментов (шардов), каждый из которых хранится на своём сервере/кластере.
Пример: у вас есть таблица users, и вы решаете хранить пользователей с id от 1 до 1 000 000 на одном сервере, от 1 000 001 до 2 000 000 — на другом и т.д. Каждый такой диапазон — отдельный шард.
Цели шардирования:
горизонтальное масштабирование записи и хранения: данные и нагрузка распределяются между несколькими серверами;
обход ограничений одного узла по диску, памяти, CPU.
Шардирование сложнее репликации, потому что:
данные распределены, к разным шардам могут идти разные запросы;
нужно продумывать «ключ шардирования» (по какому полю делим:
user_id, регион, хэш и т.п.);сложнее делать запросы, которые затрагивают несколько шардов (глобальные агрегации,
JOINмежду шардами);менять схему шардирования потом дорого.
Как они сочетаются
Шардирование и репликация не взаимоисключают друг друга:
каждый шард может иметь свою репликацию (master + несколько replicas);
итоговая архитектура может быть: несколько шардов, и у каждого — свой набор реплик для чтения и отказоустойчивости.
Формулировка уровня middle
Репликация копирует одни и те же данные на несколько узлов, чтобы повысить доступность и масштабировать чтение. Шардирование делит данные на части и распределяет их по разным узлам, чтобы масштабировать хранение и запись. На практике часто комбинируют: шардирование по ключу и репликация внутри каждого шарда.
Оцени свой прогресс