Тиринг данных в объектном хранилище

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

О тиринге данных

В объектном хранилище Object Storage Service (OBS) доступно три класса хранения:

  • Standard — горячее хранилище с высоким уровнем доступа. Подходит для постоянно используемых объектов.

  • Warm — теплое хранилище. Подходит для информации, доступ к которой требуется несколько раз в год.

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

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

Чтобы уменьшить затраты на хранение, вы можете использовать правила управления жизненным циклом. Они позволяют реализовать тиринг данных вниз — автоматическое перемещение данных, к которым больше не нужен частый доступ, в теплое (Warm) или в холодное (Cold) хранилище.

В некоторых сценариях архивные данные в холодном хранилище могут стать востребованными. Например, может вырасти спрос на видеозапись, песню или книгу из электронной библиотеки. Объекты с классом хранения Cold нельзя получить с помощью GET-запроса. Чтобы сделать их снова доступными, их восстанавливают в более «горячий» класс хранения — Standard или Warm.

Ниже описано, как реализовать перемещение (восстановление) объекта из класса хранения Cold в более «горячий» класс хранения — Warm или Standard. Перемещение будет автоматически запускаться при обращении к объекту с помощью GET-запроса. Повторное обращение к нему позволяет получить сам объект после его восстановления.

Архитектура решения

../_images/schm__data-tiering-algorithm.svg
  1. Клиент (пользователь или приложение) отправляет GET-запрос к объекту с классом хранения Cold или Warm.

  2. Информация об обращении к целевому бакету попадает в Cloud Trace Sevice — сервис для логирования событий.

  3. Cloud Trace Service формирует лог и отправляет его в бакет для хранения логов.

  4. OBS сообщает сервису для отправки уведомлений Simple Message Notification о появившемся файле с логами в бакете.

  5. Уведомление из Simple Message Notification становится триггером для запуска функции в FunctionGraph — сервисе для выполнения кода в бессерверной среде по триггеру.

  6. Функция в FunctionGraph отрабатывает и перемещает объект в целевом бакете в класс хранения Standard.

Подготовьте бакет для хранения логов в OBS

  1. На панели управления в разделе Storage откройте Object Storage Service.

  2. Перейдите к созданию бакета — нажмите Create Bucket.

  3. В поле Bucket Name введите название, например «logs-for-tiering».

  4. В поле Storage Class выберите для хранения логов класс Warm.

  5. Выберите проект в поле Enterprise Project. Проекты помогают управлять доступом к облачным ресурсам. Хорошая практика — создать новый проект и поместить бакет в него, а не использовать проект по умолчанию «default».

  6. Подтвердите создание — нажмите Create Now.

Создайте трекер в CTS

  1. На панели управления в разделе Management & Deployment откройте Cloud Trace Service (CTS).

  2. Убедитесь, что в качестве IAM-проекта на верхней панели выбран проект по умолчанию — «ru-moscow».

  3. На вкладке Trackers перейдите к созданию трекера — нажмите Create Tracker.

  4. Задайте параметры трекера:

    • Tracker Type — укажите тип Data.

    • Tracker Name — введите название, например «obs-logs».

    • OBS Bucket — выберите бакет с объектами, для которых вы настраиваете тиринг данных. CTS будет фиксировать обращения к объектам этого бакета и отправлять логи о таких событиях.

    • В блоке Transfer to OBS в поле OBS Bucket выберите созданный ранее бакет для хранения логов.

    • В поле Retention Period задайте время хранения логов в бакете, например 60 дней.

  5. Сохраните трекер — нажмите OK.

Настройте топик в SMN

Топик — это инструмент, объединяющий уведомление об указанном событии, получателя (подписчика) и отправителя этого уведомления. Как только наступает событие, отправитель публикует уведомление, и его получают все подписчики.

  1. На панели управления в разделе Application откройте Simple Message Notification (SMN).

  2. В разделе Topic Management → Topics перейдите к созданию топика — нажмите Create Topic.

  3. Задайте параметры топика:

    • Topic Name — введите название топика, например «bucket-request».

    • Enterprise Project — выберите созданный ранее проект.

  4. Сохраните топик — нажмите OK.

  5. В строке с созданным топиком нажмите More → Configure Topic Policy, чтобы задать политику работы топика.

  6. В списке Services that can publish messages to this topic отметьте сервис OBS и сохраните политику кнопкой OK.

Настройте уведомление о создании файла в бакете

  1. На панели управления в разделе Storage откройте Object Storage Service.

  2. Выберите созданный для хранения логов бакет.

  3. Нажмите Event Notification → Create, чтобы добавить уведомление.

  4. Задайте параметры уведомления:

    • Name — введите название, например «event-create-file».

    • Events — выберите тип события ObjectCreated.

    • В выпадающем списке Select the project to which the SMN topic belongs выберите IAM-проект, в котором создан топик.

    • В выпадающем списке Select an SML topic выберите созданный ранее топик.

  5. Сохраните уведомление — нажмите OK.

Создайте агентство для FunctionGraph в IAM

  1. На панели управления в разделе Management & Deployment откройте Identity and Access Management (IAM).

  2. На странице Agencies перейдите к созданию агентства — нажмите Create Agency.

  3. Задайте параметры агентства:

    • Agency Name — введите название агентства, например «for-functiongraph».

    • Agency Type — задайте тип Cloud Service.

    • Cloud Service — выберите FunctionGraph.

    • Validity Period — выберите Unlimited.

    • Нажмите Assign Permissions и выберите политики OBS Administrator и SMN Administrator.

  4. Сохраните агентство — нажмите OK.

Создайте функцию в FunctionGraph

  1. На панели управления в разделе Computing откройте FunctionGraph.

  2. На странице Functions → Function List перейдите к созданию функции — нажмите Create Function.

  3. Задайте параметры функции:

    • Function Name — введите название, например «data-tiering».

    • Agency — выберите созданное на предыдущем шаге агентство.

    • Enterprise Project — выберите созданный ранее проект.

      Примечание

      Функция должна принадлежать тому же проекту, что и топик SMN.

    • Runtime — укажите среду выполнения кода. В нашем примере код написан на Python 3.6

    • В редактор вставьте код функции.

  4. Сохраните функцию — нажмите Create Now.

  5. На вкладке Code в поле Dependencies нажмите Select, чтобы прикрепить зависимость.

  6. Выберите obssdk-3.0.2 для Python и нажмите OK. Этот SDK поддерживает Python версии 2.7.8 и позднее, а также Python 3.3–3.6.

  7. На вкладке Configuration убедитесь, что в поле Agency выбрано нужное агентство.

  8. В поле Execution Timeout (s) укажите время таймаута в секундах. С учетом восстановления из класса хранения Cold необходимо задать не менее 370 секунд.

  9. На вкладке Triggers нажмите Create Trigger, чтобы создать триггер.

  10. Задайте параметры триггера:

    • Trigger Type — выберите тип Simple Message Notification (SMN).

    • Topic Name — выберите созданный ранее топик.

  11. Сохраните триггер — нажмите OK.

Теперь при GET-запросе к объектам бакета класс хранения объектов будет автоматически изменяться на Standard («горячие данные»), а при повторном обращении после восстановления можно будет получить сам объект.

Примечание

В функции используется опция Expedited, которая позволяет восстановить объект в течение 1–5 минут.

Advanced