Как стать автором
Обновить

Комментарии 39

Вчера в комментариях просили рассказать о реальных use-case использования Tarantool.
Вот и один из реальных примеров, правда еще на предыдущей версии Тарантула. Сервис в проде (cloud.mail.ru).

Ряд сервисов (например, YouTube, социальные сети и прочие) конвертирует пользовательское видео в пригодные для воспроизведения форматы сразу после загрузки. Только после окончания конвертации ролик становится доступным для просмотра, но оригинал при этом удаляется.

Выделенное неверно. Оригинал доступен для скачивания через google.com/takeout
Спасибо за замечание, текст поправлен
Да, до последнего бита. Можете провести эксперимент самостоятельно: загрузить видео, забрать из takeout и сверить хэш-суммы.
Понятно, что у облачного файлового хранилища отношение watch qps / corpus size гораздо меньше, чем у специализированного видео-хостинга, но неужели CPU настолько дешевле хранилища, что вы даже уже перекодированные куски видео удаляете?
Мы удаляем лишь те кусочки, к которым не было обращений некоторое время. Если какой-то кусочек не запрашивали скажем сутки, то весьма вероятно, что в следующий раз за ним придут не скоро, или вообще никогда не придут.
Сейчас у нас довольно большой запас по CPU + время конвертации весьма мало, поэтому такая стратегия показывает себя хорошо.
А у вас перемотка идет не на ключевой кадр, и от этого вся картинка идет зеленым при перемотке.
У нас ключевые кадры сбрасываются строго раз в секунду, и перемотка должна работать тоже с точностью до секунды, известных багов про это мы пока не знаем.
Пожалуйста, напишите мне в личку или на m.andreev@corp.mail.ru подробности: ОC, браузер/версия приложения, email, по возможности — ссылка на файл, с которым наблюдались проблемы.
Вообще вы бы там лучше биткойны майнили, а не занимались одинаковыми бессмысленными вычислениями каждый день :)
Было б неплохо, если бы вы webdav реализовали
Кстати, у них там что-то изменилось — теперь вместо ошибки просит пароль, только мой аккаунт не принимают. Либо доступ дали тестерам, либо — владельцам платных аккаунтов (попробуйте кто-нибудь, отпишитесь)
Сделайте лучше статью «Криворукие во всем: как мы повесили две вывески друг перед другом»

image
так это ж отказоустойчивость
это когда сказать нечего, а «обосрать» хочется?
Отличная техническая статья, а вы вывеску явно не эти люди вешали и даже рядом не стояли (максимум мимо проходили когда ее рабочие вешали, причем скорее всего уткнувшись в телефон).
В обще Mail.ru много всего хорошего про технические аспекты рассказывает и выкладывает, за что им спасибо.
Уж не знаю, что хорошего в статьях мэйл.ру, но все их конечные продукты выглядят примерно также, как и эта вывеска.
А мне нравится. Раньше не нравилось, но с тех пор прошло много времени и они изменились.
ну так вы почитайте статьи, они интересные, даже если конкретно этим не занимаешься.
а еще они проводят встречи, за все не знаю, но я был на Встреча по web-разработке. Отличное выступление разработчиков, рассказывали что использовали, как решали проблемы взаимодействия команд и управления кодом — без пафоса и гонора, рассказывали боль и проблемы с которыми сталкивались, какие шишки набивали.
Мы же тут не продукты обсуждаем, а вполне конкретное техническое решение.
Если Вы хотите рассказать какие плохие продукты они делают — напишите статью.
Коллеги, а сколько корова дает молока видео трафика исходящего?
От 200 мбит до 1.5 Гбит в зависимости от времени суток, среднесуточно около 850 мбит/с.
Эх, в лохматом 2008-м, помню, похожее чудо примерно так уже и работало :))) www.kip.ru/realtime/2008/11/smooth-streaming.html Потом так много где стало. Молодцы — хорошо сделали. Работает здорово!
Конвертация просто на CPU идет? Рассматривались ли какие-то специализированные аппаратные варианты?
Да, только на CPU, и нас пока это устраивает.
Немного смотрели в сторону использования GPU, но для этого пришлось бы ставить отдельные сервера для конвертации, т.к. на доступных стораджах (которые уже есть, их много и на которых есть свободное процессорное время) нет подходящих для этого GPU.
А что прозойдет, если я загружу какое-нибудь видео, а потом запощу его куда-нибудь в твиттер, где 100к подписчиков и примерно 1000 из них кинется смотреть этот файл одновременно?
Ничего страшного :)
У каждого кусочка есть поминутный счетчик запросов к нему за последние 5 минут, и на основе этих данных принимается решение о популярности кусочка (сейчас критерий это «за последнюю минуту больше N запросов») и в случае если он становится популярным, то происходит его распространение на другие сервера.
Т.е. непопулярные кусочки отдаются только с одного сервера, и если запрос приходит на другой фронт, то он просто переадресуется, а для популярных кусочков любой фронт может отдать его из своего локального кэша.
А можно Ваш патч к ffmpeg где-то посмотреть?
Вот чес-слово, лучше бы вы облаку дали быть хранилищем, а не видеохостингом — а для этого немалые силы не тратили бы на видео, а допатчили вашу реализацию webdav и выполнили бы свое обещание, дававшееся неоднократно и здесь, и в личных ответах ТП, что webdav скоро-скоро будет-будет.

