П'ятничний формат: Як працює Netflix



В нашому блозі на Хабре ми розповідаємо не лише про технологічні аспекти роботи хмарного сервісу 1cloud, але й порушуємо питання огранізації робочого процесу. Наприклад, зовсім нещодавно ми обговорювали роботу тех. підтримки.

Сьогодні ми вирішили урізноманітнити п'ятничну стрічку Хабра розбором матеріалів по темі пристрою сервісу Netflix, яке постачає глядачам фільми і серіали на основі технологій потокового мультимедіа.


Компанія Netflix була заснована в 1997 році Марком Рэндольфом (Marc Randolph) і Рідом Гастінгсом (Reed Hastings) в Скотс-Веллі, штат Каліфорнія. Спочатку в ній працювали 30 співробітників, які займалися наданням 925 фільмів і серіалів за передплатою. Сьогодні Netflix є провідною світовою мережею інтернет-телебачення, обслуговуючої десятки мільйонів клієнтів.

Компанія досить активно викладає в Мережу інформацію про застосовуваних технологіях, інфраструктурі і незвичайних рішеннях. Наприклад, у своєму блог співробітники Netflix розповіли про те, що компанія робить, щоб наданий контент завжди був якісним. Для цього ними була розроблена ціла методологія. Мережа доставки контенту (CDN) компанії враховує те, якими пристроями користуються її клієнти, і підтримує широкий діапазон інтернет-з'єднань – від мобільного інтернету зі швидкістю менше 0,5 Мб/с до високошвидкісного інтернету (більше 100 Мб/с).

Netflix використовує технологію адаптивного стрімінг, яка регулює якість аудіо і відео у відповідності зі швидкістю інтернету користувача, але компанія також надає клієнтам можливість встановити якість відео самостійно. Велике число комбінацій кодеків і значень бітрейту Netflix передбачає «обов'язковість кодування одного фільму 120 різними способами перед його передачею на будь-яку стриминговую платформу».

Весь процес кодування відео здійснюється в хмарі, що дає великі можливості масштабування: якщо різко виникає необхідність у обробці більшої кількості фільмів, то хмарні технології дозволяють без праці задіяти додаткові ресурси. Справедливо і зворотне – якщо потрібно, обсяг обчислювальних потужностей можна і зменшити.

Завдання по обробці довгих відеозаписів розбиваються на більш дрібні і виконуються паралельно. Це дозволяє значно скоротити час на їх виконання. На малюнку нижче показана схема процесу. Після отримання вихідного відео кодується в різних форматах і в різній якості і тільки потім потрапляє в CDN.



Netflix отримує вихідні файли з відеоматеріалами з власної кіностудії або від своїх партнерів, але це не виключає ймовірність того, що частина отриманих файлів буде мати дефекти, що виникли в процесі зберігання або багаторазової обробки даних. З цієї причини на початковому етапі перевіряється, чи відповідають исходники необхідним вимогам: так виявляється контент, який може викликати негативні враження від перегляду.

Якщо вихідний файл не задовольняє вимогам, система автоматично повідомляє партнерів компанії про проблему і запитує новий ісходник. Якщо все в порядку, прикріплюються до файлу метаданих для кодування. Щоб підвищити ефективність роботи з великими файлами (наприклад, відео з роздільною здатністю 4K), їх фрагментують – файл умовно розбивається на невеликі частини, перевірка яких здійснюється паралельно.

В ході перевірки виявляються помилки і формуються метадані, що містять часові характеристики фрагмента. По завершенню аналізу всі шматочки збираються в спеціальному посередництва, який приймає рішення про те, чи варто передавати файл на наступний етап виробничого процесу. Як результат, відео з роздільною здатністю 4K перевіряється на наявність дефектів менш ніж за 15 хвилин.



Що стосується кодування відео, то воно так само, як у випадку з перевіркою якості, здійснюється паралельно. Після успішної обробки фрагментів спеціальна програма збирає всі частини в єдине ціле.

