Мы используем разные данные: видеозаписи, изображения, архивы, резервные копии для аварийного восстановления, цифровые библиотеки. Многие из них требуются не постоянно, а время от времени — их нужно куда-то сложить, чтобы легко находить и доставать.
Задумываясь о хранении, мы рассчитываем, что данные:
- никуда не пропадут;
- доступны (в идеале — отовсюду, где есть интернет);
- недоступны для тех, с кем мы не собирались делиться данными;
- находятся в системе хранения, которую просто расширить.
Кроме того, мы не хотим потратить много денег на хранение и много сил, чтобы поддерживать систему хранения в рабочем состоянии.
Всем этим требованиям отвечает объектное хранилище (англ. 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-
:
Пользовательские метаданные загруженных объектов тоже можно добавлять или изменять.
Версионирование бакетов
Благодаря версионированию — специальному инструменту хранилища — вы не потеряете объекты даже после удаления или перезаписи.
Версионирование сохраняет историю объекта и позволяет получать доступ к его предыдущим версиям. Версионирование включается на уровне бакета и применяется ко всем объектам внутри него. Взамен вы платите за место, ведь каждая версия объекта — это его полная копия, она занимает столько же места в вашем хранилище.
В новом бакете версионирование по умолчанию приостановлено. Загружаемым объектам присваивается идентификатор версии 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