Ответ
Да, технически шардирование без репликации возможно, но на практике такой подход применяется крайне редко из-за серьезных рисков и недостатков.
Давайте четко разделим понятия:
- Шардирование (Sharding) — это техника горизонтального разделения данных по разным независимым серверам (шардам). Основная цель — масштабирование записи и хранения данных.
- Репликация (Replication) — это процесс создания и синхронизации копий данных (реплик). Основная цель — обеспечение отказоустойчивости и масштабирование чтения.
Сценарий "только шардирование"
В этом случае данные распределяются по шардам, но у каждого шарда нет своей копии. Если один из шардов выходит из строя, все данные на нем становятся недоступными и, скорее всего, будут утеряны.
Преимущества:
- Простота архитектуры: Нет необходимости настраивать и поддерживать сложную логику синхронизации реплик.
- Экономия ресурсов: Не тратятся дополнительные ресурсы на хранение копий данных и трафик для их синхронизации.
Ключевые недостатки:
- Полное отсутствие отказоустойчивости: Выход из строя одного шарда приводит к потере части данных всей системы. Это самая большая проблема.
- Высокая сложность восстановления: Восстановление после сбоя требует сложных процедур из бэкапов (если они есть), что приводит к длительному простою.
- Нет балансировки нагрузки на чтение: Все запросы на чтение для определенного набора данных всегда идут на один и тот же шард.
Когда это может быть оправдано?
Такой подход может использоваться для данных, потеря которых некритична:
- Временные данные или кэши.
- Системы сбора логов или аналитики, где потеря небольшой части данных не влияет на общую картину.
- Задачи, где производительность записи важнее надежности.
Вывод: В большинстве производственных систем, где важна сохранность данных, шардирование используется вместе с репликацией. Например, каждый шард представляет собой кластер из нескольких реплик (например, одна master-нода и несколько slave-нод).