Cloud native apps: Perspectives from Navisite
|Richard Harris in Cloud Services Thursday, March 16, 2017|
Cloud native apps advice from David Grimes, Vice President of Product Engineering, Navisite.
Vertical and Horizontal Scaling
Autoscaling is a cloud computing 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. Microsoft recently outlined the two typical forms of vertical and horizontal scaling currently in use for application aware infrastructures, including:
1. “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.”
2. “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 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!
Clouds are distributed technology platforms that leverage sophisticated technology innovations to provide highly scalable and resilient environments that can be remotely utilized by organizations in a multitude of powerful ways. To successfully build upon, integrate with, or even create a cloud environment requires an understanding of its common inner mechanics, architectural layers, and models, as well as an understanding of the business and economic factors that result from the adoption and real-world use of cloud-based services.
Learn the best ways to organize your app development projects, and keep code straight, clients happy, and breathe a easier through launches.
The ultimate hands-on Linux user guide.
Write and run code every step of the way, using Android Studio to create apps that integrate with other apps, download and display pictures from the web, play sounds, and more. Each chapter and app has been designed and tested to provide the knowledge and experience you need to get started in Android development.
How to create a profitable, sustainable business developing and marketing mobile apps.