Round robin where each server has a weight, and a server with weight 3 gets three turns for every one turn a server with weight 1 gets. It lets bigger servers take a bigger share. Below, Server 1 is bigger than the other two: change its weight and see when the load evens out and when it does not.
The three servers drawn are one of your 2 groups of one big and two small servers, and each dot stands for 100 real requests. A bigger server has more workers, so it handles more requests at once. Only the speed is slowed, so you can follow single requests. Requests arrive at random, as real traffic does, so the busy figures drift around the average rather than sitting on it.
Busiest hour vs the daily average. The book's estimate uses 2x.
Measured by load testing. A big server handles its size times this.
Headroom for spikes, slow requests and a failed server. 50 to 70% is common.
1. Average requests per second
2. Peak requests per second
3. Servers needed
4. With the weight matching the size
5. With your weight, 3
6. If a big server slows to half its size
Steps 1 and 2 are the estimation method from the back-of-the-envelope chapter of Alex Xu's System Design Interview, Vol. 1, including its 2x peak. Steps 3 to 6 are standard capacity planning: a server with weight w out of a total W receives w / W of the requests, and its load is that share of the traffic divided by what it can handle.
NGINX weights single servers; AWS weights whole groups of them.
weight is 1 unless set; in the documentation's example, a server with weight=5 and two without get 5, 1 and 1 of every 7 requests. Since a 2012 change by Maxim Dounin, NGINX spreads those turns out: its commit message gives weights { 5, 1, 1 } producing { a, a, b, a, c, a, a }, "instead of { c, b, a, a, a, a, a } produced previously." The smooth order in the scene is that method.All three are primary sources: NGINX's documentation, the change itself in NGINX's source history, and AWS's documentation. Quoted phrases are short attributed quotations; everything else is described in our words. Defaults change between versions, so check the pages for current values.