Тиринг данных в объектном хранилище
В этой инструкции описано, как настроить тиринг данных вверх — автоматическое перемещение данных в более «горячий» класс хранения при запросе к архивным объектам.
О тиринге данных
В объектном хранилище 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