I'm planning to host a website. It would be a photo-sharing website. I'm trying to find out a server that I should buy to put the website online.
- The website is in Apache PHP.
- I'm assuming the number of users as 10,000 and 1000 are uploading the photos of average 1 MB.
- I'm assuming that this number, 10,000 will reach by the end of second year.
- I have multiple (5 to 7) DB servers(software) running and I'm planning to put all the DB's on one machine only. (Things do work for one user in laptop ;) )
- I'm using postgresql as my DB
Now, I'm looking for a (Dell T110 or R310 kinda) server that should be able to handle the HTTP requests properly. But I do not know
- Is 10,000 a big number of users, or if it may go more than expected
- Is it right decision to think of Buying a Server of my own instead of hosting it over a cloud or VPS
- Do I need to think of failover nodes, Load balancing for 10,000 users. (I'll keep a backup of DB and photos)
Please do let me know if question is very vague. I would be highly grateful if you could tell me the assumptions are totally dumb and provide me some pointers/hints.
If I were you, especially when starting out, I would look at leasing a virtual server that you can pay more or less for based on your resource usage & bandwidth usage. Once you have some real world statistics to use for trending you can use them to decide if/when moving away from cloud hosting is a sensible thing to do.
Number of users is not a good metric for planning capacity. Number of requests is better - but still there is huge variance between the amount of work a server has to do for each request comparing different scripts.
Really the only way to
A hosted service should mean that someone else is worrying about applying patches, backing up the server etc. OTOH you get a lot more control over the server if you manage it yourself. I would say that with 10k users, then going down the hosted route is probably the easiest option. But do keep your DNS registration seperate from the hosting - it makes switching much easier if you ever decide to change.
Note that running everything on a single server is far from ideal. If you want to scale a relational database, then big iron is the way to go - but for webservers you get better performance and much, MUCH better availability by spending the same money on 2 or more low end boxes. OK, so the servers you are looking at are not exactly big iron - but still about 2xthe price of a basic machine.
I can't answer the whole server question - I think that depends a bit on the user numbers (but having too many users is normally a nice problem to have)
On the photo file storage though, I would recommend you look at using a cloud solution - e.g. Amazon S3 or Azure blob - these are big, cheap and reliable in my experience. Hosting and serving the photos from their storage should, I think, reduce the requirements on your server.
In terms of before deployment.
Profile the website. Then make projections against the number you quoted and then add some.
If you are comfortable on doing any administration work whatsoever consider buying a server but also consider that you have to dedicate time for administration. In addition if you buy a server for $1000 and you know that it will be up for the next 2-3 years you will be paying in the end $41 to $28 per month (plus the co-location costs). Hardware can always be reused.
On the other hand enterprise HDDs are expensive and you don't want to lock yourself nor spend $1000 for HDDs now. So you might consider using Amazon S3 or any other service for storage. And don't get it started for the scalability talk.
All in all do the math and consider that there is also hybrid as an option