До застосування методик паралельної обробки система обробляла фільм з роздільною здатністю 1080p протягом декількох днів. Сьогодні цей же фільм можна повністю перевірити і закодувати в різних форматах всього за кілька годин.



До того, як у систему Netflix був інтегрований контроль якості, всі помилки «спливали», коли клієнти зверталися в службу технічної підтримки. Найчастіше користувачі були сильно незадоволені, а це позначалося на фінансовому становищі компанії. Після введення системи контролю якості команда Netflix стала своєчасно виявляти всі помилки, а надійність кодування джерела, що пройшов перевірку, сьогодні становить понад 99,99%. Якщо компанія стикається з проблемою, яку не вдалося виявити за допомогою алгоритмів автоматизації, працівники приступають до розробки нових механізмів перевірки, щоб не допускати подібного в майбутньому.

На основі своєї системи отримання і доставки контенту Netflix проводить великомасштабні експерименти над відеокліпами, наприклад, порівнюючи різні типи кодеків і оптимізуючи процес кодування. словами співробітників компанії, Netflix вирішує завдання, необхідні для оптимальної поставки якісних відеопотоків, в той же час приносячи користь спільноті.

Ery Netflix Open Connect надає свої послуги більш великих інтернет-провайдерів, які мають більше 100 000 клієнтів. Спеціальне вбудоване обладнання з низькою потужністю і високою щільністю запису за певну плату може передати з сайту Netflix контент, що зберігається в дата-центах інтернет-провайдерів, тим самим скорочуючи витрати на передачу даних з Мережі. Це обладнання працює на операційній системі FreeBSD, використовуючи сервер nginx і маршрутизацію BIRD.



Моніторинг несправних серверів

На даний момент сервіс Netflix працює на кількох десятках тисяч серверів, і менше одного відсотка з них працюють несправне. Несправний сервер необов'язково відключений, і в цьому полягає основна небезпека: він відповідає на запити під час перевірок працездатності, а його системні показники залишаються в межах норми, однак він функціонує на рівні, далекому від оптимального.

Повільний або несправний сервер набагато гірше непрацездатного. Навіть малого негативного впливу може бути достатньо, щоб викликати дискомфорт у клієнтів сервісу. З цієї причини Netflix займається питаннями автоматизації пошуку несправних серверів, не виявляються системами моніторингу.

У представленому нижче відео Коді Ріу (Cody Rioux) розповідає про те, що підштовхнуло компанію займатися цими проблемами, а також ділиться технічними подробицями використовуваних алгоритмів (з прикладами).



Компанією широко використовується так званий кластерний аналіз, який є методом машинного «навчання без учителя». Вибираючи кластерний алгоритм, хлопці з Netflix зупинили свій вибір на алгоритм кластеризації просторових даних з присутністю шуму DBSCAN (Density-Based Spatial Clustering of Applications with Noise).

DBSCAN приймає на вході набір точок і маркує як точки кластера ті з них, які мають велику кількість сусідів. Точки, які знаходяться у областях з меншою щільністю, вважаються статистичними викидами. Якщо певна точка належить кластеру, то вона повинна знаходитися на певній відстані від інших точок цього кластера, яке визначається по спеціальної функції (Нафталі Харріс (Naftali Harris) у своєму блозі привів відмінну візуалізацію методу DBSCAN).

DBSCAN використовується наступним чином: основна платформа динамічної телеметрії Atlas відстежує задану метрику і формує вікно даних. Потім ці дані передаються алгоритмом DBSCAN, який повертає набір серверів з підозрою на несправність. На зображенні нижче показані дані, які надходять на вхід алгоритму DBSCAN. Область, виділена червоним – це поточне вікно.



Коли сервери визначено, управління передається системі оповіщення, яка робить одне або кілька з таких дій: зв'язатися з власником сервісу по email, відключити сервер від сервісу, не зупиняючи його, зібрати експертні дані для подальшого розслідування, зупинити сервер, дозволивши замінити його.

