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

Задумываясь о хранении, мы рассчитываем, что данные:

  • никуда не пропадут;
  • доступны (в идеале — отовсюду, где есть интернет);
  • недоступны для тех, с кем мы не собирались делиться данными;
  • находятся в системе хранения, которую просто расширить.

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

Всем этим требованиям отвечает объектное хранилище (англ. object storage) — облачная система хранения данных произвольного формата. В хранилище записываются объекты — по сути, привычные нам файлы. У каждого объекта есть уникальный идентификатор (аналог имени файла) и метаданные (дополнительные сведения). Идентификатор помогает различать объекты, а в метаданных хранятся, например, дата создания и MD5-хеш.

Идентификатор объекта — это строка. Ее часто записывают как путь в файловой системе, используя символ / как разделитель. Например, archive/2020/ivanov/x-ray.jpg. Благодаря этому файловые браузеры при работе с объектами имитируют привычное нам дерево папок. В консоли управления Yandex Cloud тоже есть такая возможность — части пути называются папками. Но важно понимать: на самом деле иерархии в объектном хранилище нет, оно плоское. За счет плоскости достигается большая скорость поиска по сравнению с файловой системой.

Имена бакетов во всем Yandex Object Storage уникальны — назвать два бакета одинаково нельзя даже в разных облаках. Помните об этом, если будете создавать бакеты автоматически.

Внутри хранилища объекты группируются в бакеты. Это позволяет разделять данные разных проектов или пользователей. У каждого бакета в Yandex Cloud уникальное имя. Переименовать бакет нельзя, поэтому выбирайте имя для бакета с умом.

С практической точки зрения объектные хранилища имеют некоторые важные особенности:

  • они рассчитаны, прежде всего, на взаимодействие с приложениями через HTTP API, а не напрямую с пользователем;
  • объекты в них не редактируются. Чтобы изменить объект, придётся загрузить в хранилище новую версию. Это неудобно, если объекты большие или часто изменяются.

Класс хранилища

Размер оплаты за использование объектного хранилища зависит от количества хранящихся данных, числа операций с ними и объёма исходящего трафика. Первый гигабайт данных, первые десятки тысяч операций и первые 100 гигабайт трафика бесплатные.

С учётом требований к длительности хранения объектов и частоте операций с ними вы можете выбрать класс используемого хранилища. В Yandex Cloud таких классов три: стандартное, холодное и ледяное. Более «холодные» классы используются для длительного хранения объектов, к которым обращаются редко. Чем «холоднее» хранилище, тем дешевле хранить в нём данные, но и тем дороже их читать или записывать.

Сценарий работы с даннымиРекомендуемый класс хранилищаТариф на хранение данныхТариф на обращение к данным
Мало данных, частые запросы (например, аватарки пользователей приложения)СтандартноеСамый высокийСамый низкий
Много данных, нечастые запросы (например, резервные копии)ХолодноеПримерно в 2 раза ниже, чем для стандартногоПримерно в 2 раза выше, чем для стандартного
Много данных, очень редкие запросы (например, архивы)ЛедяноеПримерно в 4 раза ниже, чем для стандартногоПримерно в 4 раза выше, чем для стандартного

Стоит иметь в виду, что у ледяного хранилища, в отличие от стандартного и холодного, есть минимальное тарифицируемое время хранения объекта. Оно составляет 12 месяцев. Если удалить объект, который хранился в нём меньший срок, то остаток стоимости хранения будет списан с вашего счёта.

Класс хранилища выбирается при загрузке объекта в бакет. Если этого не сделать, то объект сохранится в хранилище того класса, который выбран для всего бакета.

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

S3-совместимость

Сервис Yandex Object Storage — S3-совместимое хранилище. Его API совместим с Simple Storage Service API (S3 API), который был создан компанией Amazon в 2006 году и де-факто стал стандартом облачного хранения данных. S3-совместимость позволяет использовать в Yandex Cloud популярные инструменты для работы с S3-протоколом: консольные клиенты S3cmd и AWS CLI, файловые браузеры Cyberduck и WinSCP, библиотеки (SDK) для Python и Java.

