By Simon Maple, Developer Advocate at ZeroTurnaround
The cloud presents a whole new set of constraints and opportunities, and it changes the way developers need to think about storage, networking, and how applications are designed to scale. In this two-part article series, I'll explore the differences developers need to consider when creating applications that are cloud-ready.
Trends in Cloud Computing and Rates of Adoption
Over the last two decades, the end-to-end process for delivering software was very different from what we experience today. First, our timelines were much longer. If you were developing a large application or a new Web site, you might be looking at 6-8 months from design and inception to actual delivery of a system. Software used to take months to deliver because we were waiting for infrastructure. Cloud computing didn't exist, VMs weren't commonly used, and the process of integrating and installing software involved developers training ops teams on how to install and configure software like the JVM.
Fast-forward to today and I can provision five hundred Linux VMs running Java 8 on Amazon AWS fronted by 30 Nginx servers and deploy to these machines in a few minutes. I can configure these machines using deployment automation tools like Chef, Puppet, or CFEngine, or I can choose to deliver Docker containers to VMs running in the cloud and move even faster. The revolution in cloud computing isn't that we're running VMs or containers on hardware, it's that application developers can manage infrastructure and deploy applications faster.
Although systems such as EC2 and Rackspace set the standard, there's more to cloud-based deployments than these two options. In a recent survey of 500 IT professionals conducted by ZeroTurnaround, 42% of respondents reported that they deploy their applications to a public cloud and 46% reported that they have deployed applications to a private cloud.
When it comes to cloud computing, the public cloud set the standards that private clouds are now ready to meet. When we look at trends in IT spending adoption, we see some clear trends: 1/3rd of survey respondents are using Amazon AWS whereas 45% of respondents are using Microsoft Azure as a public cloud platform. OpenStack is making inroads in the largest companies with approximately 1/5th of survey respondents reporting its adoption.
Public vs. Private Clouds: Which One to Choose?
If your organization is thinking about moving applications to the cloud, you'll need to understand the differences between public and private clouds. Here are the three different types of clouds you can use:
- Public clouds are clouds like Amazon AWS and Rackspace. These are services anyone can sign up for where your applications and databases are deployed on shared networks. Even though public clouds such as Amazon AWS provide services to encrypt and secure information when you deploy on a public cloud, you are still deploying on a multi-tenant system.
- Private clouds are clouds that run on your infrastructure, behind the corporate firewall. If you work in healthcare, e-commerce, or the financial industry, you are likely very familiar with the various regulations that require strong privacy and governance of systems and data. Most large enterprises still feel a bit queasy putting sensitive customer data into a multi-tenant public cloud. For these organizations, there are a host of options such as using OpenStack to manage an entire data center.
- Hybrid, private/public clouds are for large enterprises with enough resources to fund the development of isolated infrastructure. For example, Amazon AWS has built out several data centers dedicated to the intelligence community, and companies such as Hewlett-Packard offer hybrid approaches often spanning both private and public data centers.
If you are developing a small application for a startup, you need to move quickly. You'll likely opt for a public cloud. As developers, we're not confronted with accounting and budgets every day, but one of the advantages of a public cloud is that it shifts the costs to operating expenses. In other words, you are not asking your organization to make an investment in hardware. You have the flexibility to change cloud providers frequently and you are not "locked in" to your architecture. When you work at the scale of a startup or a small- to medium-sized business, you are likely working at an organization with a small operations team.
If you are developing application to fuel a multi-billion dollar business, this is when you are likely working with a large operations staff, teams that number in the thousands, and applications that deal with high-risk transactions and data. In these scenarios, if you are lucky enough to work with the right operations professionals, you may have the ability to use a tool like Rackspace or Amazon EC2 under the right constraints, but it is more likely that your organization's strategy will involve a private cloud managed by something like OpenStack.
In Part Two of this two-part series, I'll look at the basic architectural considerations for creating cloud-ready applications to realize the full potential of the cloud.
About the Author
Simon Maple is Head Developer Advocate for ZeroTurnaround, a Java Champion, JavaOne Rockstar, @virtualJUG founder, LJC co-org, and @RebelLabs author. Follow him on Twitter @sjmaple.