Тиринг данных в объектном хранилище
В этой инструкции описано, как настроить тиринг данных вверх — автоматическое перемещение данных в более «горячий» класс хранения при запросе к архивным объектам.
О тиринге данных
В объектном хранилище Object Storage Service (OBS) доступно три класса хранения:
-
Standard — горячее хранилище с высоким уровнем доступа. Подходит для постоянно используемых объектов.
-
Warm — теплое хранилище. Подходит для информации, доступ к которой требуется несколько раз в год.
-
Cold — холодное хранилище. Подходит для редко используемых объектов с частотой обращения на уровне одного раза в год или реже.
Выбор нужного класса хранения зависит от частоты обращения к данным.
Чтобы уменьшить затраты на хранение, вы можете использовать правила управления жизненным циклом. Они позволяют реализовать тиринг данных вниз — автоматическое перемещение данных, к которым больше не нужен частый доступ, в теплое (Warm) или в холодное (Cold) хранилище.
В некоторых сценариях архивные данные в холодном хранилище могут стать востребованными. Например, может вырасти спрос на видеозапись, песню или книгу из электронной библиотеки. Объекты с классом хранения Cold нельзя получить с помощью GET-запроса. Чтобы сделать их снова доступными, их восстанавливают в более «горячий» класс хранения — Standard или Warm.
Ниже описано, как реализовать перемещение (восстановление) объекта из класса хранения Cold в более «горячий» класс хранения — Warm или Standard. Перемещение будет автоматически запускаться при обращении к объекту с помощью GET-запроса. Повторное обращение к нему позволяет получить сам объект после его восстановления.
Архитектура решения
-
Клиент (пользователь или приложение) отправляет GET-запрос к объекту с классом хранения Cold или Warm.
-
Информация об обращении к целевому бакету попадает в Cloud Trace Sevice — сервис для логирования событий.
-
Cloud Trace Service формирует лог и отправляет его в бакет для хранения логов.
-
OBS сообщает сервису для отправки уведомлений Simple Message Notification о появившемся файле с логами в бакете.
-
Уведомление из Simple Message Notification становится триггером для запуска функции в FunctionGraph — сервисе для выполнения кода в бессерверной среде по триггеру.
-
Функция в FunctionGraph отрабатывает и перемещает объект в целевом бакете в класс хранения Standard.
Подготовьте бакет для хранения логов в OBS
-
На панели управления в разделе Storage откройте Object Storage Service.
-
Перейдите к созданию бакета — нажмите Create Bucket.
-
В поле Bucket Name введите название, например «logs-for-tiering».
-
В поле Storage Class выберите для хранения логов класс Warm.
-
Выберите проект в поле Enterprise Project. Проекты помогают управлять доступом к облачным ресурсам. Хорошая практика — создать новый проект и поместить бакет в него, а не использовать проект по умолчанию «default».
-
Подтвердите создание — нажмите Create Now.
Создайте трекер в CTS
-
На панели управления в разделе Management & Deployment откройте Cloud Trace Service (CTS).
-
Убедитесь, что в качестве IAM-проекта на верхней панели выбран проект по умолчанию — «ru-moscow».
-
На вкладке Trackers перейдите к созданию трекера — нажмите Create Tracker.
-
Задайте параметры трекера:
-
Tracker Type — укажите тип Data.
-
Tracker Name — введите название, например «obs-logs».
-
OBS Bucket — выберите бакет с объектами, для которых вы настраиваете тиринг данных. CTS будет фиксировать обращения к объектам этого бакета и отправлять логи о таких событиях.
-
В блоке Transfer to OBS в поле OBS Bucket выберите созданный ранее бакет для хранения логов.
-
В поле Retention Period задайте время хранения логов в бакете, например 60 дней.
-
-
Сохраните трекер — нажмите OK.
Настройте топик в SMN
Топик — это инструмент, объединяющий уведомление об указанном событии, получателя (подписчика) и отправителя этого уведомления. Как только наступает событие, отправитель публикует уведомление, и его получают все подписчики.
-
На панели управления в разделе Application откройте Simple Message Notification (SMN).
-
В разделе Topic Management → Topics перейдите к созданию топика — нажмите Create Topic.
-
Задайте параметры топика:
-
Topic Name — введите название топика, например «bucket-request».
-
Enterprise Project — выберите созданный ранее проект.
-
-
Сохраните топик — нажмите OK.
-
В строке с созданным топиком нажмите More → Configure Topic Policy, чтобы задать политику работы топика.
-
В списке Services that can publish messages to this topic отметьте сервис OBS и сохраните политику кнопкой OK.
Настройте уведомление о создании файла в бакете
-
На панели управления в разделе Storage откройте Object Storage Service.
-
Выберите созданный для хранения логов бакет.
-
Нажмите Event Notification → Create, чтобы добавить уведомление.
-
Задайте параметры уведомления:
-
Name — введите название, например «event-create-file».
-
Events — выберите тип события ObjectCreated.
-
В выпадающем списке Select the project to which the SMN topic belongs выберите IAM-проект, в котором создан топик.
-
В выпадающем списке Select an SML topic выберите созданный ранее топик.
-
-
Сохраните уведомление — нажмите OK.
Создайте агентство для FunctionGraph в IAM
-
На панели управления в разделе Management & Deployment откройте Identity and Access Management (IAM).
-
На странице Agencies перейдите к созданию агентства — нажмите Create Agency.
-
Задайте параметры агентства:
-
Agency Name — введите название агентства, например «for-functiongraph».
-
Agency Type — задайте тип Cloud Service.
-
Cloud Service — выберите FunctionGraph.
-
Validity Period — выберите Unlimited.
-
Нажмите Assign Permissions и выберите политики OBS Administrator и SMN Administrator.
-
-
Сохраните агентство — нажмите OK.
Создайте функцию в FunctionGraph
-
На панели управления в разделе Computing откройте FunctionGraph.
-
На странице Functions → Function List перейдите к созданию функции — нажмите Create Function.
-
Задайте параметры функции:
-
Function Name — введите название, например «data-tiering».
-
Agency — выберите созданное на предыдущем шаге агентство.
-
Enterprise Project — выберите созданный ранее проект.
ПримечаниеФункция должна принадлежать тому же проекту, что и топик SMN.
-
Runtime — укажите среду выполнения кода. В нашем примере код написан на Python 3.6
-
В редактор вставьте код функции.
Пример реализации функции тиринга на Python 3.6
-
-
Сохраните функцию — нажмите Create Now.
-
На вкладке Code в поле Dependencies нажмите Select, чтобы прикрепить зависимость.
-
Выберите obssdk-3.0.2 для Python и нажмите OK. Этот SDK поддерживает Python версии 2.7.8 и позднее, а также Python 3.3–3.6.
-
На вкладке Configuration убедитесь, что в поле Agency выбрано нужное агентство.
-
В поле Execution Timeout (s) укажите время таймаута в секундах. С учетом восстановления из класса хранения Cold необходимо задать не менее 370 секунд.
-
На вкладке Triggers нажмите Create Trigger, чтобы создать триггер.
-
Задайте параметры триггера:
-
Trigger Type — выберите тип Simple Message Notification (SMN).
-
Topic Name — выберите созданный ранее топик.
-
-
Сохраните триггер — нажмите OK.
Теперь при GET-запросе к объектам бакета класс хранения объектов будет автоматически изменяться на Standard («горячие данные»), а при повторном обращении после восстановления можно будет получить сам объект.
В функции используется опция Expedited, которая позволяет восстановить объект в течение 1–5 минут.
- О тиринге данных
- Архитектура решения
- Подготовьте бакет для хранения логов в OBS
- Создайте трекер в CTS
- Настройте топик в SMN
- Настройте уведомление о создании файла в бакете
- Создайте агентство для FunctionGraph в IAM
- Создайте функцию в FunctionGraph