Возможности и преимущества объектного хранилища

Объектное хранилище — общепринятый способ хранения неструктурированных данных в облаке. Преимущества объектного хранилища:

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

Используйте сервис Yandex Object Storage, чтобы разместить файлы любого формата для своего проекта (приложения или сайта) в закрытом или публичном доступе, хранить объёмные архивы (до 5 терабайт на файл), контролировать доступ к данным и организовать совместную работу с ними.

Метаданные

Метаданные бывают пользовательскими (их имена и значения вы добавляете и меняете сами) и системными (их устанавливает сервис). Например, дата создания или последнего изменения объекта, его размер, MD5-хеш — это системные метаданные. Их полный список вы найдете в документации.

Пользовательские метаданные передаются в облачное хранилище при загрузке объекта в HTTP-заголовках запроса. Имена заголовков с пользовательскими метаданными при этом должны начинаться с префикса x-amz-meta-:

PUT /images/image0349.dat HTTP/1.1
Host: hospital.storage.yandexcloud.net
Content-Length: 1403256
Date: Sat, 20 Mar 2021 14:15:02 GMT
Authorization: *...*
x-amz-meta-Patient-Surname: Petrov
x-amz-meta-Patient-ID: 4536
*...*

При запросе объекта сервис возвращает метаданные в виде таких же HTTP-заголовков с префиксом x-amz-meta-:

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 23 Mar 2021 10:12:15 GMT
Content-Type: image/dat
Content-Length: 1403256
Connection: keep-alive
Keep-Alive: timeout=60
Accept-Ranges: bytes
Last-Modified: Sat, 20 Mar 2021 14:15:02 GMT
x-amz-meta-patient-surname: Petrov
x-amz-meta-patient-id: 4536
...

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

Версионирование бакетов

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

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

В новом бакете версионирование по умолчанию приостановлено. Загружаемым объектам присваивается идентификатор версии version_id равный null. В этом случае хранится только последняя версия каждого объекта.

Хранение статических веб-сайтов в Object Storage

Представьте, что вам нужно выбрать оптимальный хостинг для сайта клиники. Главные критерии: отказоустойчивый, недорогой и простой в обслуживании. Один из вариантов решения такой задачи — использовать объектное хранилище. Вы можете, не настраивая никаких серверов, просто загрузить HTML-файлы, скрипты, стили и другие файлы в хранилище. Пользователи будут открывать в браузере ваш сайт, а по сути — скачивать файлы прямо из бакета.

Важно понимать, что этот вариант подойдет только для полностью статических сайтов. Иными словами, сайт должен быть сделан с помощью клиентских технологий (HTML, CSS и JavaScript) и не требовать запуска чего-либо на стороне веб-сервера.

Обратите внимание на несколько особенностей:

  • Если вы планируете использовать собственный домен (например www.example.com), то присвойте бакету точно такое же имя.
  • Откройте публичный доступ на чтение объектов. Это позволит пользователям интернета скачивать объекты из бакета и просматривать сайт в браузере.

Для веб-сайта лучше использовать стандартное хранение.

По умолчанию сайт будет доступен только по протоколу HTTP. Для поддержки HTTPS нужно загрузить в объектное хранилище TLS-сертификат.

Если у вас есть собственный домен и вы хотите опубликовать сайт на нём, то настройте CNAME-запись у DNS-провайдера или на своем DNS-сервере. Например, для домена www.example.com CNAME-запись выглядела бы так:

www.example.com CNAME www.example.com.website.yandexcloud.net

В этом случае можно использовать домены не ниже третьего уровня (то есть использовать домен example.com не получится, только www.example.com). Это связано с особенностями обработки CNAME-записей на DNS-хостингах.


📂 YandexCloud | Последнее изменение: 15.08.2024 11:46