top4top showcase
DESCRIPTION
A showcase for higher payloads.TRANSCRIPT
Scaling for Higher Payload
Top4top.ru should be able to sustain
1,000,000 visitors daily, if need be.
But we don’t need to spend money to sustain payload we don’t have.
GoalNormal day Rainy day
A single $70/month Amazon server.
At least 100,000 users with 500,000 pv
daily.
Average pageload time—50 ms.
Lots of Amazon servers.
At least 1,000,000 users with 5,000,000
pv daily.
Average pageload time—50 ms.
Normal Day
Normal Day // Cache
1 day1 day 10 minutes10 minutes
1 day1 day
1 day1 day
5 minutes5 minutes10 10
minmin
Different blocks have different cache renewal intervals. Naturally, any of these blocks is also updated whenever its content is updated.
Normal Day // Cache
Normal Day // Cache
Administrators should be able to edit posts in this block. Thus, no caching for administrators here.
Normal Day // Cache
Let’s Test It!Normal day, 1 server in Ireland, the client is 10 hops away on a 10 Mbit channel
Normal Day // Infrastructure
nginx
apache + passenger
rails
mySQL memcache
Nginx takes clients’ requests & serves static stuff: images, css, js. By default
nginx balances to its own apache
Passenger launches new instances of rails daemons if need be.
Normal Day // Even Faster
nginx is used to serve static stuff, meaning 253 kilobytes of 260 kilobytes for the homepage. Only 7 kilobytes are served deeper than that.
apache + passengerlaunches rails instances to certain limit. After that we switch to the ‘Rainy Day’ mode.
gzip’dAll texts, scripts are gzipped and are served this way to the clients that are able to comply.
exprsAll files and images have their ‘expires’ headers set to distant future.
ETags Whenever a client asks for a not modified page, it gets ‘304 Not Modified’ and the page is being served from cache.
rn Some of the static is served using the same server, but different filenames for a client to be able to download more than two files simultaneously.
Normal Day // Homepage Traffic
Normal Day // nginx config
Normal Day // nginx config
Normal Day // nginx config
Rainy Day
Rainy Day // Infrastructure
After certain limit, the base nginx starts to balance across several servers, each of which runs the very same application,
deployed via cloning.
It’s cloud computing, baby!
Rainy Day // Infrastructure
nginx
apache + passenger
apache + passenger
apache + passenger
apache + passenger
Rainy Day // Infrastructure
If it’s not enough, the main server begins to serve as base only, shutting down its own
apache.
Rainy Day // Infrastructure
nginx apache + passenger
apache + passenger
apache + passenger
Rainy Day // Infrastructure
The final step is to isolate MySQL. Now we’re able to serve millions of pageviews
for $350 per month.
Rainy Day // Infrastructure
nginx apache + passenger
apache + passenger
apache + passenger
MySQL
Rainy Day // Cloning
top4top
top4top-1
top4top-2
top4top-3
3 additional servers
in 5 minutes!