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