Постоянное хранилище: долговременная память в эпоху контейнеров

Опубликовано: 2023-04-17

Постоянное хранилище относится к хранению данных в энергонезависимом режиме, чтобы они оставались доступными даже после выключения или перезапуска устройства или приложения. Хранение и извлечение данных позволяют веб-приложениям сохранять пользовательскую информацию и состояния и надежно работать.

В монолитных приложениях доступ к хранилищу прост, поскольку сервер и хранилище работают вместе. Однако географически распределенные системы усложняют доступ, поскольку система хранения должна оставаться доступной для всех компонентов по всему миру.

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

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

Типы постоянного хранилища

Существует несколько типов энергонезависимых хранилищ, включая традиционные вращающиеся диски (жесткие диски или жесткие диски), твердотельные накопители (SSD), сетевые хранилища (NAS) и сети хранения данных (SAN).

  • Жесткие диски — это электромеханические устройства хранения данных, которые хранят и извлекают цифровые данные с помощью вращающихся дисков магнитных носителей. В дисках используются магнитные головки на подвижном рычаге привода, которые считывают и записывают данные.
  • Твердотельные накопители , иногда называемые полупроводниковыми запоминающими устройствами, твердотельными устройствами или твердотельными дисками, используют сборки интегральных схем для постоянного хранения данных, обычно с использованием взаимосвязанных флэш-устройств, не содержащих движущихся частей. Их стационарный характер делает их более быстрыми и надежными, чем жесткие диски.
  • Сетевое хранилище — это группа жестких дисков, твердотельных накопителей или того и другого, подключенных через локальную сеть с использованием файловой системы, такой как файловая система новой технологии (NTFS) или четвертая расширенная файловая система (EXT4).
  • SAN — это сетевые высокоскоростные устройства хранения данных на уровне блоков, такие как ленточные библиотеки или дисковые массивы. Их подключение отображается для операционной системы как локальное хранилище и недоступно через локальную сеть (LAN).
Защитите свои данные во время выключения и перезапуска с постоянным хранилищем! Вот как нажмите, чтобы твитнуть

Архитектура постоянного хранилища

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

Постоянная архитектура объекта

Подход к устойчивой объектной архитектуре использует объектно-реляционное сопоставление (ORM) для хранения данных в виде объектов в реляционной базе данных или базе данных типа "ключ-значение". Этот подход полезен, когда данные не имеют определенной схемы, поскольку ORM обрабатывает их хранение и извлечение.

Блочная постоянная архитектура

Блочная постоянная архитектура использует устройства хранения на уровне блоков, которые полезны при хранении больших файлов. Этот подход удобен при хранении больших объемов данных, так как вы можете использовать несколько блоков для увеличения емкости хранилища.

Постоянная архитектура хранилища файлов

Как следует из названия, подход к постоянной архитектуре хранилища файлов использует файловую систему для хранения данных. Один метод предполагает использование серверов баз данных, которые обеспечивают централизованный способ хранения данных. Решения для облачного хостинга, такие как Kinsta, используют серверы баз данных, которые легко подключаются к приложениям и обеспечивают постоянство.

Постоянная архитектура хранилища файлов полезна в приложениях, требующих частого извлечения файлов, и когда вам нужен интерфейс для управления ими.

Варианты использования постоянного хранилища

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

Постоянное хранилище объектов

  • Облачное хранилище. Постоянное хранилище объектов обычно используется в облачных решениях для хранения и извлечения больших объемов неструктурированных данных, таких как изображения, видео и документы. Поставщики облачных услуг используют хранилище объектов, чтобы предоставлять клиентам масштабируемые, высокодоступные и надежные услуги хранения.
  • Аналитика больших данных. Постоянное хранилище объектов используется в аналитике больших данных для хранения и управления большими наборами данных, которые часто используются для анализа данных, машинного обучения и искусственного интеллекта. Хранилище объектов обеспечивает быстрый и эффективный доступ к данным, что делает его ключевым компонентом архитектуры больших данных.
  • Сети доставки контента. Постоянное хранилище объектов используется в сетях доставки контента (CDN) для хранения и распространения контента, такого как изображения, видео и статические файлы, по глобальной сети серверов. Объектное хранилище позволяет CDN доставлять высокоскоростной контент пользователям по всему миру, независимо от их местоположения.

