Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 22, 2013 10:32:06

john123
Зарегистрирован: 2013-12-22
Сообщения: 56
Репутация: +  7  -
Профиль   Отправить e-mail  

Низкий RPS в twisted.web+web.py (WSGI)

Всем здравствовать!

Недавно начал разбираться в twisted.web с целью использования его как веб-сервера.
В качестве фреймворка взял web.py. Чтобы состыковать web.py и twisted, использую WSGI.

Решив погонять тесты с помощью ab и httperf, увидел удручающие результаты: 30-40 rps, в то время как apache, запущенный с гигантским приложением на CodeIgniter, выдает 180-200 в httperf и около 7000 в ab.

Приложение на twisted такое:

#!/usr/bin/python
# encoding: utf-8
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
import web
urls = ('/', 'Index')
class Index:
    def GET(self):
        return 'Hello, world!'
application = web.application(urls, globals()).wsgifunc()
resource = WSGIResource(reactor, reactor.getThreadPool(), application)

Запускаю так:
twistd web --wsgi tw.application --logfile=/dev/null
tw.py - имя файла.

Т.е., как видно, пока что это обыкновенный хэловорлд. Но даже на таком коде, количество RPS рекордно мало.

Запускаю тест:
ab -c 100 -n 5000 127.0.0.1:8080/
Requests per second: 37.31 (mean)

В httperf, в общем-то, такая же картина.
Вопрос - что я делаю не так? Может быть стоит использовать какой-то нестандартный реактор для WSGI? Или может быть надо настроить какие-то параметры типа Thread_pool и т.д.?

Отредактировано john123 (Дек. 23, 2013 10:55:55)

Офлайн

#2 Дек. 22, 2013 13:10:42

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Низкий RPS в twisted.web+web.py (WSGI)

Зачем вам твистед? Запустите через uwsgi, будет больше rps.
Да и вместо web.py можно что-нибудь более “мейнстимовое”.

Офлайн

#3 Дек. 22, 2013 18:44:22

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Низкий RPS в twisted.web+web.py (WSGI)

Ну давайте я буду писать веб-приложение на Python, а вы на Apache, думаю ваши приоритеты очень быстро изменятся и RPS в 7000 не сильно вам поможет.
Запустите 8 копий и на 8-ми ядерном CPU получите 280 RPS. В любом случае, когда начнёте делать что-либо сложнее “Hello world” ваш RPS упадёт (в зависимости от квалификации) до 1 или до 0.1 и никакой framework тут не поможет. Так что на мой взгляд такое тестирование ни о чём.

p.s. У меня ваш код показал 97.69. Linux? Twisted из местной репы ставился? Руками? Сишные зависимости собрались?

..bw



Офлайн

#4 Дек. 22, 2013 19:02:36

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Низкий RPS в twisted.web+web.py (WSGI)

по-моему twisted и tornado не про rps, а про количество соединений, хотя регулярно встречаются типы хотящие ускорить джангу торнадкой.

Офлайн

#5 Дек. 22, 2013 19:50:07

john123
Зарегистрирован: 2013-12-22
Сообщения: 56
Репутация: +  7  -
Профиль   Отправить e-mail  

Низкий RPS в twisted.web+web.py (WSGI)

bw
Ну давайте я буду писать веб-приложение на Python, а вы на Apache, думаю ваши приоритеты очень быстро изменятся и RPS в 7000 не сильно вам поможет.
Вы случайно на руби(раби-раби) не пишете? А то злой Вы какой-то))

Запускаю на Linux (Ubuntu 12.04), twisted из стандартных репозиториев.
Вообще смысл того, что я взял твистед в том, что хочу в качестве “домашнего задания” сделать comet-чат с веб-интерфейсом и хочу чтобы это всё очень легко развертывалось, т.е. не надо было устанавливать веб-сервер отдельно и кучу других компонентов.

o7412369815963
Да и вместо web.py можно что-нибудь более “мейнстимовое”.
Мейнстримовое в моем случае не требуется, по причине простоты планируемого веб-интерфейса. Тут не будет кучи бизнес-логики, не будет продвинутых ORM и т.д.

