Высокая производительность → Текстовая онлайн-трансляция при большой нагрузке

Большую роль в жизни нашего сайта играют онлайн-трансляции презентаций Apple. Помимо текстово-графической трансляции, которые делают многие русскоязычные ресурсы, мы предлагаем нашим читателям вести обсуждение в чате, а также ведем прямой аудио-эфир с комментариями всего происходящего. Как и в предыдущие разы, нашим постоянным ведущим помогали Кира Тверская (Эхо Москвы) и Эльдар Муртазин. Такой живой формат позволяет нам слышать реакцию ведущих в режиме реального времени, что согласитесь, довольно интересно.
В прошлый раз на презентации iPhone 4S мы немного оплошались, и не смогли достойно подготовиться к наплыву посетителей (к слову, было около 3500 клиентов). Главной ошибкой было то, что страница трансляции представляла собой вывод плагина Wordpress, соответственно при каждом обращении дергался не только сам интерпретатор PHP, но и вся система Wordpress. После проведения трансляции стало очевидно, что от такой позорной схемы надо избавляться.
Ходят слухи, что в марте компания Apple представит новую версию своего планшетника iPad 3. Нам повезло, и 19 января мы смогли обкатать новую схему трансляции на гораздо меньшей нагрузке, чем будет в марте. По понятным причинам, людей, заинтересованных в образовательной презентации Apple, было намного меньше.
Онлайн-трансляция у нас проводилась по всем фронтам — текстовая трансляция с фотографиями мероприятия, аудиопоток и чат, в котором люди могли обсудить происходящее друг с другом. Далее я расскажу о технологии, с помощью которой была организована текстовая трансляция.
Веб-разработка → Единый API на РНР для всех облачных push-сервисов
Приветствую всех читателей. Сейчас в веб-разработках столько трендов, что не уследишь. Но вопрос о реал-тайм взаимодействии с пользователями сайта стоит остро прочти для любого проекта. Простейший способ — поставить один из широко доступных открытых comet-серверов, например, Dklab_Realplexor, Socket.IO или Faye — что кому по душе или в зависимости от стека технологий. Правда это путь достаточно сложных проектов, где команда может себе позволить такое решение.
Для многих проектов попроще (хотя это всегда вопрос конкретики приложения) логично будет использовать сторонние решения. А проще — арендовать как услугу функционал comet-сервера. Сегодня недостатка в таких сервисах нет, так что нам есть что обозревать.
И так, сначала давайте кратко ознакомимся с существующими push-сервисами, которые позволят нам без создания и поддержки своей серверной инфраструктуры поддерживать реал-тайм общение между клиентами проекта.
Таких сервисов всего 6: Pusher, Pubnub, Partcl, BeaconPush, X-Stream.ly и ioBridge (с некоторыми особенностями). Под катом — кратки обзор всех сервисов, особенностей РНР-библиотек для них и описание библиотеки pushBridge.IO для унификации работы со всеми облачными пуш-сервисами.
Для многих проектов попроще (хотя это всегда вопрос конкретики приложения) логично будет использовать сторонние решения. А проще — арендовать как услугу функционал comet-сервера. Сегодня недостатка в таких сервисах нет, так что нам есть что обозревать.
И так, сначала давайте кратко ознакомимся с существующими push-сервисами, которые позволят нам без создания и поддержки своей серверной инфраструктуры поддерживать реал-тайм общение между клиентами проекта.
Таких сервисов всего 6: Pusher, Pubnub, Partcl, BeaconPush, X-Stream.ly и ioBridge (с некоторыми особенностями). Под катом — кратки обзор всех сервисов, особенностей РНР-библиотек для них и описание библиотеки pushBridge.IO для унификации работы со всеми облачными пуш-сервисами.
Python → TornadIO2 = Tornado + Socket.IO
Что такое Socket.IO?
Это библиотека предназначенная для организации постоянного соединения между сервером и браузером.
Главное преимущество библиотеки: она автоматически подстраивается под возможности браузера и использует наиболее эффективный транспортный протокол из поддерживаемых.
Браузер умеет веб сокеты? Отлично, будем использовать их. Браузер умеет AJAX? Будем использовать long polling. Это древний Internet Explorer? Будем использовать html file object. Ну и так далее.
О socket.io уже писали на Хабре. «Родной» сервер Socket.IO написан на node.js.
Это библиотека предназначенная для организации постоянного соединения между сервером и браузером.
Главное преимущество библиотеки: она автоматически подстраивается под возможности браузера и использует наиболее эффективный транспортный протокол из поддерживаемых.
Браузер умеет веб сокеты? Отлично, будем использовать их. Браузер умеет AJAX? Будем использовать long polling. Это древний Internet Explorer? Будем использовать html file object. Ну и так далее.
О socket.io уже писали на Хабре. «Родной» сервер Socket.IO написан на node.js.
Веб-разработка → Простая реализация long polling механизма на PHP
Сейчас довольно популярно использование Comet-технологии, «когда при которой постоянное HTTP-соединение позволяет веб-серверу отправлять (push) данные браузеру, без дополнительного запроса со стороны браузера», согласно википедии.
Реализаций этой технологии есть много разных, но я сейчас хочу остановиться на одной из них, которая называется Long Polling. В статье я разберу, что это такое и с чем его едят.
Ну а тем, кто знает, что это, возможно, будетинтересно посмотреть на реализацию, которая не использует сторонний софт для своей работы — только PHP. Зачем это нужно, если есть специальные comet-сервера, которые выдержат гораздо более высокие нагрузки, чем скрипт на PHP? Это может пригодиться, если нужно сделать небольшой проект без высоких нагрузок, а на хостинге не дают ставить сторонний софт. Ну и если мне в рамках одного задания, где как раз нельзя было использовать сторонние приложения, пришлось реализовать данный функционал, то почему бы не поделиться.
Реализаций этой технологии есть много разных, но я сейчас хочу остановиться на одной из них, которая называется Long Polling. В статье я разберу, что это такое и с чем его едят.
Ну а тем, кто знает, что это, возможно, будетинтересно посмотреть на реализацию, которая не использует сторонний софт для своей работы — только PHP. Зачем это нужно, если есть специальные comet-сервера, которые выдержат гораздо более высокие нагрузки, чем скрипт на PHP? Это может пригодиться, если нужно сделать небольшой проект без высоких нагрузок, а на хостинге не дают ставить сторонний софт. Ну и если мне в рамках одного задания, где как раз нельзя было использовать сторонние приложения, пришлось реализовать данный функционал, то почему бы не поделиться.
Веб-разработка → Faye как способ не задолбать свой сервер
Здравствуйте, хабралюди. Сегодня я хочу рассказать о том, как в одном из наших проектов мы снизили количество запросов на сервер на пару порядков за счет использования технологии Comet.
Суть проблемы: веб-приложение для службы такси, диспетчера работают удаленно (из дома, из офиса и т.п.). Перед каждым — список заказов. Состояние заказов может измениться в любой момент — водитель взял заказ, водитель отказался, клиент отказался, другой диспетчер завел новый заказ. Очень важно чтобы диспетчер видел картину практически в реальном времени, поскольку в час пик звонки идут один за другим без перерыва. Вначале это было сделано через вызывающийся периодически (setTimeout) AJAX запрос, который получив с сервера отрендеренный список текущих запросов заменял содержимое div'а. Для 1-2 разработчиков, и пары тестеров это казалось нормальной идеей — 1-2 запроса в секунду не сильно напрягали. По результатам компромисса между актуальностью и снижением нагрузки на сервер определились что будем дергать сервер раз в 3 секунды.
Суть проблемы: веб-приложение для службы такси, диспетчера работают удаленно (из дома, из офиса и т.п.). Перед каждым — список заказов. Состояние заказов может измениться в любой момент — водитель взял заказ, водитель отказался, клиент отказался, другой диспетчер завел новый заказ. Очень важно чтобы диспетчер видел картину практически в реальном времени, поскольку в час пик звонки идут один за другим без перерыва. Вначале это было сделано через вызывающийся периодически (setTimeout) AJAX запрос, который получив с сервера отрендеренный список текущих запросов заменял содержимое div'а. Для 1-2 разработчиков, и пары тестеров это казалось нормальной идеей — 1-2 запроса в секунду не сильно напрягали. По результатам компромисса между актуальностью и снижением нагрузки на сервер определились что будем дергать сервер раз в 3 секунды.
PHP → Моделируем полёт PHP на крыльях Erlang
В данной статье изложены размышления и фантазии на тему «как можно было бы скрестить Erlang и PHP, чтобы случилось вселенское счастье», а не описание готовой технологии или продукта. Впрочем, мы намерены это реализовать, скорее всего, в форме open-source проекта, если, конечно, уважаемая хабра-аудитория не отговорит :) Собственно, одна из главных задач этой статьи — понять, насколько идея интересна и потенциально полезна широкому PHP-сообществу. Кстати, некоторые из проблем, обсуждаемых в статье, справедливы и для других популярных скриптовых языков (тут я подразумеваю Ruby и Python), так что предлагаемое решение, возможно, будет актуально и для них.Веб-разработка → Создание Comet-приложения с использованием Ajax Push Engine из песочницы
Введение
В этой статье я хочу поделиться опытом построения Web-приложения, работающего в реальном времени. Не буду углубляться в теорию, так как обзоры технологий уже были на хабре, и в сети их при желании найти не проблема. Предлагаю заняться непосредственно практикой.
Comet
Модель Comet позволяет создавать асинхронные Web-приложения, реагирующие на данные, которые приходят с сервера в реальном времени. В данном случае для ее реализации используется технология Long-polling на фреймворке Ajax Push Engine (APE). Суть технологии состоит в том, что браузер подключается к серверу и ждет до тех пор, пока не появятся данные. Как только они появляются, клиент их принимает и подключается снова. Если никаких данных не поступает, соединение разрывается после тайм-аута и снова устанавливается.
APE

