[Moscow.pm] Perl AnyEvent vs Python Twisted (via HTTP)

Ruslan Zakirov ruz на bestpractical.com
Ср Ноя 23 03:59:00 PST 2011


2011/11/23 Alexey Shrub <worldmind на mail.ru>:
> Всем привет,
>
> Взял примеры http демонов с
> http://twistedmatrix.com/trac/
> и
> http://search.cpan.org/perldoc?AnyEvent::HTTPD
>
> чуть допилил до похожего на реальность - они сериализуют запрос в json и
> кладут в редис, алгоритм вроде идентичный, однако судя по тестам
> ab -c 100 -n 10000
> 'http://localhost:8080/?param=value1&param2=value2&tid=6666'
>
> twisted чуть больше чем в три раза быстрее (~1500 req/sec против ~500
> req/sec), пробовал убрать json и редис в перловом демоне - разницы нет,
> он такой же медленный
>
> Что не так - нужно выбросить AnyEvent::HTTPD ? тюнить AnyEvent или юзать
> Twisted ?

http://cpansearch.perl.org/src/ELMEX/AnyEvent-HTTPD-0.93/lib/AnyEvent/HTTPD/HTTPConnection.pm

Туда нужно воткнуть HTTP::Parser::XS и тогда сравнивать, а так оно
парсит перлом. Еще половина скорее всего уходит на диспечер. Можно
оптимизировать, но смысла нет, когда есть twiggy:

http://search.cpan.org/~miyagawa/Twiggy-0.1010/lib/Twiggy.pm

c100/n10000
У меня AE::HTTPD - 126.27 [#/sec]
Twiggy - 3995.35 [#/sec]

Выкинул все, просто текстовой ответ "boo". Странно, что при большем
количестве запросов (n>20000) twiggy может несколько запросов отложить
на 10-20 секунд.

  98%    113
  99%  10958
 100%  19096 (longest request)

У AE::HTTPD похожая ситуация, но не так ярко выражена или просто
количество запросов слишком маленькое чтобы получить большие задержки.
Самое главное, что оба показывают значительные относительные задержки
для отдельных запросов при увеличении общего количества запросов.

Попробовал повысить конкуренцию и появились ошибки. Разбираться не буду.

> исходники в аттаче, тестил на обычном писюке с Ubuntu
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>



-- 
Best regards, Ruslan.


Подробная информация о списке рассылки Moscow-pm