Статьи

Является ли OpenStack Object Store базой для видео CDN?


Видео CDN поразительно с технической точки зрения, поскольку мы говорим о масштабных системах с некоторыми уникальными бизнес-кейсами.

Я хотел бы поделиться с вами некоторыми аспектами проектирования этих систем.

Видео CDN Case Study

Видео CDN включает в себя два основных примера:

  1. Пример использования VOD: это сценарий с длинным хвостом и высокой пропускной способностью, когда вам нужны диски большой емкости, где будет широко использоваться только небольшая его часть. Чтобы создать экономически эффективное решение, вы должны иметь:
    1. Система хранения большой емкости с низкими потребностями IOPS. Серверы с 24-36 дисками SATA по 2-3 ТБ обеспечат необработанное хранилище объемом до 100 ТБ с ценой тега $ 15K.
    2. Механизм репликации и автоматического переключения при отказе, который может распределять контент между несколькими серверами и может спасти нас от использования дорогих решений RAID и Cluster.
    3. Механизм кэширования / прокси, который будет обслуживать голову длинного хвоста из памяти.
  2. Пример прямой трансляции: это сценарий «Нет хранилища / высокая пропускная способность», когда вам фактически не нужно постоянное хранилище (если сервер выходит из строя, как только он снова включается, данные больше не будут релевантными). Чтобы создать экономически эффективное решение, вы должны иметь:
    1. Нет значительного хранения.
    2. ОЗУ большой емкости, размер которой должен соответствовать:
      1. Количество каналов, которые вы собираетесь обслуживать.
      2. Количество разрешений, которые вы собираетесь поддерживать (наиболее актуально, когда вы планируете поддерживать портативные устройства, а не только широкоэкранные).
      3. Количество времени, которое вы собираетесь хранить (не более 5 минут в случае живого видео и не более 4 часов в случае старта заново).
    3. Механизм быстрой репликации памяти (или виртуального диска), который будет реплицировать входящее видео на несколько машин.
    4. HTTP-интерфейс для обслуживания фрагментов видео для конечных пользователей.

Обслуживание статического контента, а не динамических

современных систем кодирования видео (таких как
Google Widevine ) поддерживает «Шифрование один раз, использование многих», когда контент шифруется один раз, а ключи дешифрования распределяются для защищенных клиентов на основе необходимости знания.

Почему OpenStack Swift / Object Store?

Короче говоря, OpenStack Swift является эквивалентом OSS для Amazon
AWS S3 : «Простой интерфейс веб-сервисов, который можно использовать для хранения и извлечения любого объема данных в любое время из любой точки сети».

Преимущества OpenStack Swift / Object Store

  1. Открытый стек — это OSS, поэтому его легко оценить.
  2. Активные крупномасштабные развертывания, включая RackSpace и Comcast.
  3. Встроенный метод распределения контента, который позволяет распределять нагрузку между несколькими серверами на основе rsync.
  4. Высокая доступность на основе репликации данных между несколькими экземплярами. В случае сбоя сервера вам просто нужно вынуть его из массива и заменить на новый, в то время как другие серверы продолжают обслуживать пользователей.
  5. Этот механизм поможет вам избежать премиум-оборудования, такого как контроллеры ввода-вывода и механизм RAID.
  6. Встроенный HA и DRP на основе 5 независимых зон.
  7. Встроенный веб-сервер, который позволяет обслуживать статический контент, а также видеопотоки  на основе HTTP с самого сервера, а не реализовывать высокопроизводительную сеть SAN.
  8. Встроенный сервис обратного прокси, который минимизирует количество операций ввода-вывода и максимизирует пропускную способность на основе Python и Memcache.
  9. Встроенный сервис аутентификации
  10. Целевая цена 0,4 долл. США за 1 млн. Порций и 0,055 долл. США / ГБ в месяц, если мы возьмем в качестве ориентира AWS.

OpenStack Object магазин Архитектура
OpenStack архитектура хранилища объектов хорошо описана в двух слоях:

  1. Логично: аккаунты (платящие клиенты), контейнеры (папки) и объекты (капли).
  2. Физические: зоны (независимые кластеры), разделы (элементов данных), кольца (сопоставление URL-адресов и разделов и местоположений на дисках) и прокси.

Ключевые понятия

  1. Учетная запись на самом деле является независимым арендатором, так как имеет собственное хранилище данных (реализовано в SQLite).
  2. Репликация осуществляется на основе больших блоков, кворума и MD5.
  3. Запись на диск перед открытием для пользователей. Когда файлы загружаются, они сначала фиксируются на диске, по крайней мере, в двух зонах, а затем база данных обновляется для доступности (поэтому не ожидайте ответ в секунду за запись).
Размер системы 