Неможливо ідеально точно визначити несправні сервери, однак імовірність цього досить висока. Неідеальне рішення цілком допустимо в хмарі, так як вартість помилки тут досить мала. Оскільки відключаються сервери відразу ж заміняються «свіжими», то помилкова зупинка сервера або його відключення чинить незначний вплив на систему, якщо має взагалі.

Хмарна інфраструктура Netflix постійно розширюється, а автоматизація операційних рішень відкриває нові можливості, поліпшуючи доступність сервісу і знижуючи кількість ситуацій, коли потрібне втручання людини. Визначення несправних серверів – це всього лише один з прикладів подібної автоматизації.

Рекомендаційні алгоритми

У 2009 році компанія Netflix провела конкурс під назвою Netflix Prize. Вона відкрила доступ до своїх особистих даних і дала учасникам можливість спробувати вдосконалити алгоритм передбачення оцінки, яку глядач поставить фільму, на основі оцінок інших глядачів. Команді-переможцю вдалося підняти ефективність алгоритму на 10,06%.

Що стосується рекомендаційної системи – вона складається з кількох алгоритмів, частина з яких відповідальна за процес формування персоналізованої домашньої сторінки. Наприклад, алгоритм передбачення оцінки, яку поставить фільму користувач, алгоритм ранжирування відеозаписів в кожному ряду і алгоритм угруповання фільмів.

На даний момент фільми і шоу на головній сторінці Netflix організовані у вигляді тематичних рядків (кожна з яких має певну назву), а користувачі сервісу можуть прокручувати сторінку як в горизонтальній, так і вертикальній площині. Такий підхід дає користувачеві можливість швидко для себе вирішити, чи варто ціла група фільмів його уваги, або він може перейти до наступного рядка.

Для створення персоналізованої сторінки використовується машинне навчання – тренування алгоритму проходить на підставі історичної інформації про всіх коли-небудь створених домашніх сторінках та інформації про взаємодію з ними.

У Netflix є досить великий вибір ознак, якими можна представити рядок для навчального алгоритму. Оскільки рядок – це набір відео, то можна використовувати в якості ознак всі властивості, якими вони володіють як разом, так і окремо. Це можуть бути звичайні метадані або більш корисні рекомендації, що показують, наскільки та чи інша картина буде цікава конкретному користувачеві.

Вкрай важливо при генерації сторінки яким-небудь алгоритмом оцінити її якість. Придумуючи метрики оцінки, співробітники Netflix черпали ідеї у такій сфері діяльності, як інформаційний пошук. Наприклад, компанія знайшла застосування величиною, званої «повнота» (Recall), яка є відношенням числа релевантних об'єктів (фільмів, які вибрав клієнт) у вибірці, до загальної кількості релевантних об'єктів.

Було прийнято рішення використовувати величину Rec[m;n], яка являє собою число релевантних об'єктів у перших m рядків і n колонках на сторінці, розділене на загальне число релевантних об'єктів. Таким чином, Rec[3;4] – це якість відеозаписів (для конкретного користувача), представлених на пристрої, дисплей якого дозволяє відобразити всього 3 рядки по 4 відео в кожній. Перевагою такої метрики є те, що, зафіксувавши одну з величин (m або n) і змінюючи іншу, можна побачити, як змінюється значення повноти при прокручуванні сторінки.

При формуванні домашньої сторінки також дуже важливо розуміти, як користувачі її дивляться, тобто яким точок на екрані вони приділяють найбільше уваги. Розміщення найбільш актуальних відео в найбільш популярні місця (найчастіше це лівий верхній кут екрану) повинно допомогти скоротити час пошуку фільму на вечір.



Що ж стосується різноманітності жанрів, то це ціла окрема історія. Якщо ви – користувач Netflix, то, швидше за все помічали, що буває вам пропонуються фільми дивних, часом абсурдних жанрів. Документальні драматичні фільми про борців з системою? П'єса про королівську родину, заснована на реальних подіях? Зарубіжні історії про сатаністів 80-х?