Блокировать постоянное хранилище

  • Высокопроизводительные вычисления (HPC) : среды HPC обеспечивают быструю и эффективную обработку значительных объемов данных. Блочное постоянное хранилище позволяет кластерам высокопроизводительных вычислений хранить и извлекать большие наборы данных, например результаты научного моделирования, моделирования погоды и финансового анализа. Блочное хранилище часто предпочтительнее для высокопроизводительных вычислений, поскольку оно обеспечивает высокопроизводительный доступ к данным с малой задержкой и позволяет выполнять параллельные операции ввода-вывода (I/O), что может значительно сократить время обработки.
  • Редактирование видео. Приложения для редактирования видео требуют высокопроизводительного доступа к большим видеофайлам с малой задержкой. Они также должны обеспечивать значительное количество операций ввода-вывода в секунду и низкую задержку для рендеринга и редактирования видеофайлов в режиме реального времени. Блочное хранилище предоставляет эти возможности, что делает его идеальным решением для рабочих процессов редактирования видео.
  • Игры: игровые приложения также требуют высокой производительности и низкой задержки для доступа к игровым ресурсам и данным игроков. Блочное хранилище быстро хранит и извлекает большие объемы данных, обеспечивая быструю загрузку игровых сред и их реакцию во время игры.

Постоянное хранилище файлового хранилища

  • Медиа и развлечения: приложения для редактирования видео, анимации и рендеринга обычно используют постоянное хранилище. Этим приложениям требуется высокопроизводительный доступ с малой задержкой к большим мультимедийным файлам, таким как видео, аудио и изображения. Filestore предоставляет общую файловую систему, к которой могут обращаться несколько клиентов, что делает его идеальным решением для хранения этих приложений.
  • Управление веб-контентом: Системы управления веб-контентом (CMS) используют постоянное хранилище файлов в общих файловых системах для хранения и управления контентом веб-сайта, таким как текст, изображения и мультимедийные файлы. Хранилище файлов обеспечивает централизованное размещение содержимого веб-сайта, что упрощает управление и обновление. Это также позволяет нескольким пользователям одновременно работать над одним и тем же контентом, улучшая совместную работу и производительность.

Постоянное хранилище в контейнерах

Контейнеры легкие, портативные, безопасные и простые, предлагая сочетание различных приложений. У них должен быть механизм сохранения данных между перезапусками и удалением контейнера. Контейнеры имеют хранилище файлов или файловую систему, как и традиционные приложения, но всякий раз, когда вы перестраиваете их с новыми изменениями, вы теряете все непостоянные данные.

Вот почему контейнеры предлагают возможность включать объемное хранилище или монтировать том хранилища. Контейнеры рассматривают тома хранилища как каталог. Любые данные, записанные на том, попадают в файловую систему хоста.

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

Объем против постоянного объема

Контейнеры предоставляют 2 способа хранения постоянных данных: с использованием томов и постоянных томов. Между ними есть существенная разница. Контейнер управляет данными в хранилище томов. Когда вы останавливаете контейнер, данные остаются и доступны при перезапуске контейнера. Однако при удалении или удалении контейнера данные теряются, поскольку вы также удаляете базовое хранилище томов.

Постоянное хранилище томов или монтирование с привязкой — это способ хранения данных вне файловой системы контейнера. Таким образом, данные не теряются даже при удалении контейнера. Он сохраняется до тех пор, пока не будет удален вручную.

В следующем разделе показаны оба типа томов с примерами.

Демонстрация постоянного хранилища контейнеров

Мы создали небольшое веб-приложение для демонстрации постоянного хранилища с контейнерами Docker. Вы можете продолжить, установив Docker и скачав код из этого репозитория GitHub.

Приложение представляет собой элементарную форму с 2-мя полями для пользовательского ввода:

  • Заголовок
  • Текст документа