Не в обиду, и, конечно, обещанного три года ждут, но и облако работает с декабря 2013 (в то время, плюс-минус, WebDav, кстати, работал), так что как раз третий год начинается — как думаете, дождемся ли?

P.S. Догадываюсь, что dav могут открыть только для юзеров платных аккаунтов. Но тут свои грабли: доверие к mail.ru. Не у всех оно есть, как раз из-за таких вот обещаний (а также всяких лимитов http://habrahabr.ru/post/272661/ в безлимитных ящиках).
А им-то самим webdav — зачем?
Ну с той же пользой, что и проигрывание видео )

Я понимаю, что облако позиционируют как хранилку для всей цифровой жизни, а заодно и для работы, и под это пилят просмотр. Но, серьезно, кто-то из нас верит, что оно проживет 100 лет? А 50? А 10? А на год-два копировать туда-сюда — стоит ли оно того? Причем еще не берем во внимание шанс не найти свои файлы, а потом получить ответ от ТП со ссылкой на TOS, а иногда и припиской «попробуйте сейчас».

Это я к тому, что любые фичи кто-то делает, и кто-то заказывает. Мне лично внешний жесткий диск с TLS был бы нужнее, чем чистое «облако» (я тогда сам буду понимать, как и куда синкается; верить же в алгоритмы облачного загружателя я побаиваюсь). Видео же я лучше локально скачаю и потом посмотрю: у меня просто нет супербольших файлов, а небольшие даже на SSD всегда поместятся.
Я думаю, они там не рассчитывали на продвинутых гиков, которые принесут к ним свои бэкапы. Поэтому и не делают webdav. Они думали, что у ним придут тихие-спокойные end-user'ы, которые не будут заливать терабайты данных и требовать webdav'ов и прочих красот, тихо перенесут свою почту, будут тихо смотреть рекламу и приносить копеечку, Гики с запросами на webdav, думаю, там не очень нужны. Отсюда и отсутствие какой-либо инициативы в этой области (как подтверждение моей гипотезы). Нужно ли нести к ним свои данные гикам при такой их мотивации? Не знаю. Вряд ли. Есть много других мест, более технологичных. Зачем страдать-то? :)))
Вы наверняка правы. Только вот возьмем облако: хорошо, когда у меня есть пяток устройств с безлимитной памятью, в которые я мечтаю заливать то же, что на них всех лежит. Сферическая синхронизация, да, в вакууме.

В жизни все проще и грустнее. На телефоне памяти/флешки свободно N Мб, на компе — M Мб, на еще одном компе — S Мб. Какие бы эти числа не были, я хочу держать на каждом устройстве только нужные на нем данные. Скажем, на телефоне только в дальнейшем нужные фото, на компе одном — все-все, а на третьем, где SSD, тоже, только нужные, но немного другие, чем на телефоне. В синхронизаторе cloud.mail.ru есть выбор, какие папки синхронизировать, но, если папку сначала добавить в список синхронизации (чтобы она в облако улетела), то потом, при исключении из списка синхронизируемых (чтобы не заниматься синхронизацией ее в дальнейшем) папка/файлы удаляется на локальной машине. И, наоборот, при удалении файла локально, он удалится в облаке. И, обращаю внимание, точность указания — до папки, так что нельзя по одному файлу отправлять в облако, а затем удалять только локально (что было бы для фото полезно).

Т.е. вариант «наснимать снимков на телефоне, загрузил их на комп1, а часть на комп2, а потом на телефоне постирал ненужные» — такое не прокатит. Фактически, есть два рабочих подхода: загружать через веб-морду (но цель-то была сделать seamless работу, нет?), либо создать папку в папочке, из которой беред данные cloud-синхронизатор, положить (скопировать!) в нее контент, дождаться окончания синхронизации, убрать папку из списка синхронизируемых (она локально удалится, в облаке же данные останутся). И то, и то требует сил, и то, и то потенциально ведет к потере данные при неверном движении. Браузером, однако, пользоваться понятнее и проще, потому что там работаешь просто с файлами, а во втором варианте надо еще думать, что из-за чего произойдет, и что можно потенциально потерять.

