Архив

Публикации с меткой ‘PHP’

Я убью тебя, Google Reader! Высоконагруженный сервис своими руками. Статья для журнала Хакер.

18 июля 2010 Comments off

Статья написана специально для журнала Хакер и опубликована на сайте журнала (в несколько сокращенной и отредактированной версии). Ниже я публикую свой оригинальный вариант,  без правок или ограничения на объем материала.

Шеф, что делать будем?

Получение новостей через фиды или RSS-ленты сегодня самый быстрый и простой способ следить за жизнью любимых сайтов или блогов. Твиттер, конечно, крут, но рсс-кам ещё рано умирать. Сегодня у тебя большой выбор - RSS можно читать кучей способов, начинаю  от почтового клиента (да, в Mozilla Thunderburd 3 встроен клиент) и браузера, заканчивая специальными программами и онлайн сервисами. Самым крутым из таких будет, конечно, Google Reader. Пользоваться им вроде бы легко - вводишь адрес сайта и отныне просто заходи и читай новости, никакой кнопки Refresh жать не надо, гугл сам позаботится о том, чтобы найти новые новости и показать их тебе. Но при этом у него есть много врождённых проблем, например, не очень интуитивный интерфейс, а также часто сильные задержки в получении новых сообщений. Особенно это касается лент из Твиттера. Ага, популярнейший сервис также вовсю использует RSS, транслируя туда твои сообщения. Но ведь ты уже в курсе, как быстро там все изменяется - написал о новом хаке винды, а через минуту уже весь интернет с криками "ура!" бросается ломать империю Билли. Но читатели через Google живут в параллельном мире и просто тормозят - там лента из твиттера обновляется часто с задержками в минуты и часы, непорядок!

Давай напишем для себя любимого (ну и друзей, куда ж без них) простую онлайновую читалку RSS-новостей. Фичами будет возможность автоматически находить фиды с любого адреса (если они там есть, конечно) и  полное игнорирование нюансов форматов ( мы сможем работать с любым фидом). Кроме этого, научимся высшему пилотажу РНР-программирования - созданию распределённых систем. Когда у тебя две-три ленты, с ними справиться даже твой нетбук, но когда друзья поймут, что гугл теперь отстой, и начнут добавлять свои ленты, станет плохо. А мы сделаем так, что читалка будет работать с любым количеством лент, просто успевай доставлять сервера! Помнишь, мы не раз рассказывали тебе про облачный компьютинг, Amazon EC2 и прочие заморские технологии? Вот с их помощью это сделать очень легко - нажав кнопочку и у тебя уже два сервера вместо одного. Используя РНР и немного магии, ты сможешь заставить работать на наше благо столько серверов, сколько достанешь. Читать далее...

Технология Comet для построения быстрых веб-приложений. Статья в журнал Хакер

31 мая 2010 Comments off

Статья написана специально для журнала Хакер и опубликована на сайте журнала (в несколько сокращенной и отредактированной версии). Ниже я публикую свой оригинальный вариант,  без правок или ограничения на объем материала.

Comet… чё за …?

Сегодня все в Интернете хочет быть быстрым, очень быстрыми. Ты даже не успел загрузить страничку в Facebook или вКонтакте, а твои друзья уже узнают, что ты онлайн и пытаются вызвать в чат. На других сайтах ты можешь видеть уже не просто ники пользователей, а сразу начать с ними общаться – и это не просто личные сообщения, как было в форумах в лихих 90-х, а полноценные чаты типа аське. Добавил Вася новую статью в блог, ленту новостей которого ты читаешь? Она должна сразу появиться у тебя в ридере, если, конечно, ты сейчас его читаешь. Задержка, любое промедление сразу ставит крест на любом ресурсе, нацеленном на общение. Посмотри на всякие конференции стартапов и первые страницы популярных ресурсов  - везде умные слова вроде real-time, collaborative и communication. Что за …?

Отвечаю! Если раньше веб-приложения были, как и обычные сайты – просто страницы и ты должен был ходить по ссылкам, чтобы обновить информацию, разве что по таймеру обновлялись фреймы, то теперь все иначе. Все хотят, чтобы информация приходила к нам сама в момент появления, а не ждать и тыкать сто раз в рефреш, ожидая, когда же твой друг наконец появиться в сети. Такие требования поставили перед разработчиками новые задачи, существенно усложнив жизнь, но, а что делать? Так и родилась технология Comet или, по простому, набор приёмов и средств для обновления данных (страниц или их элементов) в браузере без твоего участия. От тебя надо только залогиниться и зайти на сайт – в социальную сеть, онлайн игру или другой ресурс. От этого момента, если какая-то новая информация появляется, сервер сам отправит твоему браузеру новые данные. Читать далее...

Горячая замена кода (code hot swapping) в РНР

24 января 2010 Comments off

Приветствую читателей. Погода за окном просто требует чего-то горяченького, поэтому воспользовавшись возможностью что-то по исследовать в свободное время, я решил подумать - а можно ли не останавливая скрипт, подменить функцию, которая выполняется? С таким требованием я встретился чуть ранее, при разработке нашего стартапа. У нас был один из внутренних серверов, который заведовал всеми действиями между пользователями в реальном времени. Это обычный РНР-демон-роутер, который обрабатывал запросы от клиентских запросов (внутри сервера), но была одна сложность - в случае, когда я что-либо изменял в коде сервера или обработчиков отдельных команд, демон приходилось перезагружать, что означало отключение текущих клиентов и потеря информации о состоянии сервера (этот вопрос решаемый, конечно). То же самое было в случае ошибки в коде - все подключенные пользователи сразу это чувствовали на себе (хорошо, что все они такие же разработчики, а не реальные клиенты). Можно ли этого избежать?

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

Получить RSS-ленты из страницы? Так точно!

2 января 2010 Comments off

Billboard_Feed_256x256Приветствую своих читателей! С Новым Годом! Первой темой, который мы откроем этот год жизни блога, будет следующая задача. Дано - система, схожая с Google Readers, которая принимает от пользователя некоторый адрес и должна обеспечить просмотр (а позже, и подписку) доступных там RSS-фидов. Задача осложняется тем, что от пользователя нельзя требовать ввода именно полного адреса ленты, да и даже просто адреса сайта или произвольной страницы - он может быть введен в совершенно разных вариантах, полностью или частично и т.п. Самих лент на странице также может быть более одно, часто нескольких форматов сразу (а то и не быть вовсе). Поэтому нам надо выбрать из всех доступных лент последние сообщения и отобразить пользователю, чтобы именно он выбрал в конечном итоге одну ленту, которая его интересует. Открою секрет - да, это только начало и в последующих статьях мы вместе постоим несколько уменьшенную версию системы агрегации и чтениях новостей. Но сегодня попробуем решить первую задачу, без которой наша "читалка" просто не сможет работать, какие бы дальше технологии не применялись.

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

Читать далее...

SignalsyMQ — простая и быстрая очередь сообщений на PHP+Redis (и немножко Zend Framework)

12 декабря 2009 3 комментария

1250198491_signalПриветствую своих читателей. Знаю, что давно не писал, обычно активность проявлял только в твиттере - как оказалось, это очень удобно для постоянных постингов, когда на основной блог не хватает времени. Кстати, кроме официального твиттера блога (@abrdev) я открыл еще один  - @phpatcloud, в котором буду собирать ссылки на все материалы по теме РНР и Cloud Computing. Эта тема достаточно актуальная, в том числе и для меня, так как на основной работе мы сейчас делаем серьезную систему, которая как раз и базируется на облачном хостинге (от Amazon) и платформе РНР (мой внутренний продукт, Signalsy и Zend Framework). Кому интересно - подписывайтесь, комментируйте и ретвитьте, буду благодарен.

