Выбрать главу

Когда пользователь считает, что просматривает "живую" веб-страницу, например постоянно обновляющуюся ленту новостей Facebook или прямую трансляцию выборов от New York Times, на самом деле он просто получает часто обновляемые страницы. На самом деле происходит следующее. Для начала устройство пользователя делает запрос на сервер Facebook или Times через браузер или приложение. Затем сервер обрабатывает запрос и отправляет обратно соответствующий контент. Этот контент включает в себя код, который запрашивает обновления с сервера через определенный интервал времени (скажем, каждые 5 или 60 секунд). Более того, каждая из этих передач (с устройства пользователя или с соответствующего сервера) может проходить через различные сети, чтобы добраться до адресата. Хотя кажется, что это живое, непрерывное и двустороннее соединение, на самом деле это просто пакеты односторонних данных, с различной маршрутизацией и неживые. Та же модель применяется к приложениям, которые мы называем "мгновенными сообщениями". Пользователи и серверы между ними на самом деле просто пересылают друг другу фиксированные данные, при этом часто запрашивая информацию (отправку сообщения или квитанции о прочтении).

Даже Netflix работает не непрерывно, хотя термин "потоковое вещание" и целевой опыт - беспрерывное воспроизведение - говорят об обратном. На самом деле серверы компании отправляют пользователям отдельные порции данных, многие из которых проходят по разным сетевым маршрутам от сервера до пользователя. Часто Netflix даже отправляет контент пользователю раньше, чем это необходимо - например, на дополнительные 30 секунд. Если произойдет временная ошибка в доставке (например, определенный путь будет перегружен или пользователь на короткое время потеряет соединение с Wi-Fi), видео продолжит воспроизведение. Результатом подхода Netflix является доставка, которая кажется непрерывной, но только потому, что она не является таковой.

У Netflix есть и другие хитрости. Например, компания получает видеофайлы от нескольких месяцев до нескольких часов до того, как они станут доступны зрителям. Это дает компании возможность провести обширный анализ на основе машинного обучения, который позволяет уменьшить (или "сжать") размер файла, анализируя данные кадра, чтобы определить, какую информацию можно отбросить. В частности, алгоритмы компании будут "наблюдать" за сценой с голубым небом и решать, что, если пропускная способность интернета зрителя внезапно снизится, 500 различных оттенков голубого можно будет сократить до 200, или 50, или 25. Аналитика стримера даже делает это на основе контекста, понимая, что сцены с диалогами могут быть более сжатыми, чем сцены с быстро развивающимся действием. Кроме того, Netflix будет предварительно загружать контент на локальные узлы. Если вы попросите новый эпизод "Stranger Things", он будет находиться всего в нескольких кварталах от вас и, следовательно, будет доставлен сразу же.

Вышеописанные подходы работают только потому, что Netflix - это несинхронный опыт; вы не можете ничего "предварительно сделать" для контента, который производится в прямом эфире. Именно поэтому прямые видеопотоки, например, CNN или Twitch, значительно менее надежны, чем потоки по запросу от Netflix или HBO Max. Но даже у стримеров есть свои хитрости. Например, передача обычно задерживается на две-тридцать секунд, а значит, остается возможность предварительно отправить контент в случае временной перегрузки. Рекламные паузы также могут использоваться как сервером контент-провайдера, так и пользователем для восстановления соединения, если предыдущее оказалось ненадежным. Большинство видео в реальном времени требует только одностороннего непрерывного соединения - например, от сервера CNN к пользователю. Иногда соединение бывает двусторонним, как в случае с чатом Twitch, но при этом передается лишь небольшой объем данных (сам чат), и он не имеет критического значения, поскольку не влияет непосредственно на происходящее в видео (помните, что это, скорее всего, произошло на две-тридцать секунд раньше).

В целом, очень немногие онлайн-проекты требуют высокой пропускной способности, низкой задержки и постоянного подключения, кроме многопользовательских виртуальных миров с визуализацией в реальном времени. Большинству впечатлений достаточно одного или, в крайнем случае, двух из этих элементов. Высокочастотным биржевым трейдерам (и особенно высокочастотным торговым алгоритмам) требуется минимально возможное время доставки, поскольку это может быть разницей между покупкой или продажей ценной бумаги с прибылью или убытком. Однако сами ордера являются простыми и легкими и не требуют постоянного соединения с сервером.