И это, заметьте, я описываю работу с данными в режиме как раз цифрового дневника — т.е. как раз в сценарии, когда и просмотр видео в браузере актуален, и вроде как в котором синхронизация пригодится.

Просто синхронизация — отличная вещь, но надо понимать, что если в телефоне 16 Гб флешки, а в компе — 1Тб, то юзер должен долго попрыгать, чтобы синхронизация работала. Сделает ли это не гик? Может быть, но не факт.
если попросить его сконвертировать тот же файл сначала с 0 по 10 секунду, а потом (отдельным запуском FFmpeg) с 10 по 20 секунду, и сделать правильный плейлист, то при переходе с одного файла на другой (примерно на 10-й секунде) мы услышим заметный звуковой щелчок. Мы потратили не один день на перебор различных параметров запуска FFmpeg, но ни к какому результату не пришли. Пришлось влезть внутрь и написать небольшой патч, который при передаче определенного параметра командной строки исправляет этот недочет, возникающий из-за особенностей кодирования аудио- и видеодорожек.
Как в итоге поправили, просто начинаете кодировать аудио чуть раньше и обрезаете его до нужного фрейма, или как-то умнее? Я тоже натыкался на эту проблему, но из-за того, что мне аудиодорожку нужно кодировать целиком, а не по кускам, и кодируется она на порядки быстрее видео, решил, что мне достаточно кодировать аудио отдельно.
Да, что-то подобное: при конвертации захватывается чуть больше и потом обрезаются лишние аудио-фреймы
Немного не понятен момент:
конвертеры, готовые получить на вход HTTP-ссылку на файл

(конвертация) работает на наших стораджах в специальной изолированной среде

Если конвертация на тех же машинах, где хранятся файлы, то зачем HTTP-ссылки? Или изоляция подразумевает, что доступ вовне есть только по HTTP, и как раз так исходники и попадают внутрь? (Вариант, что конвертит не тот сервер, который хранит файл, тоже, в принципе, возможен...)

И, выходит, что патчик для «медленного mov» нужен как раз для работы с этими HTTP-ссылками: были б файлы локальными, было бы проще.
конвертит не тот сервер, который хранит файл

в первую очередь из-за этого, точнее конвертит не обязательно сервер с файлом (но может так случиться, что это будет и он).
Мы решили сделать такой вариант, т.к. он более универсален и позволяет ставить конвертеры где угодно, где есть CPU (а не исходный файл) — в нашем случае это стораджа.
Это так же позволило не наступить на возможную проблему, когда несколько популярных тяжелых для конвертирования файлов оказались на одном сторадже и их смотрят прямо сейчас.

так исходники и попадают внутрь

и это тоже верно, прямого доступа у изолированного окружения к файлам нету
В системе видеонаблюдения с тысячами камер делали конвертацию на лету без кэширования, т.к. вероятность того, что два оператора будут смотреть одинаковый фрагмент стремится к нулю. При этом тем клиентам, которые способны декодировать оригинальное видео, пересылали именно его, чтобы не занимать ресурсы на конвертацию. От стриминговых решений от Microsoft и Apple отказались, т.к. был необходим мгновенный отклик — видео на клиенте должно идти максимум через 200 мс.

В вашем случае непонятно зачем пережимать в сценариях «снял на телефоне, кинул в облако и удалил». Очевидно, что телефон имеет необходимые декодеры для своего же видео. Могли бы пояснить этот момент?

А еще любопытно узнать как часто случается, что более одного пользователя смотрят один и тот же ролик или даже фрагмент? Кажется, что в большинстве сценариев люди сами смотрят свои же ролики.
Очевидно, что телефон имеет необходимые декодеры для своего же видео.

Для своего же видео — да, имеет. Но даже в этом случае возможна ситуация, что сняли тяжелое (по объему) 1080p видео и хотим посмотреть его из облака при подключении к 3G — в нашем случае проблем с этим не будет, видео просто будет отдаваться в 360p или даже 240p — и пользователь все же будет иметь возможность посмотреть его без больших задержек.
Если же сняли на один телефон или на видео-камеру, а хотим посмотреть на другом телефоне, то в довольно существенном проценте случаев без конвертации не обойтись.

как часто случается, что более одного пользователя смотрят один и тот же ролик или даже фрагмент

Запросов, на которые у нас уже есть готовый кусочек (не важно — этим же пользователем созданный или кем-то еще, ведь у нас дедубликация по хэшам файлов) у нас около 30%
Интересно, сколько времени заняла разработка такого функционала и сколько разработчиков было задействовано?
Если не можете ответить, то всё равно спасибо за интересную статью.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий