Pull to refresh
  • by relevance
  • by date
  • by rating

Web-разработка: Java vs C++

Lumber room
Назрела необходимость выбрать новую платформу для web-разработки.

Раньш был PHP. Это хорошая технология, но нужно что-то потяжелее. Серверная инфраструктура — *nix. То есть .NET отметаем (и MONO тоже)

Также отметаем все скриптовые языки (Perl, Python, Ruby, etc). Так как смысла менять шило на мыло особого нет.

Остается Java и C++. Это довольно тяжелые технологии для больших проектов. Технологии примерно одного класса.

Итак, кто что может сказать по этому поводу? Особенно хочется услышать мнение практиков.
Total votes 18: ↑12 and ↓6 +6
Views 1.8K
Comments 53

goto в CORE:: GLOBAL:: exit — где грабли?

Perl *
У меня есть CGIшка, которую хочется запустить под FastCGI.

Она использует фреймвок, который обрабатывает html-шаблоны, выводит ошибки (die) в браузер, делает всяческие редиректы, отдаёт файлы, etc. — всё как обычно. Этот фреймвок, после формирования и вывода ответа на STDOUT, делает exit() — что тоже, в общем, не оригинально.

Этот exit() может быть вызван внутри eval(), а то и нескольких вложенных eval-ов — к примеру, если где-то, в глубине вычислений, CGIшка решает выдать юзеру редирект. Она при этом вызывает функцию фреймвока, он делает print "Location: ..." и exit().

Но под FastCGI exit() делать нельзя.
Читать дальше →
Total votes 4: ↑3 and ↓1 +2
Views 895
Comments 31

Родной FastCGI для IIS

PHP *


Спустя почти год после начала разработки, вышел Go-Live-релиз ISAPI-расширения FastCGI для web-сервера IIS версий 5.1 и 6.

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

Читать дальше →
Total votes 23: ↑19 and ↓4 +15
Views 2.6K
Comments 49

FastCGI-приложение на Perl. Часть первая.

Perl *
Некоторое время назад мне поручили написать движок для онлайн-аукциона. Передо мной встал выбор — сделать движок как обычный CGI или же сделать что-то поинтереснее. Я принял решение применить в разработке движка технологию FastCGI.

FastCGI — это клиент-серверный протокол, обеспечивающий взаимодействие между веб-сервером и приложением. FastCGI является дальнейшим развитием протокола CGI.

В чем разница?
Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Views 21K
Comments 18

FastCGI-приложение на Perl. Часть вторая.

Perl *
Написанное в предыдущей статье FastCGI-приложение сковано одной цепью с тем терминалом, из которого его запустили. Приложение будет работать ровно до тех пор, пока открыт терминал. Как только вы закроете терминал, приложение будет немедленно убито.

Причина в том, что всякая программа, запущенная из терминала, становится потомком этого терминала, а терминал, соответственно, родителем этой программы. Существование же потомков, не имеющих родителей, не допускается. Соответственно, при закрытии родителя-терминала немедленно закрываются все зависящие от него потомки и, в частности, наше FastCGI-приложение.

Для того, чтобы FastCGI-приложение перестало зависеть от родительского терминала, оно должно быть преобразовано из простого скрипта в демон.

Что это еще за чертовщина?
Читать дальше →
Total votes 24: ↑21 and ↓3 +18
Views 4K
Comments 22

FastCGI-приложение на Perl. Часть третья.

Perl *
В предыдущей статье был продемонстрирован способ демонизации FastCGI-приложения. Получившийся демон успешно обрабатывает запросы, но у него есть один существенный недостаток — он не умеет обрабатывать несколько запросов одновременно.

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

Для того, чтобы FastCGI-приложение могло обслуживать несколько запросов одновременно, оно должно уметь создавать собственные копии. В этом случае одновременно пришедшие запросы будут обрабатываться параллельно несколькими экземплярами приложения.

А как создавать копии?
Читать дальше →
Total votes 21: ↑18 and ↓3 +15
Views 5.4K
Comments 34

Apache, fastcgi и c++: «Hello, world»

C++ *
img
Писать web-приложения на C/C++ дело неблагодарное. Многие говорят, что это полное безумие, когда есть PHP и Perl. И я с ними согласен. Это очень просто написать сайт на PHP(особенно используя фреймворки вроде Zend Framework).
Но..(всегда есть какое-то «но»).
Давайте не будем забывать, что простота использования складывается не только из простого синтаксиса. Учитывается множество параметров. И одним из весомых параметров является наличие статей «Get started with ...» с примерами «hello, world»-программ. Я собираюсь добавить немного простоты написанию fastcgi на C/C++. И если прочитав эту статью хоть один человек скажет «А это не так уж и сложно», то я буду считать свою миссию выполненной.
читать далее
Total votes 98: ↑87 and ↓11 +76
Views 38K
Comments 114

