Дима Кожевин Дима Кожевин «Знание – сила»: конференция PHPCONF 2009 (часть 2) 12 Ноябрь 2009, 18:30 теги: конференции, обучение, технологии

Как мы и обещали, продолжаем неторопливый рассказ о конференции PHPCONF 2009. Еще один мастер-класс из тех, что проходили в первый день конференции:

Использование Silverlight на PHP-сайте с сотнями тысяч пользователей

Сергей Пугачев (sportbox.ru — официальный сайт телеканала «Спорт»)

Несмотря на многообещающее название, доклад не нес в себе ничего по теме.

Для начала Сергей просветил несведущих, что же такое Silverlight. В двух словах — эта штука пиарится как «убийца  flash». Технология молодая, но уже может соперничать с  flash.

Меня заинтересовало, что писать silverlight-приложения можно на любом из языков, поддерживаемых в .NET фреймворке, например, на IronPython. Но после мастер-класса я поизучал материалы на тему разработки silverlight-приложений на платформе MacOS и решил: «да ну его в пень». Так как .net поддерживается только на  Windows системах, то нужно использовать открытую реализацию .net для Unix систем под названием Mono. Таких удобных инструментов разработки, как Microsoft Expression Blend, разумеется, тоже нет для платформ, отличных от Windows. Исходя из всего этого, я решил поучить flash :).

Вернемся к мастер-классу. Как только Сергей продемонстрировал несколько простых примеров silverlight-приложений, публика сразу завелась и попросила показать «Диспетчер задач», чтобы увидеть загруженность процессора :) Я вообще не завидовал докладчику, так как почти все выступление слушатели стебались над Microsoft и задавали каверзные вопросы. Сергей явно терялся и нервничал, но устоял, молодец. На фундаментальный вопрос: «Что все-таки есть в silverlight, чего нет во  flash» Сергей не смог дать убойного ответа, но продемонстрировал несколько технологий: 1) Smooth Streaming 2) Deep Zoom.

Smooth Streaming:

Существует несколько способов проигрывать видеофайлы на сайтах:

1. Прогрессивная загрузка — при таком способе видеофайл загружается на компьютер пользователя и начинает проигрываться в зависимости от того, какая часть загружена (не получится взять и отмотать на середину видео,  если оно еще не загрузилось до нужной точки). То есть если пользователь просмотрел только небольшую часть видео, и оно ему стало неинтересно, то запросто может получиться так, что пока смотришь начало, весь видеофайл будет загружен на компьютер (а он может весить хоть 300 Мб). Конечно, это зависит от ширины интернет-канала пользователя :). Получается, что впустую гонялся трафик между пользователем и сервером, и имела место лишняя нагрузка на сервер. Очевидно, что этот вариант организации видеохостинга не самый лучший, но несмотря на недостатки, этот способ - самый популярный в рунете.

2. Streaming  и  HTTP Streaming — гораздо лучшим вариантом вещания видео является Streaming. Он лишен всех пакостей прогрессивной загрузки, но для его использования необходимы специальные программные средства (Streaming-сервер). HTTP Streaming  - нечто среднее между  предыдущими двумя способами. Представляет из себя ту же прогрессивную загрузку, но фича в том, что пользователь может отмотать хоть на конец файла и смотреть, не загружая все ненужное. Реализуется это довольно просто: видеоплеер посылает HTTP-запрос к серверу, содержащий в себе позицию, на которую нужно отмотать. Сервер принимает запрос, берет нужный файл и отдает кусок, начиная с переданной позиции. Для реализации этого способа вещания видео нужно соблюдать два условия. 1) Сервер должен уметь «отматывать» видео. Для этого можно использовать, например, web-сервер Nginx с установленным и настроенным модулем http_flv_module (для проигрывания flv видео). 2) Видеофайл должен быть «прошит» ключевыми кадрами, по которым и будет ходить Nginx для перемотки.

Smooth Streaming предлагает совсем иной подход. Сразу скажу, что для работы необходим сервер на базе Windows и web-сервер IIS 7.

Смысл в том, что вы получаете видео в том качестве, которое позволяет загруженность процессора и ширина канала, — для того чтобы видео не «тормозило», например. То есть если вы качаете  что-то через торрент-трекер, то канал, скорее всего, будет забит, и передача видео будет затруднена. Или, например, вы запустили сложные вычисления. Несмотря на это, видео будет проигрываться без проблем, но с низким качеством. Перестали качать и считать — получаете видео в лучшем качестве.

Реализуется это так: Silverlight-приложение каждые 2 секунды шлет http-запросы серверу, содержащие информацию о загруженности канала и процессора. При этом никакой прогрессивной загрузки — то есть видео отдается порциями по 2 секунды и не будет загружаться лишняя часть, если вы посмотрите только 10 секунд. Перематывается, разумеется, тоже все быстро и легко. На сервере все выглядит примерно так:

  1. Там лежат файлы одного и того же видео, но с разным битрейтом (качеством)
  2. Сервер принимает запрос и на основе данных о процессоре и канале выбирает нужный видеофайл и отдает 2 секунды видео. И так - каждые 2 секунды.

Плюс в этом один — удобство пользователя :)

Минусов несколько:

  1. Растет размер дискового пространства, необходимого для хранения видео, так как нужно хранить несколько файлов одного видео в разных битрейтах.
  2. Каждые 2 секунды сервер бомбится запросами для получения следующих 2 секунд видео.
  3. Сервер на базе Windows  ;)

Microsoft утверждает, что несмотря на первые 2 минуса, нагрузка на сервер в общем снижается — по сравнению с прогрессивной загрузкой и streaming. Как по мне — это сомнительно. Все-таки это Microsoft :) Тут можно вспомнить, как Microsoft уверяли всех, что IE8 — самый безопасный браузер. И даже нарисовали таблицу, сравнивающую IE8 с другими популярными браузерами, — в которой тааааак наврали, что потом их долго носом тыкали :)

На этом хватит о первом дне :) Я посетил еще 2 технических мастер-класса, но не думаю, что стоит их описывать.

Однако впереди у нас — день второй!