Скриншот: Графический интерфейс формы обратной связи демо-приложения.
Графический интерфейс демонстрационного приложения с полями «Заголовок» и «Текст документа» .

После сохранения пользовательского ввода вы можете получить к нему доступ, открыв файл в каталоге обратной связи с именем, указанным в поле «Заголовок» . Ввод из поля «Текст документа» — это содержимое файла.

Как использовать объемное хранилище

После того, как вы установили приложение на свой компьютер, оно может использовать объемное хранилище, как показано в Dockerfile .

Снимок экрана: содержимое файла Docker, включая атрибут VOLUME.
Dockerfile, показывающий использование объемного хранилища.

Теперь вы создаете образ и запускаете контейнер. Для этого выполните следующие команды.

 docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
Снимок экрана: окно терминала, показывающее результаты команды сборки docker с томом.
Создание приложения с объемным хранилищем.
Снимок экрана: окно терминала после выполнения команды запуска docker с томом.
Запуск контейнера показывает, что он управляет хранилищем томов.

После запуска приложения перейдите на localhost:3000, чтобы отправить отзыв.

Скриншот: отправка отзыва через графический интерфейс демонстрационного приложения.
Отправка отзыва о приложении.

Нажмите «Сохранить» и перейдите к localhost:3000/feedback/test.txt , чтобы увидеть, успешно ли сохранен ввод.

Снимок экрана: Браузер с открытым отправленным файлом test.txt.
Успешный отзыв подтвержден.

Удалите и перезапустите контейнер, чтобы увидеть, сохраняется ли ввод.

 docker stop feedback-app docker start feedback-app

Если вы сейчас посетите тот же URL-адрес, вы увидите, что обратная связь все еще существует. Но что произойдет, если вы удалите контейнер и перезапустите его?

 docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app feedback-node:volumes

После перезапуска, если вы вернетесь к этому URL-адресу, его больше не будет, потому что данные были потеряны при удалении контейнера. Данные тома сохраняются только при остановке контейнера, а не при его удалении.

Скриншот: Браузер сообщает об ошибке при открытии файла test.txt.
Данные обратной связи были утеряны.

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

 docker stop feedback-app docker rm feedback-app docker rmi feedback-node:volumes

Как использовать постоянное хранилище томов

Прежде чем тестировать это, вы должны удалить атрибут VOLUME из Dockerfile и пересобрать образ.

Скриншот: Dockerfile отредактирован для удаления атрибута VOLUME.
Обновлен Dockerfile для удаления атрибута VOLUME.
 docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

Как видите, во второй команде вы используете флаг -v для определения постоянного тома вне контейнера, который сохраняется даже при удалении контейнера.

Как и в предыдущем шаге, попробуйте добавить отзыв и получить к нему доступ после остановки, удаления и перезапуска контейнера.

Скриншот: Ввод текста в форму обратной связи демо-приложения.
Добавление новых отзывов для теста на устойчивость.
 docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

Как видите, даже после остановки и удаления контейнера данные доступны и остаются.

Скриншот: Браузер, который успешно открыл второй тестовый файл.
После остановки и удаления контейнера данные остаются.
Постоянное хранилище: ключ к стабильным и надежным контейнерным приложениям! Погрузитесь в типы, архитектуру и варианты использования прямо здесь ️ Нажмите, чтобы твитнуть

Краткое содержание

Постоянное хранилище жизненно важно для контейнерных приложений, поскольку оно позволяет сохранять данные вне жизненного цикла контейнера. Два основных типа постоянного хранилища для контейнерных приложений — это тома и привязки, каждый из которых имеет свои преимущества и варианты использования.

Тома хранятся в файловой системе контейнера, а монтирование привязки доступно напрямую на хост-компьютере.

Постоянное хранилище позволяет обмениваться данными между контейнерами, что позволяет создавать сложные многоуровневые приложения. Постоянное хранилище необходимо для обеспечения стабильности и непрерывности контейнерных приложений, предоставляя надежный и гибкий способ хранения важных данных.

И если вы используете Docker для разработки своих веб-приложений, вы обнаружите, что настроить развертывание Dockerfile с помощью службы хостинга приложений Kinsta очень просто.