Развертывание Django-проекта под nginx

Django *

Преамбула


Из нескольких способов развертывания Django я сразу отмёл mod_python, потому что мне не хотелось поднимать тяжеловесный Apache. Решил развернуть на легком веб-сервере. На данный момент основных легковесных альтернатив Апачу две — lighttpd и nginx. Первоначально я выбрал первый, но столкнулся с проблемами, связанными с URL. Я подумал, что, может, nginx будет работать получше, и развернул приложение на нём. В этом деле мне очень сильно помог один скринкаст, уже не помню точно чьего авторства.
Всё было отлично, но когда я захотел использовать админку Django(удобная вещь, кстати), меня постигло разочарование — форма логина показывалась, но при попытке войти меня выбрасывало на admin. После получаса гугления, я нашёл топик на небезызвестном форуме Ивана Салагаева, в котором описывалось решение проблемы. После того, как я последовал описанным советам, все заработало на-ура. Представляю вашему вниманию необходимую конфигурацию сервера и Django.

Читать дальше →
Total votes 37: ↑33 and ↓4 +29
Views 16K
Comments 16

phpFastCGI: настоящий FastCGI для PHP

PHP *
— Добрый день. Вы наверняка уже наслышаны о протоколе FastCGI, он связывает Веб-сервер и сервер приложений, его реализации есть во множестве языков. Однако, в PHP реализация FastCGI до недавних пор была представлена лишь патчем PHP-FPM, который фактически не давал прироста производительности перед mod_php, поскольку он, вопреки идеологии FastCGI, перезапускает скрипт каждый раз заново. Идеология FastCGI подразумевает единовременную инициализацию приложения при запуске (подгрузку нужных классов, соединение с базой данных, и т.д.), и выполнение запросов один за другим.
phpFastCGI — правильная реализация FastCGI, которая позволяет добиться немыслимой производительности.
Разработка идёт очень активно, и новые фичи появляются очень быстро.
Страничка проекта — phpfastcgi.googlecode.com
Пример простого приложения — code.google.com/p/phpfastcgi/source/browse/trunk/example.php
В действии пример можно увидеть здесь — ya-tv.ru/phpfastcgid (может переодически лежать, это нормально, идёт тестирование). Страничка-пример легко выдерживает 5,000 запросов в секунду всего на 20-ти воркерах.
Проект пока в стадии тестирования и живёт только в SVN.
Приглашаю всех заинтересовавшихся принять в нем посильное участие!
$ svn checkout phpfastcgi.googlecode.com/svn/trunk phpfastcgi

Читать дальше →
Total votes 80: ↑74 and ↓6 +68
Views 9.8K
Comments 197

Сравнение эффективности способов запуска веб-приложений на языке Python

Python *
Последнее время в области веб-разработок стал набирать популярность язык программирования Python. Однако, массовому распространение Python мешает проблема эффективного запуска приложений на этом языке. Пока, в большинстве случаев, это удел выделенных или виртуальных серверов. Модульные языки в отличии от монолитного в базовой функциональности php на каждый запрос подгружают как минимум runtime-библиотеку, а как максимум — ещё несколько десятков запрашиваемых пользователем модулей. Поэтому классический подход наподобие mod_php для Python и Perl не очень уместен, а держать приложение постоянно в памяти было дороговато. Но время движется, техника стала мощнее и дешевле, и уже достаточно давно можно спокойно говорить о постоянно запущенных процессах с приложением в рамках массового хостинга.

О чём тут

Время от времени, в сети появляются различные предложения как запустить приложение на Python. Например, недавно хостинг Джино уникально поправил mod_python и предложил хостинг именно с его помощью. Следом за ним, некий хостинг Locum вообще отринул mod_python с его безопасностью (создаётся впечатление, что суть самобытная безопасность — это единственная проблема АйТи на пути к нирване) и провёл победоносное тестирование modwsgi против fastcgi. Комьюнити же, судя по проведённому мною поиску, разрывается между mod_python и FastCGI. Причём, FastCGI обычно имеется ввиду тот, что идёт в поставке Django — flup. Являясь популярным хостингом Python-приложений, мы не смогли пройти мимо и решили внести свою лепту в эту священную войну.
Читать дальше →
Total votes 57: ↑49 and ↓8 +41
Views 15K
Comments 91

Пример построения неблокирующего веб-приложения

Perl *
За последнее время видел пару хабратопиков (раз, два), в которых описывается использование неблокирующих сокетов и событийно-ориентированного программирования в вебе. Хочу поделиться своим опытом создания веб-приложения на этой технологии.