А теперь хотел бы рассказать, собственно, о причинах некоторых задержек в пополнении блога статьями. Причина простая - как уже анонсировал, я веду разработку собственного фреймворка, основанного в противовес главенствующей сейчас модели MVC, на базе сигнальной архитектуры (signal/slot). Сейчас этот фреймворк, уже третья версия, проходит боевую обкатку в нашем стартапе, и за это время я понял, что одного продукта в линейке мало - реальные задачи и виденье будущего показывает, что необходим разный функционал, но объединенный одной темой - обработка и доставка информации множеству клиентов в реальном времени. Поэтому я расширяю свою систему таким образом, чтобы в результате получит некоторую платформу для построения быстрых и масштабированных систем для веб-приложений. Сегодня я расскажу о первом компоненте, который является основной нашей платформы - SignalsyMQ - очередь сообщений на базе PHP/Redis/Zend Framework.

Читать далее...

Анонс: Signalsy Platform Framework (open source)… coming soon!

14 августа 2009 6 комментариев

1250198491_signalПриветствую читателей моего блога. Позволю себе сделать небольшой анонс. В последнее время я работаю над достаточно большим проектом, игровой он-лайн платформой для разработчиков браузерных игр AGPsource Game Platform (кстати, проект открытый, присоединяйтесь, уже вышла версия 3.1). Разработка достаточно интересная и нетривиальная в архитектурном плане. Попробовав ее в реальных условиях, в том числе и под достаточной нагрузкой (например, мы сделали на нем одно приложение для сети вКонтакте, пока там 20 тыс. пользователей, но их количество увеличивается постоянно), мы поняли, что архитектура достаточно хорошая. Но движок, конечно, проект большой и сложный, попробовав применить его в других проектах, не очень игровых, стало ясно, что требуется все то же, но более легкое, простое и быстрое. Да и хотелось внести кое-какие изменения в основу проекта, переделать узкие места.

Так родился наш второй проект - Signalsy Platform Framework. Вкратце - это небольшая и гибкая платформа для разработки и поддержки веб-проектов, основанная на сигнальной (Signal/Slot, но, конечно, модифицированной, о реализации в библиотеке ezComponents мы уже писали) архитектуре. Похоже, мы первые в мире, кто сделал подобное для веб-а! Внутри, кроме нашего небольшого набора базовых компонент, лежит Zend Framework, так что разрабатывать можно с учетом всех его возможностей. По сути, это замена традиционной модели MVC (как ее понимают в ZF), но внутри, в компонентах и логике конкретного приложения, конечно, можно придерживаться любых паттернов и приемов построения архитектуры. Signalsy лишь заменяет слой обработки URL  и добавляет возможности Signal/Slot-архитектуры в ваше веб-приложение.

Вам интересно? Следите за анонсами, читатели блога первыми узнают все подробности проекта. Мы также открыты для заинтересованых разработчиков - для сообщества вместе с анонсом будет открыт специальный портал для взаимодействия. Подробности будут в течении нескольких дней...

Ehcache в качестве RESTful сервера кеширования и PHP

logoПриветствую наших читателей. Сегодня мы снова продолжим исследования различных новых и не очень технологий, необычного их применения или просто оригинальных вещей. Те, кто уже давно читают наш блог, возможно вспомнят о короткой статье, в которой я рассказывал о интересном проекте распределённого кеша EHcache для платформы Java. Сегодня настало время продолжить эту тему, однако в другом ракурсе.

Читать далее...

Десктоп web-кодера: собираем рабочее место для AJAX и Web 2.0 кодера. Статья для журнала Хакер.

journalНиже авторский вариант статьи для журнала Xaкер, которая была опубликована в декабрьском номере журнала за 2008 год. Так как блог не так ограничен в объеме подачи материала, я предлагаю вам полную версию материала, в журнале опубликована насколько сокращенная и отредактированная версия, которую можно прочитать на сайте издания.

Введение

