Have you heard all the buzz around cloud native applications? So, what do they really mean? During 2000s, lot of IT companies like Google, eBay and Tweeter required efficient means of building and deploying their applications in order to provide global services. Along the way, these companies realized that they need a stable architecture without rewriting their architecture over and over again. So this made the entrance to cloud native applications. Cloud native refers to applications that are installed in cloud based virtual machines. Cloud native applications use an elastic infrastructure. This underlying infrastructure should support the applications to scale up and down at a rapid rate, with the ability to offer millions of nodes or instances at the same time. As I think, adopting cloud native applications helps an organization to transform their information technology into a force for true agility.
Virtual Machines
During the early stages of cloud computing, the primary mover was the virtual machine. Many other hardware virtualization methods sprang.- One of the most important open source project called Xen project had been started with the expectation to power some of the largest clouds in production today. Amazon web services, Aliyun, Rackspace Public Cloud and many other hosting services use Xen Project software. It is also integrated with multiple cloud orchestration projects like OpenStack.
- KVM (Kernel-based Virtual Machine) was introduced as a virtualization infrastructure for the Linux kernel that turns into a hypervisor.
- Microsoft Hyper-V on Windows was introduced to provide software infrastructure and basic management tools to create and manage a virtualized server computing environment.
Multi tenancy
Multi tenancy is a type of architecture in which a single instance of a software application serves multiple customers, where each customer is called a tenant. A tenant can customize some parts of the application, but not the application's code. Multi tenancy can be identified as a model where each computer has accounts and users can log into their accounts and share disk space and CPU resources. Multi tenant computing takes advantage of resource sharing, virtualization and remote access.
These technologies that were originally purposely built for a small set of selected companies like Google, eBay and Facebook are now been brought to the world through open source projects so that everyone other than the handful of companies with large budgets and large teams can also benefit from them.
And that's where this really leads to a revolution: a cloud native revolution!
And that's where this really leads to a revolution: a cloud native revolution!
Containerization
The concept of "containerization" is one of the most important areas of innovation for modern computing. This has a huge impact on cloud computing and on how enterprises develop their cloud applications.
Over the last decade, applications were monolithic. They were built on a single stack such as .NET, Java etc. and they had been deployed to a single server. Any how, they lived long. Then came load balancers where the workload was distributed across multiple computing resources. Still they were monolithic.
After a huge revolution, today applications are constantly developed where security patches and updates are often done. New versions are being developed often. They are built from loosely coupled components and they are deployed to a multitude of servers. This is where containers comes into play.
In brief container is a,
Lightweight Linux environment
Deployable application
Introspectable, runnable artifact
Lightweight Linux environment
Deployable application
Introspectable, runnable artifact
So what does a container provide that a virtual machine does not?
- Simple deployment : A container simplifies the deployment process of the application no matter where you are deploying it. It packages the application as a single addressable, registry stored, deployable component.
- Rapid availability : The package can boot faster compared to a modern virtual machine.
- Leverage micro services : Containers allow developers and operators to subdivide the compute resources further.
- Better performance
- Faster provisioning of resources : Since the developer has in their laptop plenty of compute power to run multiple containers, development is fast and easy.
- Quicker availability of new application instances : Release administration is easy as pushing a new container is a single command.
- Easy and cheap testing : With a container, we can do thousands of simple tests at the same cost.
The significance of containers also lies in the fact that, no matter where we run it, it looks the same everywhere we run it. Therefor using containers, we can install the application in a production data center and we can make it to work exactly the same in the development environment.
According to my point of view, the most important feature that containerization ensures is a portable, consistent format for running applications on diverse hosts. Considered as a whole, containerization allows workloads to easily flow to where they are cheapest and fastest to run.
Containers are the idea of running multiple applications on a single host. Instead of virtualizing a server to create multiple operating systems, containers offer a more lightweight solution by virtualizing the operating system, allowing multiple workloads to run on single host.
Recently containers became popularized by a containerization mechanism called Docker.