Недавно захотел создать свой сервис проверки номеров ICQ на невидимость. Алгоритм проверки старый и известный, но до сих пор работающий — отправка специально сформированного служебного сообщения и анализ ответа сервера. Необходимо было держать несколько постоянных подключений к серверу ICQ, а также иметь веб-интерфейс для запросов на проверку. Очевидное решение — создание демона, который создает несколько потоков для ICQ-соединений, и как-либо получает команды от веб-приложения, использующего несколько процессов-воркеров (или на preforked архитектуре) — для возможности обрабатывать http-запросы от нескольких клиентов. Но я решил освоить новую для себя технологию и сделать приложение, поддерживающее несколько соединений и отвечающее клиентам, используя всего лишь один поток.
Читать дальше →
Total votes 40: ↑37 and ↓3 +34
Views 5.3K
Comments 12

Игры в OLTP

Nginx *
В последнее время на Хабре стала популярной тема реализации высокопроизводительных приложений. Решили тоже немножко поэкспериментировать в этом направлении и поделиться текущими результатами наших изысканий.

Подопытный «Hello, world!» представляет собой простейшую OLTP систему:



Требования к производительности и отказоустойчивости являются ключевыми для подобных систем. Поэтому поиск решения поставленной задачи осуществлялся в направлении: C, C++, fastcgi, nginx, lighttpd, oracle. В первую очередь нам было любопытно попробовать различные варианты построения OLTP на данных технологиях, а так же измерить производительность и пиковые нагрузки.

Подробности под катом...
Total votes 39: ↑36 and ↓3 +33
Views 2.6K
Comments 31

Кеширование FastCGI-запросов в nginx

Nginx *
Доброе утро, Хабр!

В данной статье я приведу пример конфигурации nginx для кеширования FastCGI-запросов. При желании его можно использовать его для защиты от хабраэффекта, частично от DDoS'а и, как вариант, для облегчения жизни сервера с высокой нагрузкой.
Читать дальше →
Total votes 31: ↑28 and ↓3 +25
Views 27K
Comments 27

Подводные камни при использовании кэширования в nginx

High performance *
В web-сервер и reverse-proxy nginx встроены очень мощные возможности по кэшированию HTTP-ответов. Однако в ряде случаев документации и примеров не хватает, в результате не все получается так легко и просто, как хотелось бы. Например, мои конфиги nginx-а местами написаны кровью. Этой статьей я попробую немного улучшить ситуацию.

В этой статье: а) подводные камни при полностраничном кэшировании; б) кэширование с ротацией; в) создание динамического «окна» в закэшированной странице.

Я буду предполагать, что вы используете связку nginx+fastcgi_php. Если вы применяете nginx+apache+mod_php, просто замените имена директив с fastcgi_cache* на proxy_cache*

Если выбирать, кэшировать ли страницу на стороне PHP или на стороне nginx, я выбираю nginx. Во-первых, это позволяет отдавать 5-10 тыс. запросов в секунду без каких-либо сложностей и без умных разговоров о «высокой нагрузке». Во-вторых, nginx самостоятельно следит за размером кэша и чистит его как при устаревании, так и при вытеснении нечасто используемых данных.

Кэширование всей страницы целиком


Если на вашем сайте главная страница хоть и генерируется динамически, но меняется достаточно редко, можно сильно снизить нагрузку на сервер, закэшировав ее в nginx. При высокой посещаемости даже кэширование на короткий срок (5 минут и меньше) уже дает огромный прирост в производительности, ведь кэш работает очень быстро. Даже закэшировав страницу всего на 30 секунд, вы все равно добьетесь значительной разгрузки сервера, сохранив при этом динамичность обновления данных (во многих случаях обновления раз в 30 секунд вполне достаточно).
Читать дальше →
Total votes 91: ↑87 and ↓4 +83
Views 53K
Comments 83

nginx — строим свой letitbit

Nginx *
Появилось желание сделать сервис подобный letitbit.net в отдельно взятой стране на окраине Европы.
Требовалось:
  • позволять загружать/отдавать большие файлы;
  • не позволять перепубликовывать прямые ссылки на файлы;
  • ограничивать количество одновременно скачиваемых файлов.

Для реализации выбрали NGINX в связке с PHP через fastcgi.
В NGINX добавили:
  1. великолепный Nginx upload module, который позволяет избежать многократное копирование загруженного файла на пути NGINX-PHP. К тому же, при небольшой доработке, возможна загрузка сразу в нужную папку, что позволяет использовать простое переименование вместо копирования в PHP
  2. нужную заплатку к модулю secure_link, позволяющую делать безопасные ссылки действительными ограниченное время

