fastcgi performance at 10K

Sergey Shepelev temotor at gmail.com
Mon Apr 20 11:44:23 MSD 2009


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

Следущий логичный шаг, по-моему - использовать HTTP в качестве
основного транспортного протокола, просто чтобы поддерживать и
развивать один.

Хотя, вон, Максим подсказывает, что в proxy_pass тоже нет поддержки
keepalive. Еще можно надеяться на Chunked encoding. Не знаю
поддерживается или нет.

2009/4/18 Борис Долгов <boris at dolgov.name>:
> А почему?
>
> 18 апреля 2009 г. 14:43 пользователь Sergey Shepelev <temotor at gmail.com>
> написал:
>>
>> Может лучше писать HTTP бекенды вместо FastCGI?
>>
>> 2009/4/17 Denis F. Latypoff <denis at gostats.ru>:
>> > Hello Maxim,
>> >
>> > Saturday, April 18, 2009, 12:38:42 AM, you wrote:
>> >
>> >> Hello!
>> >
>> >> On Fri, Apr 17, 2009 at 11:48:08PM +0700, Denis F. Latypoff wrote:
>> >
>> >>> Hello Maxim,
>> >>>
>> >>> Thursday, April 16, 2009, 1:23:11 AM, you wrote:
>> >>>
>> >>> > Hello!
>> >>>
>> >>> > On Wed, Apr 15, 2009 at 01:09:30PM +0100, Valery Kholodkov wrote:
>> >>>
>> >>> >>
>> >>> >> ----- "Maxim Dounin" <mdounin at mdounin.ru> wrote:
>> >>> >>
>> >>> >> > У меня есть работающий прототип поддержки keepalive для fastcgi.
>> >>> >> > Если очень хочется потестировать - могу поделиться патчами.
>> >>> >> >
>> >>> >> > Но надо понимать что на сколько-нибудь тяжёлых fastcgi запросах
>> >>> >> > это не приведёт к заметному ускорению, и описанные проблемы
>> >>> >> > скорее
>> >>> >> > всего не вылечит (а может быть и усугубит).
>> >>> >>
>> >>> >> Вне зависимости от того, кто что про это думает, код в студию!
>> >>>
>> >>> > Патчи прилагаются, накладывать по очереди:
>> >>>
>> >>> > patch-nginx-proxy-flush-2.txt
>> >>> > patch-nginx-proxy-length-2.txt
>> >>> > patch-nginx-keepalive.txt
>> >>>
>> >>> > Всё должно нормально накладываться на 0.7.51.  Первые два патча
>> >>> > уже публиковались ранее, и вообще сами по себе полезные.  Третий
>> >>> > грязненький, но я честно предупреждал что это лишь прототип.  :)
>> >>>
>> >>> > Использовать вместе со свежей версией ngx_http_upstream_keepalive,
>> >>> > берут тут:
>> >>>
>> >>> > http://mdounin.ru/hg/ngx_http_upstream_keepalive/
>> >>>
>> >>> > При этом при сборке nginx'а надо определить
>> >>> > NGX_UPSTREAM_KEEPALIVE_PATCHED, иначе работать будет как раньше
>> >>> > (т.е. применимо только для memcached'а).  Как-то так:
>> >>>
>> >>> > ./configure --with-cc-opt="-D NGX_UPSTREAM_KEEPALIVE_PATCHED" \
>> >>> >     --add-module=/path/to/ngx_http_upstream_keepalive
>> >>>
>> >>> > Maxim Dounin
>> >>>
>> >>> это моё (время в GMT):
>> >>>
>> >>> [16:37:27] [debug] app_server.c:278:server_accept(): [21] accepted
>> >>> from 192.168.61.30
>> >>> [16:37:27] [debug] socket.c:83:socket_non_block(): [21] set NONBLOCK
>> >>> [16:37:27] [debug] app_server.c:77:app_server_read(): [21] read 1344
>> >>> bytes
>> >>> [16:37:27] [debug] app_server.c:99:app_server_read(): [21] recv():
>> >>> Resource temporarily unavailable
>> >>> [16:37:27] [debug] fastcgi.c:617:fastcgi_request(): FASTCGI_VERSION: 1
>> >>> [16:37:27] [debug] fastcgi.c:637:fastcgi_request(): FASTCGI_TYPE:
>> >>> FASTCGI_BEGIN_REQUEST
>> >>> [16:37:27] [debug] fastcgi.c:664:fastcgi_request():
>> >>> FASTCGI_REQUEST_ID_HI: 0
>> >>> [16:37:27] [debug] fastcgi.c:673:fastcgi_request():
>> >>> FASTCGI_REQUEST_ID_LO: 1
>> >>> [16:37:27] [debug] fastcgi.c:692:fastcgi_request():
>> >>> FASTCGI_CONTENT_LENGTH_HI: 0
>> >>> [16:37:27] [debug] fastcgi.c:701:fastcgi_request():
>> >>> FASTCGI_CONTENT_LENGTH_LO: 8
>> >>> [16:37:27] [debug] fastcgi.c:710:fastcgi_request():
>> >>> FASTCGI_PADDING_LENGTH: 0
>> >>> [16:37:27] [debug] fastcgi.c:719:fastcgi_request(): FASTCGI_RESERVED:
>> >>> 0
>> >>> [16:37:27] [debug] fastcgi.c:761:fastcgi_request(): FASTCGI_DATA: 8
>> >>> bytes left
>> >>> [16:37:27] [debug] fastcgi.c:151:fastcgi_process_begin_request():
>> >>> FASTCGI_ROLE_HI: 0
>> >>> [16:37:27] [debug] fastcgi.c:160:fastcgi_process_begin_request():
>> >>> FASTCGI_ROLE_LO: 1
>> >>> [16:37:27] [debug] fastcgi.c:184:fastcgi_process_begin_request():
>> >>> FASTCGI_FLAGS: 1
>> >>>
>> >>> то бишь - FCGI_KEEP_CONN
>> >>>
>> >>> это nginx:
>> >>>
>> >>> 2009/04/17 23:37:27 [debug] 28959#0: *54 http writer done:
>> >>> "/game.json?"
>> >>> 2009/04/17 23:37:27 [debug] 28959#0: *54 http finalize request: 0,
>> >>> "/game.json?"
>> >>> 2009/04/17 23:37:27 [debug] 28959#0: *54 event timer del: 5:
>> >>> 3035726014
>> >>> 2009/04/17 23:37:27 [debug] 28959#0: *54 set http keepalive handler
>> >>> 2009/04/17 23:37:27 [debug] 28959#0: *54 http close request
>> >>>
>> >>> ну и в моем самопальном сервере:
>> >>>
>> >>> [16:37:27] [debug] server.c:182:server_write(): [21] written 16232
>> >>> bytes of 16232
>> >>>
>> >>> дальше добавляю fd:21 в событие READ, якобы для следующего запроса и
>> >>> получаю:
>> >>>
>> >>> [16:37:27] [notice] server.c:84:server_read(): [21] recv(): client
>> >>> prematurely closed connection
>> >>> [16:37:27] [debug] socket.c:72:socket_close(): [21] closed
>> >
>> >> Just for record:
>> >
>> >> Соединение закрыто nginx'ом, ибо не активирован upstream keepalive. Не
>> >> забываем прописывать
>> >
>> >>     upstream {
>> >>        server ...
>> >>        keepalive <сколько надо>;
>> >>     }
>> >
>> >> В README к ngx_http_upstream_keepalive всё написано с
>> >> подробностями.
>> >
>> >> Ну и вообще говоря закрытое сервером соединение - это нормально,
>> >> FCGI_KEEP_CONN как раз и говорит приложению что сервер это сделает
>> >> сам когда надо будет.
>> >
>> > ага, учтем.
>> >
>> > в общем померялся,
>> >
>> > Ядро: 2.6.28.4
>> > ДДОС: ab -k -c 10000 -n 500000 -p ./post.js (у мну отдавалка JSON)
>> >
>> > 1) Requests per second:    1726.60 [#/sec] (mean)
>> > 2) Requests per second:    948.40 [#/sec] (mean)
>> >
>> > использовались три машины (досилка, nginx, и fastcgi)
>> >
>> > Предлагаю серьезно подумать над поддержкой keepalive для fastcgi.
>> >
>> >> Maxim Dounin
>> >
>> > --
>> > Best regards,
>> >  Denis                            mailto:denis at gostats.ru
>> >
>> >
>> >
>
>
>
> --
> С уважением, Борис Долгов.
> icq 77556665
> e-mail boris at dolgov.name
>


More information about the nginx-ru mailing list