What I am asking is a very common question that comes to any developer's mind when he/she wants to host a server but a precise answer is not easily available. I need to host a server which returns HTTP response of 20KB. This server is expected to get ten million request a day, maximum 10 thousand request per minute. What server capacity (RAM, bandwidth etc) I should have? Lets safely ignore other factors like storage, database capacity like SQL etc. The prime objective of this question is to judge hardware estimation in terms of bandwidth and RAM(or other hardwares) that can handle so many simultaneous connections.
It would be very helpful not just to me but to anyone interested, if the person answering this question provide explanation about the factors that were considered to arrive at the answer. The formula governing these factors will help anyone to change requirements in my original question and arrive at the answer needed.
There is no formula. The best method is try to get some test equipment, and setup an environment similar to the production environment and test.
Zoredache is right: you need to do real world testing with your application in order to do accurate capacity planning. But with that said...
If you expect to get ten million requests per day, and each request is 20 KB, that works out to about 190 GB per day, or 5912 GB per month. To get a rough idea of bandwidth costs, Amazon charges $0.12/GB on their S3 service, so you're looking at $709.44/month for bandwidth alone.
Your estimated peak load is 10,000 requests per minute, or 167 requests per second. At 20 KB each, that is 3.26 MB/sec of data, or about 26 Mbps which is how bandwidth is normally measured.
If you're serving small static files, any modern server should be able to handle this load. If you're doing a lot of computation to produce that 20 KB of output, this could easily crush even the most powerful servers. Without knowing more about your application, it's impossible to determine whether bandwidth is the limiting factor.
Good luck!
well, there is no exact formula, but based on the numbers you provided, one can estimate some of the specs needed.
10.000 Requests per Second
20KB per Request
equals 200.000KB per Second
So, ignoring storage and IO Bandwidth, you would at least saturate two 1GE Links.
Without knowing the nature of the responses, i can not provide any estimation on Storage needs or RAM
So you would need to provide some more information
Would you be able to cache the content?
Are you using PHP, ASP or similar?
If you are serving static content you could just use two servers with huge amounts of ram and 1GE Nic each, put 2 load balancers in front.
That should suffice.
If you are serving dynamic content this task becomes a whole different ballgame.