Задать вопрос
KwI
@KwI
Frontend developer

Каковы возможные оптимизации нагрузки простейшего скрипта?

Привет!

Есть элементарный скрипт:
&lt;?php<br/>
if ($_GET['str'] != '')<br/>
{<br/>
echo strrev($_GET['str']);<br/>
}<br/>
else<br/>
{<br/>
echo 'error';<br/>
}<br/>
?&gt;<br/>


Есть большое число флеш-клиентов, к этому скрипту стучащихся по два раза в секунду и получающих ответ с помощью URLLoader.

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


Скрипт работает на WAMP, конфигурация машины: core2duo 1.6Ghz, 1Gb RAM

Что можно сделать (или что почитать), чтобы ситуация улучшилась?
  • Вопрос задан
  • 2530 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
ertaquo
@ertaquo
Тут скорее проблема в HTTP-сервере. Попробуйте реализовать то же самое на node.js или перевести под nginx+php-fpm, если используете Apache.
Ответ написан
Пригласить эксперта
Ответы на вопрос 7
Если действительно надо такой странный функционал реализовать именно на сервере — то поднимаете nginx + простой fastcgi скрипт написанный на C/C++. Ваша задача (реверсирование строки) реализуется элементарно, работать будет как ракета.
Ответ написан
@edogs
Во-первых, если скрипт именно такой, то Вам на фиг не нужен серверный скрипт, это вообще что за безобразие сервер ради этого напрягать?:)
Во-вторых, поставьте вначале ob_start, может сильно помочь, правда не во всех случаях, но тем не менее бывает разительная разница.
Ответ написан
avalak
@avalak
> Скрипт работает на WAMP
Это я заметил. Тем не менее, в данном случае было бы интереснее использовать linux + nginx + php-fpm / node.js / phpDeamon
Поясню:
  • Linux.
    — Можно настроить систему (возможно, есть способ провернуть это и в windows, но мне это неизвестно) + я не знаю как обстоят дела у nginx, php-fpm, node.js, phpDeamon в этой среде. План такой: создать диск в tmpfs/ramfs под кеш. При необходимости сделать тонкую настройку.
  • Nginx.
    — У Nginx есть функция кеширования (кешируем результат работы скрипта в память).
    — Настраиваем роутинг через Nginx (ошибку отдаём как статику, т.к. она не информативна), скрипт вызывается только в «боевой» ситуации и когда результат такого запроса отсутствует в кеше. Скрипт подключаем через сокет тк машина одна)
  • php5-fpm / node.js / phpDaemon
    — настроить php чтобы он потреблял как можно меньше памяти ( + APC).
    — поскольку скрипт простой, можно попробовать асинхронный вариант (можно выжать ещё немного).
Ответ написан
Комментировать
taliban
@taliban
php программист
А Вы используете именно этот скрипт, или там есть чтение/запись из файла? =)
Ответ написан
Комментировать
Evengard
@Evengard
Вообще действительно, адски странный скрипт, непонятно почему нельзя этот функционал организовать непосредственно на клиенте.

А вообще — тут кеширование ИМХО нужно. memcached-ы всякие.

Ну и само собой nginx+php-fpm, это люди тож правы.

Но всёж. Подумайте о реализации ЭТОГО на клиенте.
Ответ написан
Комментировать
Sardar
@Sardar
Трудно поверить, что в примере скрипт реальный. Если он делает много IO (файлы, выкачивает чего из сети), то вам нужен асинхронный сервер, возможно с memcached кешем. В случае PHP по моему не решаемо, тут только поднять как можно больше дешевых worker'ов. Но на каждый запрос, worker лочиться на IO и фактически бездействует все время.

Node.js уже советовали, но я бы посоветовал pyramid под gUnicorn:gevent, чере nginx. Асинхронный сервер позволяет запускать сколько угодно green threads, работающих кооперативно. Если кто лочиться на IO, то отдает процессор соседу. На каждый запрос новый green thread.

Повторяю, это все только если ваши скрипты блокирутся на IO или каким другим способом. Если задача CPU intensive, как в вашем примере, то вам просто надо настроить сервер, что бы он полностью использовал все ресурсы машины (может там один worker в pool'e). Также узнать, что у вас за сеть (может «сервер» на домашнем ADSL висит).
Ответ написан
Комментировать
@Demetros
Используйте встроенный perl/lua в nginx.

PS: каков вопрос — таков ответ
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы