I've read 'youtube-architecture' but still do not understand one point.
Assume I have a bit bigger content to deliver and one load balancer (nginx) points via reverse proxying to e.g. 10 back-end servers (java/jetty). Now assume 1 GBit/s for every server.
When the applications gets more users I have some options:
- reduce the maximum download rate per connection. So a few heavy users won't make the connection worse for the others. (limited scalability)
- redirect to the back-end server so that the clients directly download there and the bandwidth multiplies. (the 'youtube' style?)
- use DNS load balancing, here also the bandwidth multiplies. Problem: I do not have much control over the load balancing selection process
Is there another option?
E.g. the 2nd option without the redirection? Or is it this normal that clients just load a thin skin of the application like 'youtube.com' and then download the videos from different domains like 'xy.googlevideo.com'?
There are several options on the spectrum of scale up versus scale out.
Put your static content on a CDN. These will be across the Internet, hopefully close to clients. Youtube definitely can be a considered a CDN, but keep in mind that their architecture changed over the years.
Scale out yourself. Use DNS or anycast or add tiers to the architecture. Adopt to more complexity than one server daemon. See also: What is a typical method to scale out a software load balancer?
Scale up. Get more bandwidth for the load balancer e.g. multiple 10 Gb links. Check that your software can scale.