When a startup is choosing which cloud platform to build on, what are the most important things to consider? Cost? Features? Support? What are the strengths of each cloud provider?
I just want to note that of the three providers you mention, they're really not providing equivalent services (GCE is definitely much different than EC2, so does Azure and AWS ecosystem). So depending on your stacks, it should be an obvious choices (I can't say, because I don't know what you are doing).
Now, between Digital Ocean, Linode, Softlayer etc. (which are doing more of the same things), things got a bit muddier.
If your startup doesn't have an assumed hit-rate in the hundreds-of-thousands (or you are not in some computationally-intensive industry), ask yourself why you need to build on the so-called "cloud"? (which is meant for "scaling").
If you don't need the scale, don't build for it. It is like part of the last 10% of the 20% incremental changes you need. Focus on the 80% for now.
Buy yourself like 5 DO (or some VPS) servers, spin up your Docker (other easy-devops tool) containers and push your code.
Then focus on the really hard part, marketing/sales.
Note. I've also heard that AWS is quite expensive (comparatively speaking).
I think the biggest thing is just to avoid Paralysis Analysis.
If you're already committed to a specific technology, it may be best to continue down that path. As an example, if you're building .Net Applications it may be advantageous to move to Azure.
However, it you're looking to move fast and pivot when necessary you may want to look at AWS or Rackspace. I think those providers are pretty reliable and offer a lot of options.
From my experience AWS can be more expensive, but it is a joy to use. Once you get it down everything just syncs together perfectly and it is extremely easy to scale when the time comes.
Rackspace is cheaper and offers great customer support. The only pros is there's a lot less software tools compared to AWS but the basic things like orchestration and autoscale is almost comparable.
Are you funded? Are you part of an accelerator that gives you access to extremely large chunks of free cloud credits? How compute heavy is your workload?
At this time, you will always be paying up for cloud services. That being said, you are paying for something, not just fluff, that many people - myself included - find quite valuable.
Dedicated hardware is great, I can get a xeon 12 core E5v2 with 32 gb of ram and a guaranteed 300 mbps bandwidth for ~$100 / month - which the bandwidth alone would cost many multiples of that on AWS. However, what if a hard drive goes bad? Or a PSU blows? Or something else which knocks that server offline? How quickly can you get another one up and running?
With AWS/azure/google infrastructure, you'll have built your application to be fault tolerant of the underlying hardware and a new instance can be automatically spun up. You also can scale instantly - with dedicated hardware it'll be a minimum of hours (if your lucky) to days to get more servers online. If you get an expected wave of traffic - from a favorable blog post for example - on any of the mentioned cloud providers your app can automatically scale and provision servers without you clicking a button.
The other important cost to consider is time - what is your developers time worth? Instead of fiddling with the database server, you can pay amazon a premium and just use RDS. Instead of setting up a distributed queue so different components of your app can communicate, you can just use SQS.
However at the end of the day the answers to all these questions are going to be unique for everyone and different situations call for different solutions. If you needs lots of compute power and need it to be as cheap as possible - using dedicated hardware will be your best bet, unless you can architect a solution with spot instances.
As far as AWS vs. azure vs. google is concerned, I've used all three and AWS provides the best service at the most competitive price. Azure is probably better if you're using windows servers. Google's cloud offering offering is underwhelming - and is quite expensive for what you get.
If you are still very small - digital ocean is a fantastic option and can save you a lot of money until you need the reliability from a higher quality provider.
The other big issue people usually don't mention or consider when discussing dedicated hardware is that not only will it take longer to add capacity, but it is also a risk every time you add servers you risk the entire network that server is being added too. Unlike a cloud environment, adding servers to a dedicated environment is not necessarily going to be as well practiced - so errors are more likely... These types of errors are pretty bad too e.g. All servers offline kind of bad. We had this happen two very bad days followed and now I can only recommend aws with reserved instances and multiple regions.
As for choosing a provider, remember the cloud is more about horizontal and dynamic scaling. If your application has a predictable or consistent load the cloud is likely not be the best nor the cheapest solution. We had a client move off the cloud because they were mature and their growth was mostly predictable and usually followed a 3-6 month sales cycle that would mean there was plenty of time to allocate hardware to scale when needed.
I have used AWS and Azure professionally, only played with Google. Right now AWS is the most mature, stable and well documented. We have only had 2 clients come off AWS out of about 25ish we put there. We have had 4 out of the 5 leave Azure. That speaks volumes to me, one is maybe we suck at Azure, but I really feel it is more that Azure just hasn't matured far enough along.
I am sure plenty of people have had good experiences in Azure and Google, but to me it requires more time and resources to manage and resolve issues because both are less mature. AWS takes a little time to understand but it just works, and if you follow their recommendations you will rarely have any major issues. It isn't that things don't fail in AWS, because they do, but if you follow the basic design principles you won't have major issues from them. While in theory this is true with Google and Azure I just haven't seen them be as stable or mature, but I am sure that will change. Personally if I was re-evaluating today, I would look harder at Google since I haven't used it in production yet, but Azure wouldn't even be in the conversation right now.
As for what to consider, AWS can get expensive so you have to manage it properly and closely. Setup weekly cost reporting so you can see how you are trending and properly use a CDN where possible to reduce bandwidth charges etc. Also, properly select your storage in EC2 to make sure you aren't paying for unused space needlessly, same with CPU. AWS has some tools to help show you where you might be wasting dollars which helps too. All this really applies to all cloud environments too, not just AWS.
Features AWS wins hands down, but remember if you build your product depending on their services you have created a solution that is not extremely mobile without some code changes. Specifically this mostly happens with services like DynamoDB, SQS, not necessarily EC2 or RDS.
Support, AWS has rocked every time I have had to use them. Azure was also responsive but honestly seemed just as lost as we were sometimes, which didn't inspire confidence for me.
11 comments
[ 2.9 ms ] story [ 40.1 ms ] threadNow, between Digital Ocean, Linode, Softlayer etc. (which are doing more of the same things), things got a bit muddier.
If you don't need the scale, don't build for it. It is like part of the last 10% of the 20% incremental changes you need. Focus on the 80% for now.
Buy yourself like 5 DO (or some VPS) servers, spin up your Docker (other easy-devops tool) containers and push your code.
Then focus on the really hard part, marketing/sales.
Note. I've also heard that AWS is quite expensive (comparatively speaking).
If you're already committed to a specific technology, it may be best to continue down that path. As an example, if you're building .Net Applications it may be advantageous to move to Azure.
However, it you're looking to move fast and pivot when necessary you may want to look at AWS or Rackspace. I think those providers are pretty reliable and offer a lot of options.
Meanwhile Linode, RamNode, etc.
At this time, you will always be paying up for cloud services. That being said, you are paying for something, not just fluff, that many people - myself included - find quite valuable.
Dedicated hardware is great, I can get a xeon 12 core E5v2 with 32 gb of ram and a guaranteed 300 mbps bandwidth for ~$100 / month - which the bandwidth alone would cost many multiples of that on AWS. However, what if a hard drive goes bad? Or a PSU blows? Or something else which knocks that server offline? How quickly can you get another one up and running?
With AWS/azure/google infrastructure, you'll have built your application to be fault tolerant of the underlying hardware and a new instance can be automatically spun up. You also can scale instantly - with dedicated hardware it'll be a minimum of hours (if your lucky) to days to get more servers online. If you get an expected wave of traffic - from a favorable blog post for example - on any of the mentioned cloud providers your app can automatically scale and provision servers without you clicking a button.
The other important cost to consider is time - what is your developers time worth? Instead of fiddling with the database server, you can pay amazon a premium and just use RDS. Instead of setting up a distributed queue so different components of your app can communicate, you can just use SQS.
However at the end of the day the answers to all these questions are going to be unique for everyone and different situations call for different solutions. If you needs lots of compute power and need it to be as cheap as possible - using dedicated hardware will be your best bet, unless you can architect a solution with spot instances.
As far as AWS vs. azure vs. google is concerned, I've used all three and AWS provides the best service at the most competitive price. Azure is probably better if you're using windows servers. Google's cloud offering offering is underwhelming - and is quite expensive for what you get.
If you are still very small - digital ocean is a fantastic option and can save you a lot of money until you need the reliability from a higher quality provider.
I have used AWS and Azure professionally, only played with Google. Right now AWS is the most mature, stable and well documented. We have only had 2 clients come off AWS out of about 25ish we put there. We have had 4 out of the 5 leave Azure. That speaks volumes to me, one is maybe we suck at Azure, but I really feel it is more that Azure just hasn't matured far enough along.
I am sure plenty of people have had good experiences in Azure and Google, but to me it requires more time and resources to manage and resolve issues because both are less mature. AWS takes a little time to understand but it just works, and if you follow their recommendations you will rarely have any major issues. It isn't that things don't fail in AWS, because they do, but if you follow the basic design principles you won't have major issues from them. While in theory this is true with Google and Azure I just haven't seen them be as stable or mature, but I am sure that will change. Personally if I was re-evaluating today, I would look harder at Google since I haven't used it in production yet, but Azure wouldn't even be in the conversation right now.
As for what to consider, AWS can get expensive so you have to manage it properly and closely. Setup weekly cost reporting so you can see how you are trending and properly use a CDN where possible to reduce bandwidth charges etc. Also, properly select your storage in EC2 to make sure you aren't paying for unused space needlessly, same with CPU. AWS has some tools to help show you where you might be wasting dollars which helps too. All this really applies to all cloud environments too, not just AWS.
Features AWS wins hands down, but remember if you build your product depending on their services you have created a solution that is not extremely mobile without some code changes. Specifically this mostly happens with services like DynamoDB, SQS, not necessarily EC2 or RDS.
Support, AWS has rocked every time I have had to use them. Azure was also responsive but honestly seemed just as lost as we were sometimes, which didn't inspire confidence for me.