Cloud computing has a substantial impact on how companies acquire, manage and maintain infrastructure for their applications. Cloud computing opened a new path for applications ranging from new programming languages, automation and deployment processes to new forms of architecture. We are living in a time of immense changes in technology: today’s standards were simple ideas just three years ago.
Why develop cloud native applications?
Cloud computing is elastic, resilient, managed on demand and maintains a number of sensors that collect and store information about its operations. Not all applications managed in cloud computing make use of these features. Some are ready to scale, but they are not resilient, while others do not adapt their operation to the data that is being surveyed by the cloud, they simply ignore it.
Cloud native applications will change how applications are linked to cloud computing. These are applications that incorporate the characteristics of cloud computing in themselves, achieving optimal use of technology and resulting in a solution that optimizes investment costs, with greater reliability and security.
The four ages of server infrastructure
In modern application development, we have gone from monolithic to microservices applications, from on-premises servers to cloud computing infrastructure. Let’s discuss what those entail:
1. Static age: the classic server
A monolithic application is installed on the physical hardware on-premises server, which causes laborious deployments, and updates usually result in downtime of service. Also, the backups are made on tapes and recovery processes are long.
In the case of an increase in the service needs of an application, the hardware is changed for one of higher performance. Consequently, the solutions (infrastructure and applications) aim to be stable, fixed, and solid. Any changes would be rejected because a change requires effort and planning and imposes a risk for the application, its data, and the business continuity.
2. Virtualization age: the consolidation
Virtualization resulted in massive consolidation processes into extremely oversized physical servers. They run software that emulates and virtualizes hardware to provide virtual machines to which install operating systems, services and applications.
Here we observe the first paradigm shift: the servers and their applications become “files” that can be copied, backed up and moved to another physical hardware. Therefore it becomes easy to allocate more virtual hardware to meet increases in demand.
In general, the administration of virtual servers, deployments, and upgrade of applications remains unchanged, in the same way as in the classic server age. Here, however, it is possible to view the use of configuration management tools and automatic application deployment tools.
3. The cloud age: a new infrastructure for the business
Today all the resources for a solution are available “as a service”. The applications are on separate layers running on separate virtual machines (instances), which can grow or decrease horizontally in quantity, according to the service needs of that particular layer. In addition to infrastructure, platforms are also available as a service, prepared to receive the applications and put them to work. At this age, the 12 factors are established to assist applications to be ready for cloud computing.
Consequently, the automation chains of deployment processes and solution maintenance are developed, such as continuous integration, infrastructure as code, continuous deployment, delivery pipeline, and orchestration. As a result, DevOps engineering is introduced to deal with all these elements.
Despite these changes, the solutions (infrastructure and applications) are closely linked to the provider of cloud computing. Once the applications are deployed in both IaaS or PaaS, changing providers becomes difficult and, sometimes, unfeasible.
4. The Cloud Native age: applications with cloud properties
Cloud native is a new relationship between applications and cloud computing. Elasticity, resilience, operability, and observability are the four key characteristics that become intrinsic parts of the application:
- Elasticity is meant to satisfy demand and is used to execute rapid deployments and fast iterations, while engineering simplifies complexity in smaller units: microservices. The application is broken into small parts that can be maintained by different teams and scaled independently.
- Resilience welcomes failures instead of trying to prevent them; it takes advantage of the dynamic nature of running on a cloud computing platform to adapt and absorb problems.
- Operability adds control of application lifecycles from within, instead of relying on external processes and monitors.
- Observability exposes facts for the business to make informed decisions.
Native cloud applications take responsibility for managing and automating their health. As a result, developers can expose the state of health (following business rules) and create alerts when considered necessary.
Furthermore, they also provide information on the status of the application at all times, keeping historical records. The application continuously reports telemetry data allowing decision-making: how many requests are answered per minute? What are the slowest operations? What are the errors and the average response time, etc? Finally, this data is cross-referenced with data from cloud computing to have a global idea of performance.
The definition of “cloud native” is a work in progress, but the Cloud Native Computing Foundation (CNCF) says:
Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach. These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
At Moove It we aim to understand the needs of our clients when defining the best solutions that effectively help their business, resulting in the most optimal investment allowing for the natural growth of the company.
Therefore, in addition to offering quality software and applications, we aim to promote the feedback these applications bring to the business; we are interested in continuous changes in technology to avoid locking suppliers while taking into account the stability and reliability of the solutions.
Computer Foundation, Cloud Native. “CNCF Cloud Native Definition v1.0.” GitHub, 6 June 2018, github.com/cncf/toc/blob/master/DEFINITION.md.
Murphy, Niall Richard, et al. Site Reliability Engineering: How Google Runs Production Systems. O’Reilly, 2016.
Garrison, Justin, and Kris Nova. Cloud Native Infrastructure: Patterns for Scalable Infrastructure and Applications in a Dynamic Environment. O’Reilly Media, 2018.
Hoffman, Kevin, and Daniel P. Nemeth. Cloud Native Go: Building Web Applications and Microservices for the Cloud with Go and React. Addison-Wesley, 2017.