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.
Goal Normal 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 // Cache 1 day 10 minutes 1 day 1 day 5 minutes 10 min Different blocks have different cache renewal intervals. Naturally, any of these blocks is also updated whenever its content is updated.
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 + passenger launches rails instances to certain limit. After that we switch to the ‘Rainy Day’ mode. gzip’d All texts, scripts are gzipped and are served this way to the clients that are able to comply. exprs All 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.
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!