Архив

Архив Январь 2010

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

24 января 2010 Comments off

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

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

NoSQL: А ты уже отказался от SQL? Статья в журнал Хакер

16 января 2010 Comments off

128

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

Первым кинь камень в того, кто скажет, что делать новый суперпроект надо с SQL базой данных.

Скажи честно, тебе ведь интересно, как устроены внутри все эти суперсайты, на которых висишь сутками ты и еще сотни миллионов человек сразу? Ну, это я говорю о Facebook и нашем вКонтакте, Google, Amazon, ebay, Twitter и десятки других сайтов, которые самые посещаемые в мире. Если ты делал уже сайты, то знаешь, что большинство веб-сайтов просто странички на PHP вместе с базой данных мускула (MySQL). База данных нужна для всего – там и новости и товары из магазина, статьи и  комментарии, и даже самое вкусное – логины и пароли пользователей, которые взламываются за пару секунд. Ты же даже не мыслишь о том, что сделать сайт без применения базы данных вообще – я говорю о реальном сайте типа форума или социальной сети, ну, на худой конец, магазин хакерских программ?

База данных – вширь и ввысь

В реальности так и есть – очень многие большие дядьки разработчики и архитекторы также думали, что без базы не обойтись, продолжая делать все более и более мощные сайты. Но потом все столкнулись с тем, что, сколько ни тужься, не придумывай всяких хаков и умных штучек, а базы данных плохой выбор, если у тебя сто миллионов посетителей. Ага, они тоже слышали о кластерах и распределенных системах, или даже об облачных вычислениях (можно почитать и у нас). Если надо, чтобы больше людей скачало новый порно-ролик Берковой, достаточно поставить еще пару серверов и скопировать на них файлы. А вот базы данных так просто не работают. Тут и появилась проблема масштабирования. Каждый решает ее по-своему.

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

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

2 января 2010 Comments off

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

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

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

Developers.org.ua