Problem with instant streaming request body to backend
andrew at nginx.com
Thu Jan 5 12:44:41 UTC 2012
On Jan 5, 2012, at 4:27 PM, Tomasz Roda wrote:
> 2012/1/5 Andrew Alexeev <andrew at nginx.com>:
>> On Jan 5, 2012, at 1:48 PM, Tomasz Roda wrote:
>>> I am developer in new startup and Nginx is important part of whole
>>> system. Generally it is great load balancer, has many interesting
>>> modules and configuration possibilities but I have one serious problem
>>> which I cannot solve.
>>> Problem is that Nginx for each request collects the whole body of
>>> request and only after that sends request next to backend. I know that
>>> I can theoretically use upload module to omit that issue but we have
>>> got own part of code to handle uploads in way that we need (which must
>>> not be supported by module in load balancer). That issue is big
>>> problem for us because in current load balancer implementation data
>>> from client is unnecessarily "cached" on load balancer (load
>>> balancer's hard drive in fact) and then send to backend instead of
>>> instant streaming from client by load balancer to backend. Main
>>> problem is lower performance (requirement of fast storage on load
>>> balancer servers) and additional requests latency, it is really
>>> noticeable especially for big files.
>>> My question is: is any chance for adding feature of instant data
>>> streaming of request body to backend? If chance is real can we expect
>>> feature implementation soon? I think that it is useful functionallity
>>> and can be used by many Nginx users.
>> By instant data streaming do you mean generic L4/TCP load balancing or still some form of a L7/HTTP load balancing with additional controls for headers and request/response, and with efficient handling of concurrent connections?
>> What are the other roles of your nginx setup aside from load balancing to the backends?
> I mean a L7/HTTP load balancing. We need additional handling of
> requests by Nginx for HTTPS (backend applications operate on HTTP
> requests), access logging, passing requests to proper backend
> applications basing on URL, x-accel-redirect, etc.
There's some work planned towards this direction (allowing to avoid buffering from the client), mostly to facilitate websockets stuff. But probably will turn out to be a generic "unbuffered L4/L7" load balancing. There's no ETA, though and it's probably a three months timeframe.
More information about the nginx