Перед тестированием системы вы должны ознакомиться с некоторыми ключевыми показателями размеров, полученными Korea Telecom:

  1. Размер сервера хранилища объектов: хранилище большой емкости (драйверы SATA 36-48 2-3 ТБ, которые обеспечивают до 100 ТБ на сервер), память для кэширования заголовка «длинного хвоста» (24-48 ГБ ОЗУ), Eth 2×1 Гбит / с для поддержки ~ 500 параллельные запросы для длинного хвостового запроса. Один высокопроизводительный процессор должен делать эту работу.
  2. Размер прокси-сервера: Небольшое хранилище (500 ГБ SATA-диска будет работать), память для кэширования заголовка длинного хвоста (24 ОЗУ), Eth 2×10 Гбит / с для поддержки ~ 5000 одновременных запросов для поддержки заголовка запросов длинного хвоста.
  3. Переключатели: вам понадобится хорошая магистраль для этой системы. Чтобы избежать слишком большой магистрали, рекомендуется разделить систему на несколько кластеров.
  4. Балансировка нагрузки: во избежание LB верхнего уровня следует использовать DNS LB, где частые вызовы DNS пренебрежимо малы по отношению к потоковой передаче мультимедиа

Фаст Лейн: с чего начать?

OpenStack Object Store, вероятно, экономически выгоден при поиске больших установок, поскольку вам может понадобиться как минимум 5 физических серверов для хранения объектов и контейнеров и еще 2 для прокси. 

Однако вы можете проверить решение на основе установки на
одном сервере (SAIO).
Если вы выбираете
быструю полосу, а AWS — быструю полосу для вашего POC, не стесняйтесь использовать следующие советы:

  1. При первоначальной установке некоторые пакеты будут отсутствовать в yum, поэтому:
    1. sudo easy_install eventlet
    2. sudo easy_install dnspython
    3. sudo easy_install netifaces
    4. sudo easy_install pastedeploy
  2. Нет необходимости запускать службу rsync (просто перезагрузите компьютер).
  3. Запустите сервис, используя sudo ./bin/startmain
  4. Протестируйте сервис, используя скрипт bash supload для стимулирования клиента.
Работа с веб-сервисами

Существует три основных способа работы с веб-сервисами Swift:

  1. Инструменты AWS, поскольку Swift совместим с AWS S3.
  2. HTTP-вызовы, так как он основан на HTTP.
  3. Быстрый клиент, который направляет ваши основные потребности.

Работа с Swift Client


В следующем примере мы предполагаем, что данный пользователь test.tester был определен с помощью проверки пароля, и данные передаются через прокси-сервер на порт 8080

Получить статистику:

 swift -A http://test.example.com:8080/auth/v1.0 -U test:tester -K testing stat

Загрузите файл в контейнер видео:

 sudo swift -A http://test.example.com:8080/auth/v1.0 -U test:tester -K testing upload videos ./demo.wvm

Предоставьте
разрешения только для чтения  (обратите внимание, что r: означает домен реферала, поэтому указание любого другого * поможет вам сэкономить пропускную способность и минимизировать кражу контента)
 sudo swift -A http://test.example.com:8080/auth/v1.0 -U test:tester -K testing post videos  -r '.r:*'

Загрузите файл (где AUTH_test — учетная запись пользователя, видео — контейнер, а анонимный доступ предоставлен, как описано ниже):

 curl http://test.example.com:8080/v1.0/AUTH_test/videos/demo.wvm
Публичный доступ

Для реализации общедоступного доступа только для чтения вам необходимо позаботиться о следующих элементах.

  1. Управление пользователями
  2. Определить анонимный доступdelay_auth_decision = 1
  3. Настроить папку ACL
  4. Включите отложенную аутентификацию в конфигурации прокси (/etc/swift/proxy-server.conf):
 [filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
# Delaying the auth decision is required to support token-less
# usage for anonymous referrers (‘.r:*’).
delay_auth_decision = 1

Работа с прямыми вызовами HTTP


Получить пользователя / PWD
 curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://test.example.com:8080/auth/v1.0

> X-Storage-Url: http://127.0.0.1:8080/v1/AUTH_test
> X-Auth-Token: AUTH_tk551e69a150f4439abf6789409f98a047
> Content-Type: text/html; charset=UTF-8
> X-Storage-Token: AUTH_tk551e69a150f4439abf6789409f98a047

Загрузить файл

curl –X PUT -i \
    -H "X-Auth-Token: AUTH_tk26748f1d294343eab28d882a61395f2d" \
    -T /tmp/a.txt \
    https://storage.swiftdrive.com/v1/CF_xer7_343/dogs/JingleRocky.jpg

Итог

OpenStack Object Store (Swift) — захватывающий инструмент для всех, кто работает с крупномасштабной системой, особенно когда речь идет о CDN.