Открыть сервисСервис

Снапшот — технология снимков состояния

Снапшот (от англ. snapshot — «снимок») — термин, обозначающий точную копию состояния системы, данных или объекта в определённый момент времени. В информационных технологиях снапшоты применяются для резервного копирования, виртуализации, управления базами данных и контроля версий. Ключевая особенность снапшота — возможность быстрого восстановления сохранённого состояния без повторного создания полной копии данных.

Снапшот в файловых системах и хранении данных

В системах хранения снапшот — это механизм создания неизменяемых копий набора данных. Наиболее распространённая технология — copy-on-write («копирование при записи»): при создании снапшота данные физически не дублируются, а фиксируется ссылка на исходное состояние. При последующем изменении исходные данные сохраняются отдельно, что позволяет восстановить снимок в исходном виде.

Снапшоты файловых систем поддерживаются в ZFS, Btrfs, ReiserFS, а также в коммерческих системах хранения — NetApp ONTAP, Dell EMC. В Linux механизм снапшотов LVM (Logical Volume Manager) позволяет создавать снимки логических томов для резервного копирования работающих файловых систем без остановки сервисов.

Снапшот в виртуализации

В виртуализации снапшот фиксирует состояние виртуальной машины: содержимое оперативной памяти, состояние виртуальных дисков, конфигурацию устройства. После создания снапшота дальнейшие изменения записываются в отдельный дельта-файл (overlay), что позволяет вернуть машину в сохранённое состояние за секунды.

Технология активно используется в гипервизорах VMware ESXi, Microsoft Hyper-V, KVM, а также в продуктах для настольной виртуализации — VirtualBox, VMware Workstation. Снапшоты применяются при тестировании программного обеспечения, разворачивании однотипных виртуальных машин и перед установкой обновлений.

Снапшот в базах данных

В СУБД снапшот — это согласованный набор данных на определённый момент. В Oracle Database механизм Flashback Snapshot позволяет читать данные в их состоянии на прошлый момент времени. В Microsoft SQL Server снапшоты реализованы через механизм database snapshot для целей отчётов и резервного копирования.

В распределённых базах данных снапшоты обеспечивают механизм репликации: каждая реплика отражает состояние основной базы на момент снимка. Термин также используется в контексте MVCC (Multi-Version Concurrency Control), где снапшот — это вид данных, доступный конкретной транзакции.

Снапшот в системах контроля версий

В системах контроля версий (Git, Mercurial, Subversion) снапшот — это зафиксированное состояние рабочего дерева файлов. В Git каждый коммит фактически является снапшотом проекта: содержимое всех отслеживаемых файлов сохраняется в объектном хранилище с уникальным хешем. Это отличает Git от систем, использующих дельта-модель (Subversion), где хранятся только изменения между версиями.

Снапшот в облачных технологиях

Облачные провайдеры — Amazon Web Services, Яндекс Облако, Selectel — предоставляют снапшоты виртуальных машин и дисков как штатный механизм резервного копирования. Снимок создаётся в фоновом режиме, не останавливая работающую машину. В AWS снапшоты EBS хранятся в S3 с дедупликацией и построчным сжатием, что снижает стоимость хранения.

Снапшот в контейнеризации

В Docker снапшоты реализованы через систему слоёв образов: каждый слой образа — это снимок изменений файловой системы относительно предыдущего слоя. Технология overlayfs объединяет слои в единое виртуальное представление. В контейнерных платформах Kubernetes снапшоты дисков реализуются через CSI (Container Storage Interface) и используются для бэкапов Persistent Volume.

Снапшот в распределённых системах

В распределённых системах снапшоты применяются для координации и отказоустойчивости. Алгоритм Чанды-Лампорта позволяет создавать согласованные снимки состояния распределённого процесса без остановки вычислений. Технология нашла применение в системах обработки потоковых данных — Apache Flink, Apache Kafka Streams, — где снапшот обеспечивает гарантию exactly-once при восстановлении после сбоя.

Отличие снапшота от резервной копии

Снапшот и резервная копия часто отождествляются, но это разные понятия. Резервная копия — это независимый набор данных, сохранённый в отдельном хранилище. Снапшот, как правило, зависит от исходной системы: при выходе из строя носителя снапшоты на этом носителе утрачиваются. Для полноценной защиты данных снапшоты дополняются выгрузкой в отдельное хранилище.

Применение

Снапшоты используются в следующих областях:

  • Резервное копирование — регулярные снимки состояния систем и данных;
  • Тестирование — создание изолированной среды с возможностью отката;
  • Развёртывание — клонирование однотипных виртуальных машин;
  • Аудит — фиксация состояния на момент инцидента;
  • Аналитика — чтение данных без влияния на работающую систему.

Источники:

  • Таненбаум Э., Бос Х. Современные операционные системы
  • Чанди М., Лампорт Л. Distributed Snapshots: Determining Global States of Distributed Systems
  • Документация Oracle Database, Microsoft SQL Server, VMware vSphere
  • Документация ZFS, Btrfs, LVM (The Linux Documentation Project)
  • Документация Git, Docker, Kubernetes
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru