running nginx upload progress module in a cluster [on multiple nodes]?

Brice Figureau brice+nginx at daysofwonder.com
Sun Aug 15 19:07:26 MSD 2010


On 13/08/10 22:01, Scott Trudeau wrote:
> 
> Hi,
> 
> I'm experimenting with the nginx upload progress module for a system I'm
> building.  At some point, I expect I'll need a cluster of "upload" nodes
> (currently planning to use the upload and upload progress modules) in
> order to handle all incoming uploads.  The problem I'm expecting to have
> w/ the upload progress module is, if I'm running a cluster of nodes w/ a
> shared IP (and/or behind a load balancer), is how to ensure "progress"
> requests are routed to the same host as the upload POST, (assuming POSTs
> always go to the same domain, e.g., uploads.example.com
> <http://uploads.example.com>).
> 
> I'm currently planning to run this system on EC2 and am considering the
> following options, but thought I'd ask here to see if anyone has solved
> this problem; has other, better ideas; or might correct my assumptions
> -- since I don't particularly like any of these options.
> 
> Option 1: use Elastic Load Balancer with session stickiness
> Problem: ELB is time-based so it is possible for the session to
> "unstick" in the middle of an upload; higher time expiration settings
> could mitigate (but not prevent) this but work against the load
> balancers ability to balance traffic
> 
> Option 2: Distribute requests amongst nodes using a hash on
> the X-Progress-ID value and subdomains (e.g., hash ids to a value a-z,
> map [a-z].uploads.example.com <http://uploads.example.com> evenly across
> N nodes; always post to the subdomain as a hash of X-Progress-ID)
> Problem: Spreads posts evenly, but complicates client logic and can't
> easily intelligently balance requests based on current load
> 
> Option 4: Make the app pick a host (client must ask where to POST before
> POSTing upload)
> Problem: pushes load balancing work into the server app & makes the
> client do more work
> 
> Option 3: RYO load balancer (build (or configure) a custom load balancer
> that can run on EC2 instances and route requests intelligently)
> Problem: Seems like overkill

When being asked this very same question, I always answer either 1) if
the load balancer can use sticky sessions on request arguments (ie
follow X-Progress-ID value), or 2).
Both should be simple to build, 1) as configuration and 2) as client
code... choose your poison :)
--
Brice Figureau
My blog: http://www.masterzen.fr/





More information about the nginx mailing list