Evolving for the Emergence of Cloud-Native Applications and Services
There is much to be considered in the complex IT ecosystems that support modern enterprises. Just like a clock, each little cog and gear plays a critical role in making sure everything is on time and in working order. Unlike a clock, however, IT environments are far less predictable and must be built with more flexible, scalable parts and pieces to function at an optimal level. The relationship between an IT infrastructure and application is particularly important as they must “communicate” with one another in order to scale and react to changing demand.
Vertical and Horizontal Scaling
Autoscaling is a service feature that automatically adds or removes compute resources depending upon actual usage and continues to be considered as a viable approach to deal with these challenges. Our partners at Microsoft have outlined the two typical forms of vertical and horizontal scaling currently in use for application aware infrastructures, including:
“Vertical Scaling (often referred to as scaling up) requires that you redeploy the solution using different hardware. In a cloud environment the hardware platform is typically a virtualized environment, and vertical scaling involves provisioning more powerful resources for this environment and moving the system onto these new resources. Vertical scaling is often a disruptive process that requires making the system temporarily unavailable while it is being redeployed. It may be possible to keep the original system running while the new hardware is provisioned and brought online, but there will likely be some interruption while the processing transitions from the old environment to the new one.”
“Horizontal Scaling (often referred to as scaling out) requires deploying the system on additional resources. The system can continue running without interruption while these resources are provisioned. When the provisioning process is complete, copies of the elements that comprise the system can be deployed on these additional resources and made available. If demand drops, the additional resources can be reclaimed after the elements using them have been shut down cleanly.”
Application Aware Infrastructure
Regardless of whether you choose vertical or horizontal scaling, the truth today is that the world we live in is highly virtualized. And with many new applications being designed as cloud native, there is an opportunity to build these apps so they have an awareness of how they will need to be scaled or adapted from the onset. The most innovative cloud services companies and developers need to think about building and architecting apps that can be used in both the horizontal and vertical scenarios to cater to this “application aware infrastructure.” Meaning, the infrastructure should be made aware of the context of the application and the “rules” it should watch through the tooling we refer to as autoscaling.
This “grow forward” model is effective, but there is still a tremendous footprint of legacy applications in use and there is a shortage of development talent that can build in this new world. When I say “legacy,” I don’t just mean older applications that are still in use, but also new apps being designed in a more traditional way. Simply put, autoscaling does not always fit the application, so it may not be able to scale in the ways that the application aware infrastructure enables.
Infrastructure Aware Applications
While the application aware infrastructure model may have less of an impact on the app (aka the app continues to run, while the infrastructure does all the magic behind the scenes), I believe there are limitations to the autoscaling capabilities of infrastructure – particularly when servicing a variety of applications or the nuances of a new application.
As an alternative, I propose infrastructure aware applications. In this model, developers build an application in a way that the app is actually aware of the infrastructure that it’s running on and recognizes that the infrastructure is virtualized and has accessible APIs. The application can look at things that aren’t necessarily infrastructure-centric and can focus on metrics about the application itself. From there, the app can take action on the infrastructure based on its analysis of the environment. This moves the burden of autoscaling from the infrastructure owner to the developers who need to understand the notion that this application will run in this cloud-enabled infrastructure.
The application infrastructure aware model is still a very viable option – especially as it can provide a quick path to autoscaling – but there are several key limitations with this model. With an infrastructure aware approach, you can purpose-build an application and gain greater control.
While this application-centric approach is still fairly new, savvy developers are able to recognize the significant benefits in the long run. As with any new approach, it will take time to see this shift take place. Just like a clock – it will all happen in good time!
This blog was originally published by App Developer Magazine on March 16, 2017.
For the latest industry insights and cloud news, follow David Grimes on Twitter @dgrimescloud. You can also subscribe to our blog by entering your email address into the form in the right side of this page and receive a weekly roundup in your inbox every Friday.