Chapter 1. Introduction: Cloud Thinking Is Everywhere
Businesses are moving to cloud computing to take advantage of improved speed, scalability, better resource utilization, lower up-front costs, and to make it faster and easier to deliver and distribute reliable applications in an agile fashion.
Cloud-native applications are designed specifically to operate on cloud computing platforms. They are often developed as loosely coupled microservices running in containers, that take advantage of cloud features to maximize scalability, resilience, and flexibility.
To innovate in a digital world, businesses need to move fast. Acquiring and provisioning of traditional servers and storage may take days or even weeks, but can be achieved in a matter of hours and without high up-front costs by taking advantage of cloud computing platforms. Developing cloud-native applications allows businesses to vastly improve their time-to-market and maximize business opportunities. Moving to the cloud not only helps businesses move faster, cloud platforms also facilitate the digitization of business processes to meet growing customer expectations that products and services should be delivered via the cloud with high availability and reliability.
As more applications move to the cloud, the way that we develop, deploy, and manage applications must adapt to suit cloud technologies and to keep up with the increased pace of development. As a consequence, yesterday’s best practices for developing, shipping, and running applications on static infrastructure are becoming anti-patterns, and new best practices for developing cloud-native applications are being established.
Developing Cloud-Based Applications
Instead of large monolithic applications, best practice is shifting toward developing cloud-native applications as small, interconnected, purpose-built services. It’s not just the application architecture that evolves: as businesses move toward microservices, the teams developing the services also shift to smaller, cross-functional teams. Moving from large teams toward decentralized teams of three to six developers delivering features into production helps to reduce communication and coordination overheads across teams.
The “two-pizza” team rule credited to Jeff Bezos of Amazon is that a team should be no larger than the number of people who can be fed with two pizzas.
Cloud-native businesses like Amazon embrace the idea that teams that build and ship software also have operational responsibility for their code, so quality becomes a shared responsibility.1
Giving developers operational responsibilities has greatly enhanced the quality of the services, both from a customer and a technology point of view. You build it, you run it. This brings developers into contact with the day-to-day operation of their software. It also brings them into day-to-day contact with the customer. This customer feedback loop is essential for improving the quality of the service.
Werner Vogels, CTO Amazon
These shifts in application architecture and organizational structure allow teams to operate independently and with increased agility.
Shipping Cloud-Based Applications
Software agility is dependent on being able to make changes quickly without compromising on quality. Small, autonomous teams can make decisions and develop solutions quickly, but then they also need to be able to test and release their changes into production quickly. Best practices for deploying applications are evolving in response: large planned releases with an integration phase managed by a release manager are being made obsolete by multiple releases per day with continuous service delivery.
Applications are being moved into containers to standardize the way they are delivered, making them faster and easier to ship. Enabling teams to push their software to production through a streamlined, automated process allows them to release more often. Smaller release cycles mean that teams can rapidly respond to issues and introduce new features in response to changing business environments and requirements.
Running Cloud-Based Applications
With applications moving to containers, the environments in which they run are becoming more nimble, from one-size-fits-all operating systems, to slimmed down operating systems optimized for running containers. Datacenters, too, are becoming more dynamic, progressing from hosting named in-house machines running specific applications toward the datacenter as an API model. With this approach, resources including servers and storage may be provisioned or de-provisioned on demand. Service discovery eliminates the need to know the hostname or even the location where instances are running—so applications no longer connect via hardwired connections to specific hosts by name, but can locate services dynamically by type or logical names instead, which makes it possible to decouple services and to spin up multiple instances on demand.
This means that deployments need not be static—instances can be scaled up or down as required to adjust to daily or seasonal peaks. For example, at 7 a.m. a service might be running with two or three instances to match low load with minimum redundancy. But by lunchtime, this might have been scaled up to eight instances during peak load with failover. By 7 p.m., it’s scaled down again to two instances and moved to a different geolocation.
This operational agility enables businesses to make more efficient use of resources and reduce operational costs.
Businesses need to move fast to remain competitive: evolving toward cloud-native applications and adopting new best practices for developing, shipping, and running cloud-based applications, can empower businesses to deliver more functionality faster and cheaper, without sacrificing application reliability. But how are businesses preparing to move toward or already embracing cloud-native technologies and practices?
In 2016, the Cloud Platform Survey was conducted by O’Reilly Media in collaboration with Dynatrace to gain insight into how businesses are using cloud technologies, and learn their strategies for transitioning to the cloud.
There were 489 respondents, predominantly from the North America and European Information Technology sector. The majority of respondents identified as software developers, software/cloud architects, or as being in IT operations roles. Refer to Appendix A for a more detailed demographic breakdown of survey respondents.
94 percent of the survey respondents anticipate migrating to cloud technologies within the next five years (see Figure 1-1), with migration to a public cloud platform being the most popular strategy (42 percent).
The book summarizes the responses to the Cloud Platform Survey as well as insight that Dynatrace has gained from speaking with companies at different stages of evolution. An example of one such company is Banco de Crédito del Perú, described in Appendix B.
Based on its experience, Dynatrace identifies three stages that businesses transition through on their journey toward cloud-native, with each stage building on the previous and utilizing additional cloud-native services and features:
Stage 1: continuous delivery
Stage 2: beginning of microservices
Stage 3: dynamic microservices
How to Read This Book
This book is for engineers and managers who want to learn more about cutting-edge practices, in the interest of going cloud-native. You can use this as a maturity framework for gauging how far along you are on the journey to cloud-native practices, and you might find useful patterns for your teams. For every stage of evolution, case studies show where the rubber hits the road: how you can tackle problems that are both technical and cultural.