Приветствуем всех, кто связан с облаками и интересуется хранением данных!
Команда Platformcraft накопила немало опыта и спешит поделиться своей историей. Сегодня мы расскажем про то, как из маленького дочернего проекта выросла независимая облачная платформа для бизнеса. Итак, поехали!
Cloud4Video: зарождение проекта
История Platformcraft началась в компании CDNvideo (российский провайдер услуг по доставке контента). В 2012 году начали подключаться клиенты, заинтересовавшиеся хранением данных, но у провайдера не было своего облачного хранилища. Поэтому пришлось купить лицензию на готовый продукт и быстро развернуться на серверах. В качестве оболочки использовался Ficus — монолитный набор сервисов, написанный на Java привлечённым сторонним программистом.
Проект оказался абсолютно нерентабельным: хранилище работало медленно, падало, а для повышения стабильности требовалось новое железо в сочетании с качественным программным продуктом. В 2014 году руководство CDNvideo приняло решение о передаче проекта: им занялись коммерческий директор и продуктолог. Поддержку текущей системы доверили компании ITSumma. От Ficus’a пришлось избавиться, т. к. масштабировать его было нереально, также мы привлекли специалиста, который поменял hardware-архитектуру. Но вопрос производительности по-прежнему стоял остро, а новая платформа создавалась с нуля.
Разработка новой инфраструктуры
В середине 2014 г. к нашей команде присоединился новый разработчик: он внедрил ряд сервисов и посоветовал перейти к open-source хранилищу. К концу года мы уже достраивали первый нормальный образец продукта: его сразу стали тестировать клиенты, самым крупным из которых оказалась компания РЕН ТВ.
MongoDB и OpenStack Swift — первая попытка сделать что-то толковое
Под мета-данные мы взяли MongoDB в конфигурации Replica Set. Оставалось найти хранилище, и ребята из ITSumma предложили использовать платформу OpenStack Swift, взяв на себя админские задачи. Сервисы мы написали на Go, в итоге уже на этом этапе получилась рабочая инфраструктура.
После трёх недель тестирования пришло время масштабировать Swift — но незадолго до выхода в продакшн хранилище упало и потеряло все данные. Благо, это были лишь тестовые файлы, информация клиентов не пострадала, но нам нужно было срочно что-то предпринимать. Идея запуска OpenStack Swift прогорела из-за сложности правильного масштабирования и трудностей в поддержке.
Отказ от Swift’а означал очередные поиски нового хранилища: среди более-менее подходящих вариантов рассматривались Elliptics, Ceph и Hadoop. Все существующие системы оказались достаточно сложными, а для правильного функционирования и должной поддержки нужна целая команда инженеров. В условиях ограниченных ресурсов и отсутствия бюджета мы попробовали сделать своё хранилище. Требовалось хотя бы временное решение, чтобы удержать клиентов и не развалить новоиспечённую компанию.
DEPOT. Создание собственного хранилища
Задачу взял на себя наш разработчик: источником вдохновения выступил Elliptics — распределённое хранилище с открытым исходным кодом. При этом сам код не использовался, нас интересовали только основные принципы работы. В результате получилось создать key-value базу, которая может хранить объекты любого размера — с достаточно оптимальным алгоритмом записи на HDD.
Самое важное — надёжность хранения и доступность данных, поэтому мы используем тройную репликацию. При загрузке файла создаются 3 копии, попадающие в 3 ноды разных дата-центров. Данные успешно загружены только в том случае, если достигнут кворум (залито минимум 2 реплики).
Новый прототип хранилища был написан на Go всего за пару недель и оказался вполне рабочим — после ряда доработок мы, наконец, запустили первую версию продукта. Так команда Platformcraft сохранила текущих клиентов и получила новых: нашими услугами пользуются МИР ТВ, Комсомольская Правда, Известия, онлайн-кинотеатр ViP Play и другие компании.
От прототипа к высокой производительности
Хранилище на Go успешно проработало 2 года, но трафик рос, мы искали новые мощности для больших объёмов хранимого контента. Пришлось бороться с особенностями самого языка: garbage collector потреблял огромное количество ресурсов, снижая производительность. При попытках оптимизации мы понимали, что язык с ГК не подходит под наши задачи — поэтому выбор пал на Rust. В результате миграции ядра мы добились оптимизации инфраструктуры Platformcraft практически под любые рамки.
Оставалось решить проблему с загрузкой файлов на HDD. Когда данные загружались на жёсткие диски напрямую, сохранялся ряд проблем с нагрузкой: HDD с ней справлялись довольно слабо. Поэтому для увеличения производительности и скорости работы платформы мы закупили SSD и создали на них буфер. Теперь файлы заливаются сначала на твёрдотельные накопители (горячее хранение), а затем — планомерно в фоновом режиме на HDD (холодное хранение).
Независимость от других облачных систем: собственный транскодер
Видео — это основной контент, который у нас хранится, а при постоянной работе с телеканалами и другими медиа нужно транскодировать видеозаписи в разные форматы. Ранее эта задача была целиком отдана на аутсорс, а идея самостоятельного транскодинга казалась нам чем-то нереальным.
Ситуация изменилась после того, как Роскомнадзор стал блокировать сервера Telegram, прокси которого работали в облачных системах Amazon, Google, Microsoft. Разумеется, это коснулось и Platformcraft: появились проблемы с кодированием, начались блокировки наших дата-центров. Но данные клиентов оставались доступными в режиме read only — этого уже было достаточно для функционирования их сайтов.
Вариантов не оставалось — пришлось строить свой транскодинг на основе GPU. Мы сделали небольшой пилотный проект транскодера, который не только оказался приемлемым, но и работал в 10-12 раз быстрее продолжительности самого видео (в 3-4 раза быстрее, чем это было на аутсорсе). Так облака Platformcraft получили автономность: теперь мы зарегистрированы в Реестре отечественного ПО и предлагаем полное импортозамещение.
Platformcraft сегодня
Сейчас мы даём клиентам богатый функционал для работы с контентом и двигаемся дальше, а все данные надёжно хранятся и доступны 24/7. Теперь нас уже не 3 человека: сформирована целая команда, большая часть которой — технические специалисты. Platformcraft продолжает работу над импортозамещением, мы разрабатываем более удобный интерфейс и занимаемся активной поддержкой облачной инфраструктуры. В 2020 году появилась возможность развернуть Enterprise.
В следующих статьях мы подробно разберём back-end хранилища DEPOT, представим крутые кейсы и поделимся опытом креативной разработки!