Which hosting to use?2019-06-18
What hosting should I be using? Do I need to be on AWS?
The simple answer is that unless you have a specific need — such as reducing costs for a specific existing workload — it doesn't matter. Choose whatever you are familiar with. However lets break that down a bit.
Hosting providers can be broadly categorized into:
- Cloud Providers
- VPS (Virtual Private Server) Providers
- Platform as a Service Providers (PaaS)
- Bare Metal Providers
The top three cloud providers are AWS, Microsoft Azure, and Google's Cloud. AWS takes the lion's share of the market, and between the three they pretty much are cloud hosting. All three are large providers with mature offerings, including many additional services. You could fill a bookcase with manuals on AWS's offerings alone. Between the three there are minor differences, AWS is the oldest and most comprehensive, Google has the best support for Kubernetes, and Azure is the best for integrating with non-cloud (or "other cloud") providers.
I've encountered a persistent misunderstanding about Azure: that they only offer Windows based hosts. That is just a myth, Linux and BSD/Unix are on a equal footing. Azure also isn't small... Google and Azure are vying for the second largest cloud provider status, and Azure currently has the lead.
The major drawback to going with one of the "big three" cloud providers is the complexity of their offering. In many ways they are the professional's cloud, something you are going to have to invest a significant effort to understand, secure, and operate effectively. It is also harder to know what your bill is going to be ahead of time, and insuring you don't spend significantly more than you had planned on.
VPS Providers these companies specialize in providing virtualized servers, that are easy to use, fast, and with predictable billing. Some companies are also branching out to provide additional cloud services, such as managed databases , load balancers, cloud storage etc. Digital Ocean and Linode lead the pack here, but there are many other providers as well.
Platform as a service providers, the best know of which is Heroku. The basic premise of the PaaS providers is that you need know less about ops: running servers, databases etc. you leave that to them, use their tooling, and get back to building your unique value. I find it to be a very mixed bag. If you are already familiar with one, and don't know anything else about ops, then I think it holds up well. Learning enough to run your software well would take awhile, and you would be better off spending that time building your new business. On the other hand, you are locked into their platform, you get only what they offer and they cost more per unit of compute. Additionally it is not that much more effort to learn an industry standard solution, like docker, that will allow you to handle ops on any of the other cloud providers.
Bare metal providers will rent you a real hardware server, in one of their datacenters. This is a step back from buying/building your own hardware, and renting space for it in a datacenter — or building your own, probably small "datacenter". With surprisingly few developers or operations still having experience with real hardware, this can seem both daunting and almost anachronistic. But the same security guidelines that apply to a virtual server apply to a physical server, and what you lose in deployment flexibility, you make back with interest in reduced costs. On a cloud provider you can reasonably expect to deploy a server in seconds, and pay for it by the second without any further commitment, most bare metal providers are going to take from minutes to hours to deploy a server, and you will generally need to commit to a minimum of one month, you will gain about an 8x (not 8%, but 800%) cost reduction for the same amount of compute/RAM/storage etc. A good bare metal provider is OVH, or their So You Start & Kimsufi brands.
There are also companies that specialize in providing specific hardware, if you know that you need particularly GPUs specs an ASIC or need to run (or test) on an ARM based system for example.
What do I recommend? First off, go with what you know. When you reach the point that you are spending enough that it matters, or are encountering a specific scaling challenge, then it is good time to seek specific professional advice. Drop me a line if you are interested.
A good default option is Digital Ocean, it's simple & straightforward, they offer free credit to get you started, and they have several add on cloud services if you need them.
A final note is that it is not unusual to switch between providers or even back to a provider as a project grows. Running software ops for a one (or few) person, for a company with a dozen or more devs or for a company with several hundred are all very different beasts. If you are spending too much, on hosting, on lost developer productivity or downtime it's time to seek that professional advice again