І ось що цікаво, виявляється, Netflix має 76897 різних способів опису фільмів. Компанія створила спеціальні команди, члени яких позначали метатегами кожен запропонований ним фільм. Цей процес виявився настільки складний, що учасникам видали 36-сторінкове керівництво, в якому було розписано, як оцінювати фільми за наявності сексуального змісту, кількості крові, як визначити романтичність фільму і оцінити рівень акторської гри. Оцінювалася навіть моральність персонажів.

Журналіст видання The Atlantic Алексіс Мадригал (Alexis Madrigal) вирішив розібратися в ситуації детальніше і виявив, що у Netflix абсурдно велика кількість жанрів (їх кількість перевищувала 90000). Щоб пролити трохи світла на ситуацію, Алексіс написав скрипт, який «витягнув» всі існуючі жанри з сайту компанії.

«Я відразу звернув увагу, що на сайті є фільми не всіх представлених жанрів», – відзначає Мадригал. – Наявність жанру в базі означає, що, за даними алгоритму, такі фільми можуть з'явитися пізніше, або вже є матеріали, які підпадають під опис, але ще не додано на сайт». Наприклад, категорія №91300 називалася «Добрі романтичні ТБ-шоу на іспанською мовою» і була порожньою, категорія №91307 носила заголовок «Красиві латиноамериканські комедії» і містила два фільми, а в категорії №6307 «Красиві романтичні драми» були представлені 20 фільмів.

Однак якщо спробувати проаналізувати всі жанри, то граматика Netflix стане досить прозорою. Наприклад, інформація про «оскораносности» картини завжди записується спочатку: «Оскароносні романтичні драми», але тимчасові періоди завжди йдуть в кінці: «Оскароносні романтичні драми 50-х років». Категорії, що розкривають зміст фільму, теж ставляться ближче до кінця: «Оскароносні романтичні фільми про весілля».

Виявилося, що для кожного дескриптора існує сувора ієрархія. Коротше кажучи, жанр формується за встановленим паттерну:

Звідки + Прикметник + Іменник + Заснований на… + Знятий… + Від режисера… +… + Для віку від X до Y



Всі 76897 жанрів, які знайшов бот Мадригалу, були створені з цих основних компонентів. Детальніше про процес формування «микрожанров» розповів віце-президент Netflix Тодд Йеллин. У 2006 році Йеллин з командою інженерів почав роботу над документацією, що отримала назву «Квантова теорія Netflix». У цьому контексті квант – це невеликий «пакет енергії» (мікро-тег), що є частиною кожного фільму.

Йеллин сказав, що жанри обмежуються трьома основними факторами:

  • Назва жанру не повинно перевищувати 50 знаків з-за особливостей користувальницького інтерфейсу.
  • Щоб алгоритм сформував жанр, повинна накопичитися «критична маса» контенту, який би підійшов під його опис.
  • Реєстровані жанри – синтаксично правильні.
У світі Netflix немає жанрів, складаються з більш ніж п'яти дескрипторів. Чотири дескриптора дуже рідкісні, але їх можна зустріти: «Культові страшилки про божевільних вчених 1970-х років». Три дескриптора зустрічаються досить часто: «Добрі зарубіжні комедії для невиправних романтиків». Два дескриптора використовуються дуже часто: Фільми, насичені загадками». Дуже часто зустрічаються поодинокі дескриптори: «Незвичайні фільми».

Проте магія Netflix полягає в тому, що, виявляється, не всі теги були розставлені людьми, частина з них вироблена самою системою. Наприклад, прикметник «підбадьорюючий» прикріплюється до фільмів, які володіють певним набором особливостей, найбільш важливою серед яких є щаслива кінцівка. Виходить, що «підбадьорюючий» – це не прямий тег, а обчислена категорія, заснована на наборі тегів.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.