Возможно ли использовать шардирование без репликации, и какие у этого подхода последствия?

Ответ

Да, технически шардирование без репликации возможно, но на практике такой подход применяется крайне редко из-за серьезных рисков и недостатков.

Давайте четко разделим понятия:

  • Шардирование (Sharding) — это техника горизонтального разделения данных по разным независимым серверам (шардам). Основная цель — масштабирование записи и хранения данных.
  • Репликация (Replication) — это процесс создания и синхронизации копий данных (реплик). Основная цель — обеспечение отказоустойчивости и масштабирование чтения.

Сценарий "только шардирование"

В этом случае данные распределяются по шардам, но у каждого шарда нет своей копии. Если один из шардов выходит из строя, все данные на нем становятся недоступными и, скорее всего, будут утеряны.

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

  • Простота архитектуры: Нет необходимости настраивать и поддерживать сложную логику синхронизации реплик.
  • Экономия ресурсов: Не тратятся дополнительные ресурсы на хранение копий данных и трафик для их синхронизации.

Ключевые недостатки:

  • Полное отсутствие отказоустойчивости: Выход из строя одного шарда приводит к потере части данных всей системы. Это самая большая проблема.
  • Высокая сложность восстановления: Восстановление после сбоя требует сложных процедур из бэкапов (если они есть), что приводит к длительному простою.
  • Нет балансировки нагрузки на чтение: Все запросы на чтение для определенного набора данных всегда идут на один и тот же шард.

Когда это может быть оправдано?

Такой подход может использоваться для данных, потеря которых некритична:

  • Временные данные или кэши.
  • Системы сбора логов или аналитики, где потеря небольшой части данных не влияет на общую картину.
  • Задачи, где производительность записи важнее надежности.

Вывод: В большинстве производственных систем, где важна сохранность данных, шардирование используется вместе с репликацией. Например, каждый шард представляет собой кластер из нескольких реплик (например, одна master-нода и несколько slave-нод).