PHP взяли самый обычный и запустили через spawn-fcgi.
Поставили сервачок, напихали туда штук 12 терабайтных дисков.
Программист написал PHP код, а Марис Рускулис придумал следующий трюк с rewrite для NGINX, позволяющий избежать обращение к PHP при скачивании файла.
В результате, конфигурация NGINX выглядела примерно так:
http {
limit_zone regular $zonekey 10m;
limit_zone premium $zonekey 10m;
server {
root /www/oursiteishere;
location / { try_files $uri @files; }
location ~ \.php$ { try_files $uri @files; fastcgi_stuff_here; }
location @files { rewrite ^(.*)$ /index.php?$1 last; }
location /storage/ { root /storages/; internal; }
# Location for regular users
location ~ /download/.+/(.+)/0/.+/.*/(.+)$ {
set $fname $2;
set $username $1;
set $zonekey "$binary_remote_addr $username";
limit_conn regular 1;
limit_rate '100k';
secure_link_secret megasecret;
secure_link_ttl on;
if ($secure_link = "") { return 403; }
add_header Content-Disposition "attachment; filename*=UTF-8''$fname";
rewrite ^/download/([a-f0-9]+)/([\.~0-9a-zA-Z_]+)/([01])/([0-9]+)/(.+)/.+$ /storage/$4/$5 break;
}
# Location for premium users
# Location for upload using upload module
}
}

Замечательной вещью в данном конфиге является тот факт, что при скачивании файла по сгенерированной защищённой от подмены временной ссылке (проверку осуществляет secure_link) не вызывается PHP с последующим X-Accel-Redirect.
Возможно, данное решение накладывает ограничение на присутствие логики перед непосредственной отдачей файла, но тем не менее, на мой взгляд, является довольно оригинальным трюком, позволяющим немного сэкономить на fastcgi.
Total votes 50: ↑44 and ↓6 +38
Views 4.8K
Comments 30

Разбираемся с проблемой мертвого кода и инклудами

Website development *
В этой статье мы поговорим о некоторых иногда упускаемых разработчиками аспектах, влияющих на общую производительность веб приложения. В частности рассмотрим как влияет на производительность множественные подключения внешних файлов, наличие «мертвого» кода, акселерация путем кешеров опкода и FastCGI для PHP.
Читать дальше →
Total votes 80: ↑67 and ↓13 +54
Views 1.5K
Comments 85

Установка PHP-FPM на Debian из пакетов

TrueVDS corporate blog High performance *
PHP-FPM — патч к PHP, предоставляющие альтернативный интерфейс FastCGI. Обычно используется с nginx в проектах с высокими нагрузками или дефицитом ресурсов. Для удобной и упрощенной инсталляции мы собрали PHP-FPM в пакет для Debian 5 Lenny. Последнюю пару недель тестировали и тюнили, сейчас выложили в публичный доступ. Над пакетами в поте лица трудился viliar, которому дружно направляем за это благодарности и карму. Багрепорты и замечания приветствуются, лучше комментами к посту.

Инструкция по установке


Читать дальше →
Total votes 42: ↑32 and ↓10 +22
Views 12K
Comments 59

Развертывание сайта на Джанго, используя FastCGI

Django *

От переводчика


Данную статью я прочитал на Django Advent приуроченному к уже скорому выходу Django 1.2 и она показалось мне настолько интересной, что я решил ее перевести. Далее текст статьи.

Когда разрабатываешь сайт на Джанго, так легко просто открыть консоль и напечатать:

python manage.py runserver

С этой простой командой управления ваши медиа файлы админки сайта поддерживаются правильным образом, PYTHONPATH правильно настроен и включает корневую папку нашего проекта, а так же запущен автоматически перегружающийся веб-сервер на указанном нами порту (от переводчика: по умолчанию порт 8000). Так просто!

Не удивительно, что люди так разочаровываются, когда приходит время положить их сайт на боевой сервер: существует так много шагов в этом процессе и поэтому сложно все их выучить и сделать все правильно. Неудивительно, что вся эта сложность приводит к тому, что написано много статей о развертывании веб-сайта на Джанго. Но почти все из этих статей фокусируются на развертывании сайта используя Apache и mod_wsgi или mod_python.

Однако иногда Apache не идеальное решение. Может быть ваш VPS имеет только 256 МБ памяти, а может быть вы хотите избежать сложности настройки Apache при установке. Или может быть вам просто не нравиться Apache. По любой из этих причин мы можем обратить свое внимание на FastCGI.
Читать дальше →
Total votes 63: ↑51 and ↓12 +39
Views 15K
Comments 35