APE представляет из себя программный комплекс с открытым исходным кодом, предназначенный для Ajax Push. Система включает в себя веб-сервер и Javascript Framework. APE позволяет передавать в браузер любые данные в реальном времени без каких-либо дополнительных приложений на стороне клиента. По заявлениям создателей свободно выдерживает нагрузку в 100000 соединений.
Веб-разработка → Comet — обзорная статья
Данная статья написана исходя из собственного опыта и является скорее поводом к обсуждению технологии, нежели к попытке полноценно осветить тему :)
Comet неологизм, описывающий модель работы веб-приложения. В обычном цикле обработки запроса, клиент инициирует соединение и запрашивает интересующий его документ. После отдачи данных, связь разрывается. В случае с Сomet, сервер инициирует соединение и отправляет клиенту сообщение. Типичный пример Comet это оповещения в Facebook, Twitter, чат в Gmail и др.
Что такое COMET?
Comet неологизм, описывающий модель работы веб-приложения. В обычном цикле обработки запроса, клиент инициирует соединение и запрашивает интересующий его документ. После отдачи данных, связь разрывается. В случае с Сomet, сервер инициирует соединение и отправляет клиенту сообщение. Типичный пример Comet это оповещения в Facebook, Twitter, чат в Gmail и др.
Я пиарюсь → Веб-Преферанс. Месяц спустя
Месяц назад, мы уже писали про старт нового проекта клуба интеллектуальных игр «Трельяж». Сервис успешно выдержал хабраэффект, благодаря которому пришла тысяча игроков, и выдвинула множество предложений по улучшению и развитию проекта. Все они были услышаны, и многие из них реализованы.

За последний месяц на сервере было сделано: 22 обновления, зарегистрировалось 1043 игрока, сыграно более 500 игр, закрыто более 100 тикетов в багтрекере.

За последний месяц на сервере было сделано: 22 обновления, зарегистрировалось 1043 игрока, сыграно более 500 игр, закрыто более 100 тикетов в багтрекере.
Я пиарюсь → Реализация Polling на Google App Engine
Хочу пропиарить свою небольшую игрушку, которую я написал на Python, которая использует App Engine в качестве платформы, и в которой я реализовал comet через обычный polling.

Геймплей — казуальная разновидность risk-игр. Все банально, захватите мир и станете победителем. Итак, знакомьтесь: gumwars.com.
Подкатом — подробности реализации и расчет стоимости поддержки на App Engine.

Геймплей — казуальная разновидность risk-игр. Все банально, захватите мир и станете победителем. Итак, знакомьтесь: gumwars.com.
Подкатом — подробности реализации и расчет стоимости поддержки на App Engine.