bismigalis
по-моему twisted и tornado не про rps, а про количество соединений, хотя регулярно встречаются типы хотящие ускорить джангу торнадкой.
У меня нет необходимости что-то ускорять. Просто интересно посмотреть на что способен твистед в качестве веб-сервера и можно ли его использовать в таком виде на продакшне. В общем-то я немного расстроен низким RPS и решил обратиться за помощью к более опытным коллегам, чтобы разобраться с этим вопросом, т.к. только начал разбираться с фреймворком, а в документации ничего подобного не нашел.

Офлайн

#6 Дек. 22, 2013 20:10:16

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Низкий RPS в twisted.web+web.py (WSGI)

Я извиняюсь что сразу не посмотрел код внимательно, голодный был :-).
Сейчас вот поел и думаю, какого рожна там Webpy делает, зачем тогда Twisted?
Сделал более каноничный пример (из официальной, кстати, документации):

# tw2.py
# twistd -nol /dev/null web --class=tw2.HelloResource
import twisted.web.resource as _twr
class HelloResource(_twr.Resource):
    isLeaf = True
    def render_GET(self, request):
        return 'Hello, world!'

“ab” показал 2136.56.

p.s. На Ruby не пишу :-).

..bw



Офлайн

#7 Дек. 22, 2013 23:55:53

john123
Зарегистрирован: 2013-12-22
Сообщения: 56
Репутация: +  7  -
Профиль   Отправить e-mail  

Низкий RPS в twisted.web+web.py (WSGI)

bw
Я извиняюсь что сразу не посмотрел код внимательно, голодный был :-).Сейчас вот поел и думаю, какого рожна там Webpy делает, зачем тогда Twisted?Сделал более каноничный пример (из официальной, кстати, документации):

Приведенный Вами код показал результат 2956.92 rps, но стоит отметить, что это не WSGI. Я пробежал по документации twisted по части web, попробовал пару примеров и понял что писать на twisted.web веб-интерфейс будет не так удобно, нежели чем на специализированном фреймворке. Собственно, по этому попытался использовать web.py.
Twisted Web is a web server, and a framework for doing things with the web - although it shares some components in common with frameworks like Django, it's not a “web framework” in the same sense.

Тогда задам еще вопрос: использовать какой-либо веб-фреймворк + twisted WSGI это плохо? Почему?

P.S. Вопрос без подвоха, просто хочу разобраться что такое хорошо, а что такое плохо , чтобы понять какие у twisted могу быть области применения по части web и какое решение лучше подойдет для меня.

Отредактировано john123 (Дек. 22, 2013 23:59:48)

Офлайн

#8 Дек. 24, 2013 16:48:22

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Низкий RPS в twisted.web+web.py (WSGI)

1. Твистед очень быстро равивается, ставить его лучше через pip.
2. Твистед не для wsgi, он просто его умеет .
3. Если нужен именно высокий rps смотрите на nginx + uwsgi соединенные чере unix-сокеты.
4. Как правильно заметил bismigalis, твистед скорее для количества соединений, чем для rps

Офлайн

#9 Дек. 25, 2013 15:51:07

john123
Зарегистрирован: 2013-12-22
Сообщения: 56
Репутация: +  7  -
Профиль   Отправить e-mail  

Низкий RPS в twisted.web+web.py (WSGI)

Благодарю за ответ! Кое-что для меня прояснилось

Также я выяснил (из оффициальной документации, в которой не заметил этой строки), что:

Note that WSGIResource is a multithreaded WSGI container. Like any other WSGI container, you can't do anything asynchronous in your WSGI applications, even though this is a Twisted WSGI container.
Выходит в случае с WSGI, Twisted работает в многопоточном режиме и, как я понимаю, причина низкого значения RPS именно в CPython GIL.

В общем-то пока забил на веб-фреймворки, попробую поколдовать с twisted.web, т.к. всё-таки необходимый мне функционал там есть, хоть и не очень всё удобно.

Отредактировано john123 (Дек. 25, 2013 15:52:57)

Офлайн

#10 Дек. 25, 2013 16:54:36

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Низкий RPS в twisted.web+web.py (WSGI)

john123
а чего торнадо никто не советует ? https://github.com/facebook/tornado/tree/master/demos/chat

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version