The emergence of microservice architectures is part of a broader set of practices intended to take advantage of cloud, orchestration, scalable systems, containers, and automation. Collectively, these practices are often referred to as “Cloud Native.” Cloud Native practices have been aggressively adopted by members of the Linux and Open Source communities.
While there is a wide diversity of opinion about how “Cloud Native” applications should be designed and built, it is generally agreed that such applications follow a set of best practices. Many of these have been discussed in earlier sections when we introduced the fundamentals of microservices and discussed DevOps practices. One important set, often called the “Twelve-Factor App” methodology is worth reviewing because it has important implications when implementing microservices using Docker and Kubernetes.
Types of Cloud Native Applications
The twelve factors of Twelve Factor applications are often applied in slightly different ways.
When implemented as microservices, they can often be mapped into four types of cloud native
applications. The twelve factors in Twelve Factor Apps are principles intended to create applications highly scalable applications. First popularized as a set of best practices for the cloud environment Heroku, they have been broadly adopted and intend to encourage software that is:
• easy to setup so that new developers are able to join the project efficiently
• cleanly integrated with the operating system or platform where they run, so it is possible to move them between environments
• deployable to cloud platforms, so that underlying administration of a physical or virtual machine is not necessary
• minimize differences between development, staging, and production environments
• interact with other software components via well-defined interfaces so that it is possible to scale without needing to make changes to tooling, architecture, or development process
These types also conveniently map to the layers of legacy monolith applications. Some of these application types are stateless, while others are durable. Some run as batch processes while others execute in an event driven (perhaps server less) context. They are:
Stateless Services (which maps to the scalable layer of previous architectures): in a microservice environment, these types of services expose APIs and user-experiences. The layer can dynamically expand and shrink depending on its runtime usage.
Stateful Services (durable layer): these types of services provide storage and persistence and include relational databases, NoSQL databases, graph databases, and object storage.
Like stateless services, these applications also expose an API that can be consumed by either a stateless service or a batch application.
Batch Processing (parallelizable layer): represents scheduled, batch, or parallel jobs. Examples include operations such as extract, transform, and load (ETcL) tasks; the training of machine learning models; or large-scale computations needed for scientific modeling.
Event Driven: the event driven layer helps to process events or alerts that might have been
triggered by other services. The code may be deployed as standalone workers, or as part of functions in a “server-less” framework.
Start Your Transformation with DVO Consulting!
Contact us to learn more about cloud native applications and how DVO Consulting can help you deliver your software and better engage your customers. As a national IT, business consulting, and staff augmentation firm, DVO Consulting is founded and headquartered in Bountiful, UT to service the ever growing silicon slopes market and the west coast. We also have offices in Great Falls, VA, which supports clients in Maryland, Virginia and Washington DC.