Раздел 9. Медиа и CDN
Чем загрузка фото/видео отличается от текста; объектное хранилище; CDN, превью и транскодинг; почему в сообщении лежит ссылка, а не само «тело».
До сих пор мы возили по системе крошечный текст — сотни байт. Но в мессенджере летают фото, видео, голосовые, документы — это уже мегабайты и гигабайты. И ведут они себя совсем иначе. Главная мысль раздела: у медиа отдельный путь, не такой, как у текста.
Почему медиа — это не текст
Сравним размеры: текстовое сообщение — около трёхсот байт, а видео — десятки и сотни мегабайт. Разница в миллионы раз. Гнать такой файл через канал сообщений и складывать в базу сообщений нельзя:
- он забьёт канал доставки, по которому должны быстро бегать лёгкие сообщения;
- база сообщений заточена под маленькие записи, а большие файлы хранить в ней дорого и неудобно.
Аналогия: текст — это открытка, она спокойно едет в общем потоке писем. Видео — это большая посылка, и для посылок есть отдельная служба доставки. Смешивать их в одном потоке — плохая идея.
Как на самом деле отправляется большой файл
Файл идёт в обход канала сообщений. Схема такая:
- Устройство загружает файл отдельно — прямо в специальное хранилище для файлов, не через Message-сервис.
- В ответ оно получает ссылку (адрес файла) и кое-какие данные о нём.
- И только теперь отправитель шлёт обычное маленькое сообщение, внутри которого — не сам файл, а ссылка на него плюс описание: тип, размер и маленькое превью.
То есть «тело» (большой файл) и «сообщение со ссылкой» едут разными дорогами и хранятся в разных местах.
Объектное хранилище
Файлы живут не в базе сообщений, а в объектном хранилище. Что это: специальное хранилище для больших файлов, где каждый файл — это «объект» со своим адресом. Оно дёшево стоит и масштабируется практически бесконечно. Обычная база для этого не годится, а объектное хранилище создано именно под такое.
Почему в сообщении лежит ссылка, а не файл
Это любимый вопрос на интервью, и причин несколько:
- Сообщение остаётся крошечным. А значит — быстро доставляется, дёшево хранится, легко шардируется и реплицируется (всё из Раздела 8 продолжает работать).
- Файл хранится один раз. В групповом чате ссылку получают все участники, но сам файл лежит в одном экземпляре — его не копируют на каждого получателя.
- Каждому — своё хранилище. Маленькие сообщения в базе сообщений, большие файлы в объектном хранилище. Каждый инструмент под свою задачу.
CDN: чтобы качалось быстро
Когда файл загружен, его ещё надо отдавать — иногда миллионам людей (вирусное видео в большом канале). Если все будут качать из одного далёкого дата-центра, будет медленно, а хранилище захлебнётся. Поэтому используют CDN.
CDN — CDN (Content Delivery Network) — это географически распределённая сеть серверов, ускоряющая загрузку сайтов и приложений. это сеть серверов, раскиданных по всему миру, которые держат копии файлов поближе к пользователям. Когда Боб скачивает видео, оно берётся с ближайшего к нему сервера, а не из одного центрального. Что это даёт:
- скорость — файл едет с близкого сервера, задержка меньше;
- разгрузка — основное хранилище не задыхается под лавиной скачиваний, особенно для популярного контента.
Превью и транскодинг
Две вещи, которые делают при загрузке:
- Превью (маленькая уменьшенная картинка) — чтобы в чате сразу что-то показать, пока полный файл ещё качается. Поэтому превью кладут прямо в сообщение рядом со ссылкой.
- Транскодинг — это перекодирование медиа в разные форматы и качества (например, одно видео — в несколько разрешений), чтобы оно подходило под разные устройства и скорость сети. Работа тяжёлая, поэтому её делают в фоне уже после загрузки, не задерживая отправку.
Полезные тонкости
- Загрузка кусками. Большой файл грузят частями: если связь оборвалась, можно докачать с места обрыва, а не начинать заново.
- Один файл — одна копия. Одинаковые файлы (по «отпечатку» содержимого) хранят в единственном экземпляре, экономя место.
- Приватность. Ссылки делают временными и подписанными, чтобы по чужой ссылке нельзя было ничего скачать. А при сквозном шифровании файл шифруется на устройстве до загрузки — хранилище видит лишь зашифрованные байты (подробнее — Часть 5).
Вопросы интервьюера (с разбором)
«Чем хранение текста отличается от медиа?» Образец: «Текст крошечный — он идёт через канал сообщений и лежит в базе сообщений. Медиа — это мегабайты и гигабайты, его нельзя гнать тем же путём: забьёт канал, а в базе сообщений хранить дорого. Поэтому файлы живут отдельно, в объектном хранилище, а в сообщении лежит лишь ссылка на файл с превью и описанием.»
«Как устроена отправка большого видео?» Образец: «Файл загружается отдельно, в обход канала сообщений, прямо в объектное хранилище — часто кусками, чтобы можно было докачать при обрыве. В ответ приходит ссылка. Затем отправляется обычное маленькое сообщение со ссылкой, типом, размером и превью. В фоне видео перекодируется в разные качества (транскодинг), а отдаётся пользователям через CDN.»
«Зачем CDN и что он решает?» Образец: «CDN — это сеть серверов с копиями файлов по всему миру. Он решает две задачи: ускоряет скачивание, потому что файл берётся с ближайшего к пользователю сервера, и разгружает основное хранилище, принимая на себя лавину скачиваний — особенно для популярного контента, который качают массово.»
#мессенджер #медиа #объектное-хранилище #cdn #транскодинг #подготовка-к-интервью