Inspired from this closed post over on programmers-stackexchange.
Pretty much, for an application that is resource intensive, is going physical a good idea for startups?
Disclaimer: The application I'm working on right now is such a 'resource intensive' application, and we've gone physical (well, more hybrid) and we're a startup. But sort of not a startup. The company founded way back in 2004ish and the application they built back then didn't have any web presence. Also, it was 2004; the Cloud wasn't even a word yet. Factor in a couple of other issues (like: the cloud vendors at the time couldn't do what we needed them to do) and physical made a lot of sense for us. The answer to this question for an already-existing company that already has a physical-based product but is looking to radically change that product will be different than for a group of four people with a big idea and some cash.
The question of whether or not to stay with what we're doing came up a lot during the building process of our new App, so I've given this issue a heck of a lot of thought. Therefore, I have Opinions about it.
There is a reason that conventional wisdom for startups is to do it all in the cloud somewhere. Several reasons, actually.
- When you're building a product, it's nigh impossible to predict how much hardware you're going to need so the flexibility allowed by the cloud is extremely attractive.
- If things crash and burn having all of your compute in the cloud means fewer assets to liquidate
- You don't need a hardware expert, just OS-experienced people.
- You don't need to find a location for the hardware.
- If you manage to get a rocket-launch, you can make your infrastructure bigger by throwing money at it a lot faster than you could if you were physical-based.
All very valid reasons.
Before I get into the details, it's important to note that there are three levels of going physical:
- Renting Servers from a colo or managed services provider. Which is the option the P.SE questioner was asking about.
- Renting Space from a colo and filling it with your own gear. Which is what we do. But then, even Amazon goes this route.
- Building your own datacenter on company property. This covers everything from my old job at WWU to Google. And probably Amazon in some regions/AZ's.
There are a few edge cases where cloud becomes less of a good idea, and the P.SE asker has one of them: the application under development works best on configs that the cloud-vendors consider unusual. For instance, if whatever you're doing requires GPU processing, the cloud options for that are rather scanty right now.
The cloud vendors provide virtual server configs for a wide range of use-cases that they believe cover most of expected needs. If whatever you're working on doesn't fit into their idea of "most", then physical begins to look attractive.
Need lots and lots of RAM but not that much CPU horse-power?
Need GPU, or multiple GPU?
Need extremely fast I/O?
Some cloud vendors can handle all of these, but the prices can be rather off-putting. But is it worth it to muck around with physical?
Buying your own servers, configuring them how you need, then shipping them off to an MSP gives you a good environment for your hardware and professional hardware techs when something goes wrong. It still costs, of course, but you get just what you need. It is entirely possible to beat the cloud costs going this route. But, you do lose the flexibility cloud gives you.
Going the route we did, rent space at a colo and install purchased hardware, is something that I'd only recommend when building your production environment. Or if funding isn't an issue, I'd recommend going there early on in the development cycle to start working on deployment issues. This is the option that does need a hardware expert. My company has me, and you can hire people like me either full-time or on a part-time basis through contracting companies. When you hit go-live, you will want full-time coverage though, so plan for that.
Going the self-hosting route is an even more complex decision to make. Plenty of startups began with a few servers in a basement or living-room of someone's house, but that doesn't scale (housemates rapidly become tired of the noise). Building a server-closet in the office (or home-office, such as those startups that began in 2004, ahem) is another route plenty of startups take, but scale issues continue; that closet is going to get hot if more than a few big servers get in there. Going this route means you're also assuming the environmental control aspects of managing computing hardware in addition to the computing hardware itself.
Which is several ways of saying:
If your case is special enough, it can overcome some of the negatives associated with the physical tiers.
Our case is just special enough, if you add in the physical infrastructure we already had.
Someone just starting out won't have that. The special will have to be more special than what we're doing. Only you can figure that out, but there are a few warning signs that you just might be that special:
- Your application requires server builds that are either very expensive, or not present in the cloud providers.
- The regulatory regime you're planning to operate under doesn't trust the Cloud yet.
- You need extremely reliable I/O performance (though this is getting better in cloudistan)
- You need extremely fast I/O performance, such as provided by SSDs.
THEN you may want to go physical!
Or embrace the power of and, go hybrid!