Over the past decade there has been a change taking place in how applications are built. As applications become more expansive in capabilities and more critical to how a business operates, (or in many cases the application is the business itself) a new style of architecture has allowed for increased scalability, portability, resiliency, and agility. In order to support the goals of a modern application, the surrounding infrastructure has had to evolve as well. Platforms like Kubernetes have played a big role in unlocking the potential of modern applications and is a new paradigm in itself for how infrastructure is managed and served.
To help our community transition the skillset they've built to deal with monolithic applications, we've put together a series of videos to drive home concepts around modern applications. This article highlights some of the details found within the video series.
In these first three videos, we breakdown the definition of a Modern Application.
One might think that by name only, a modern application is simply an application that is current. But we're actually speaking in comparison to a monolithic application. Monolithic applications are made up of a single, or a just few pieces. They are rigid in how they are deployed and fragile in their dependencies. Modern applications will instead incorporate microservices. Where a monolithic application might have all functions built into one broad encompassing service, microservices will break down the service into smaller functions that can be worked on separately.
A modern application will also incorporate 4 main pillars.
Scalability ensures that the application can handle the needs of a growing user base, both for surges as well as long term growth.
Portability ensures that the application can be transportable from its underlying environment while still maintaining all of its functionality and management plane capabilities.
Resiliency ensures that failures within the system go unnoticed or pose minimal disruption to users of the application.
Agility ensures that the application can accommodate for rapid changes whether that be to code or to infrastructure.
There are also 6 design principles of a modern application.
Being agnostic will allow the application to have freedom to run on any platform.
Leveraging open source software where it makes sense can often allow you to move quickly with an application but later be able to adopt commercial versions of that software when full support is needed.
Defining by code allows for more uniformity of configuration and move away rigid interfaces that require specialized knowledge.
Automated CI/CD processes ensures the quick integration and deployment of code so that improvements are constantly happening while any failures are minimized and contained.
Secure development ensures that application security is integrated into the development process and code is tested thoroughly before being deployed into production.
Distributed Storage and Infrastructure ensures that applications are not bound by any physical limitations and components can be located where they make the most sense.
These videos should help set the foundation for what a modern application is. The next videos in the series will start to define the fundamental technical components for the platforms that bring together a modern application.