Между всеми этими взломами и хаками ты наверное не раз (а может и не два) задумывался над тем, чтобы самому напрограммировать какой-то из новомодных Web 2.0 стайтов. А то как же, жизнь идёт мимо нас, все делают проекты, а кое-кто даже на них зарабатывает неслабо (ага, ага, даже в условиях кризиса, кому кризис, а кому... ), так и мы не будем отставать от прогресса. Или во фриланс подадимся, там тоже сейчас (да и всегда) можно найти интересные заказы, если деньги нужны. А может ты на работу решил устроиться, и договорился с начальством, что будешь работать дома и на своём компьютере, в офисе появляясь только в день зарплаты и на дне рождения шефа? Неважно, главное - ты стёр все порно и решил превратить свой компьютер в рабочее место веб-разработчика! А мы тебе поможем выбрать нужные программы и утилиты, чтобы и работа была сделана, и напрягаться не надо было, и деньги на девчонок остались (это значит, все ПО по максимуму открытое и бесплатное).

Сначала давай уточним, что мы будем программировать, а вернее - на чем? Так как нацелились мы здесь на веб-разработку, то значит среда разработки должна поддерживать те языки и возможности, востребованные в веб-среде. Сразу скажем, что пока не будем рассматривать разработку на платформе Microsoft, ASP-страницы вероятнее всего придется писать, используя только продукты самой компании-разработчика (ага, и там даже бесплатные версии есть, Visual Studio Express), а об этом можно писать много (или ничего), поэтому мы пока обойдем вниманием продукцию MS. Читать далее...

ExtJS Tips&Hacks или броня для веб проекта — сплав Zend Framework, ExtJS и reCaptcha

logoПриветствуем наших читателей. Сегодня мы снова опишем небольшое решение для ExtJS, которое возникло в ходе нашей работы над новыми проектами (раскрою только, что это он-лайн браузерные игры). На этот раз мы используем не только сам ExtJS, но и дополнительные средства, в частности, серверный РНР фреймворк Zend Framework и сервис reCaptcha.

Если вы строите веб-приложение, вместо обычного сайта (хотя, что сейчас этот "обычный сайт"?), то скорее всего, вам понадобится защита от автоматических регистраций или хоть бы попыток обхода, ведь нам интересны  посетители и пользователи люди, верно? Для этого существует механизм CAPTCHA, а данном примере мы используем тест, генерируемый сервисом reCaptcha, который мы считаем на сегодняшний момент самым продвинутым и удобным. Хотя в дистрибутиве Zend Framework есть и собственная реализация, однако вариант от reCaptcha мне кажется более удобным, так как там есть и вариант аудио-каптчи. Читать далее...

AGPsource Session Server — первая бета-версия компонента из состава игровой платформы

3 февраля 2009 Comments off

logo3Приветствуем наших читателей.  Последние несколько недель я был занят доведением до ума собственных проектов, и вот результат - первый компонент из проектируемой нами системы для игровых приложений, добрался до бета-версии. Далее я расскажу об особенностях проекта, его реализации и возможностях - а его, кстати, вполне можно использовать в любых проектах, не только игровых.

Предпосылки к созданию

В случае разработки масштабных РНР-приложений и распределённых систем, перед программистами встает задача обеспечения корректной обработки пользовательских запросов, в случае, если приложение работает на нескольких серверах. Обычные РНР-приложения используют механизм сессий для хранения идентификационных данных и сессии задействованы при обработке каждого запроса от клиента. В обычном режиме сессии хранятся в файловой системе и, таким образом, доступны только на том же сервере, где запущено приложение. Если у нас стоит балансировщик нагрузки, он не может, в случае необходимости, перенаправить запросы на другой, свободный в этот момент сервер, так как для корректной обработки нам необходима сессия, а она хранится на том сервере, где пользователь начала работу. Для этого есть даже специальный термин, «Sticky session» - по сути, это стратегия работы балансировщика, который на основе сессионного идентификатора определяет, куда посылать все запросы. Читать далее...

Developers.org.ua