FastCGI multiplexing?

Igor Clark igor at pokelondon.com
Mon Jan 14 20:10:39 MSK 2008


Thanks Manlio.

On 14 Jan 2008, at 16:54, Manlio Perillo wrote:

> Igor Clark ha scritto:
>> On 14 Jan 2008, at 13:46, Manlio Perillo wrote:
>>> Igor Clark ha scritto:
>>>> Hi Igor and everyone,
>>>> I'm toying with some ideas for a multithreaded FastCGI  
>>>> application, intended to work with nginx.
>>>> Seems that FCGI request/connection multiplexing would be an  
>>>> extremely valuable feature.
>>>> I can't find any reference to this on the wiki, in the mailing  
>>>> list or on Google - I assume this is because nginx, like Apache,  
>>>> doesn't support FastCGI multiplexing. Is this correct? If so, are  
>>>> there any plans to implement it at some point in the future?
>>>
>>> As far as I know the multiplexing support in FastCGI is broken "by  
>>> design".
>>>
>>> Read this response one of the authors of Twisted gave me about  
>>> FastCGI (among other questions):
>>> http://twistedmatrix.com/pipermail/twisted-web/2006-April/ 
>>> 002598.html
>> Thanks Manlio, that's very interesting. Lack of flow control in the  
>> protocol is obviously an issue for multiplexing; now that it's been  
>> pointed out, it seems bizarre that it should have been missed out.  
>> One wonders if the intention was for the application to send an  
>> HTTP 503 over the FCGI connection in the event of overloading?
>
> Maybe they just though that overflow is not possible, who knows.
> TCP, as an example, has some form of flow control (but usually  
> FastCGI uses an UDP connection)
>
>
>> I guess this would require a web server module to back off from  
>> overloaded application instances based on their HTTP status code -  
>> which seems like trying to patch up the shortcomings of the  
>> transport in the application.
>> It's a shame; it seemed that removing all the TCP overhead between  
>> the web server and the application server would be a good thing,  
>> but perhaps FCGI just isn't the way.
>
> But with FCGI you can just execute one request at a time, using a  
> persistent connection.
>
> The problems, with nginx, are:
> 1) the upstream module does not supports persistent connections.
>   A new connection is created for every request.
>   In fact the http proxy supports HTTP 1.0 with the backend.
> 2) nginx does not supports some forms of connections queue with  
> upstream
>   servers.
>   This means that if nginx is handling 500 connections, then it will
>   make 500 concurrent connections to the upstream server, and likely
>   the upstream server (usually "a toy") will not be able to handle  
> this
>
>
> Fixing this will require a redesign of the upstream module.
>
>
>> I'm still just researching the area at the moment though so any  
>> further thoughts or experiences would be very welcome.
>> Is there any plan to implement HTTP/1.1 & keepalive connections in  
>> nginx's conversations with upstream servers? Can't see anything in  
>> the wiki or feature request list.
>
>
> Igor Sysoev has expressed his intentions to add support for  
> persistent upstream connections, try searching the mailing list  
> archives.
>
>> Cheers,
>> Igor
>> -- 
>> Igor Clark // POKE // 10 Redchurch Street // E2 7DD // +44 (0)20  
>> 7749 5355 // www.pokelondon.com
>
>
> Manlio Perillo
>

--
Igor Clark // POKE // 10 Redchurch Street // E2 7DD // +44 (0)20 7749  
5355 // www.pokelondon.com









More information about the nginx mailing list