A lot of the DevOps world seems to revolve around deploying to "the cloud," usually Amazon's AWS, Google, or Microsoft Azure. Is cloud inherent to DevOps? What alternatives exist to the cloud, and can DevOps apply there? What advantages makes the cloud so appealing? This article will try to give a coherent and balanced answer to all these questions.
What is the cloud?
The most basic question is: what makes something "the cloud?" We've identified three providers above. But what about other hosted solutions providers? What distinguishes cloud computing from something like a Virtual Private Server (VPS)?
The biggest distinguishing point of cloud computing is the on-demand nature of it. Typically, with VPS-style solutions, colocation, or other hosting options, machines are allocated for large periods of time, and have some significant ramp-up time before they are available. This leads to a mindset where a machine is expected to be provisioned, configured, and maintained.
Cloud computing challenged this paradigm. What if a machine could be rented by the hour, or the minute, or even the second? What if machines are intended to be ephemeral? What if your compute capacity scaled with demand?
This shift in mindset has led to many of the best practices in the DevOps world today, such as immutable infrastructure and auto-scaling. And therefore it's no surprise that cloud deployments are so commonly the focus of DevOps articles and services.
Can we use DevOps outside the cloud?
The short answer is yes. The primary principles behind DevOps, such as knocking down the wall between dev and ops, apply regardless of environment. And even things like immutable infrastructure can be achieved by using tools like containerization and Kubernetes on your self-managed machines.
Other cloud advantages
Beyond the on-demand nature of cloud, some additional benefits include:
- Hosted services. When you use a provider like AWS, you have services like RDS, which can deploy a SQL database for you with little to no maintenance. These kinds of managed offerings can greatly simplify your deployment story. On the other hand, they run the risk of tying you down to a specific cloud provider, so caveat emptor!
- Geographic distribution. Often times, cloud providers will provide multiple datacenters around the world for your deployments. If you need a website with fast ping times to both a US and Asian market, you can relatively easily deploy an identical system in both locations with little extra code. Keep in mind, however, that having multi-datacenter unified deployments is still a lot of work!
The cloud does come with some trade-offs, however.
- Higher cost. Compared to VPS providers, colocation, and on-prem machines, the raw cost per compute unit, memory, drive space, and network utilization will typically be higher with the cloud. The trade-off is that you can burst your utilization based on demand. But if you're not careful, it's very easy to spend a lot of money on the cloud.
- Longer ramp-up times. It typically takes longer to properly configure a cloud based deployment than a simple VPS-based deployment (though we can help with that). Typically, this is warranted, because some of the complexity you're dealing with will save you the pain of downtime in the long run.
If you're interested in learning more about using the cloud, or want to hear about using DevOps practices in your on-prem setups, check out our DevOps syllabus, read up on our training offerings, and learn about our consulting services.