What are Cloud-Native Applications?
The ideas and concepts of cloud-native computing introduced a new way to implement complex, scalable systems. Even if you’re not hosting your application on a cloud platform, these new ideas will influence how you develop applications in the future.
Pivotal, the software company that offers the popular Spring framework
and a cloud platform, describes cloud native as:
“Cloud native is an
approach to building and running applications that fully exploit the advantages
of the cloud computing model.”
The Cloud Native Computing Foundation, an organization that aims to
create and drive the adoption of the cloud-native programming paradigm, defines
cloud-native as:
“Cloud native
computing uses an open source software stack to be:
1. Containerized. Each
part (applications, processes, etc) is packaged in its own container. This
facilitates reproducibility, transparency, and resource isolation.
2.Dynamically
orchestrated. Containers are actively scheduled and managed to optimize
resource utilization.
3. Microservices-oriented.
Applications are segmented into microservices. This significantly increases the
overall agility and maintainability of applications.”
“An approach that
builds software applications as microservices and runs them on a containerized
and dynamically orchestrated platform to utilize the advantages of the cloud
computing model.”
Let’s take a look at the different parts.
Container
The basic idea of containers is to package your software with everything
you need to execute it into one executable package, e.g., a Java VM, an
application server, and the application itself. You then run this container in
a virtualized environment and isolate the contained application from its
environment.
The main benefit of this approach is that the application becomes
independent of the environment and that the container is highly portable. You
can easily run the same container on your development, test or production
system. And if your application design supports horizontal scaling, you can
start or stop multiple instances of a container to add or remove instances of
your application based on the current user demand.
The Docker project is currently the most popular container
implementation. It’s so popular that the terms Docker and container are often
used interchangeably.
Orchestration
Deploying your application with all dependencies into a container is
just the first step. It solves the deployment problems you had previously, but
if you want to benefit from a cloud platform fully, you’re experiencing new
challenges.
Starting additional or shutting down running application nodes based on
the current load of your system isn’t that easy. You need to
·
monitor your system,
·
trigger the startup or shutdown of a container,
·
make sure that all required configuration parameters are in place,
·
balance the load between the active application instances
·
share authentication secrets between your containers.
Doing all of that manually requires a lot of effort and is too slow to
react to unexpected changes in system load. You need to have the right tools in
place that automatically do all of this. This is what the different
orchestration solutions are built for. A few popular ones are Docker Swarm, Kubernetes, Apache Mesos and Amazon’s ECS.
Microservices
Now that we have all the infrastructure and management in place, it’s
time to talk about the changes that cloud-native introduces to the architecture
of your system. Cloud native applications are built as a system of
microservices.
The general idea of this architectural style is to implement a system of
multiple, relatively small applications. These are called microservices. They
work together to provide the overall functionality of your system. Each
microservice realizes exactly one functionality, has a well-defined boundary and
API, and gets developed and operated by a relatively small team.
Comments
Post a Comment