What is a Modern Application ?
To define a modern application , let us analyze the requirements of a modern software application in todays digital world which is changing by the hour.
To start with, let us say we have a customer facing web application( e.g. Zomato / CoWIN) that is just launched in the market.
We really want this application to be lightweight and appealing to the user for easier user adoption. There is no place for a thick or heavy application with a Complex Interface and high load time that just works on desktops in todays modern era.
The application should present itself beautifully on desktops, mobiles as well as tablets.
Next, the business would like this application to be available all the time and if any part of the application fails for any reason it should not cause a complete outage of the application.
Next, if this application becomes really popular in a short span of time and very large number of users start using the application , the application has to really meet the exponential scale of users. The application should show no sign of slowness.
Next, gone are the days when we used to gather business requirements for 3–6 months and then start designing the application. Today, businesses want to launch the application as soon their business idea is in nascent stage. The business requirements and the software application both evolve together. so the business would like to change existing functionalities of the application and add/delete functionalities at a fast pace because our Modern application is actually evolving with the business.
So a Modern Application is essentially light weight, highly available , scales elastically and rolls out changes very fast.
On the technical side, a modern application is exactly what a legacy application is not. It is not a monolithic application which has just one big application where all parts of the applications are built, bundled and deployed together in one shot with tight coupling with each other.
A Modern application has lot of parts with each part serving a particular business purpose and these parts are not tightly coupled.
If one part fails , it does not cause a noisy neighbor issue to the other part
and those parts continue to work the normal way.
These parts can be scaled up or down independently. e.g. part 1 can have only 2 CPU’s assigned to it where as part 2 can have 50 CPU’s assigned to it.
Then a modern application should be easy deployable to any hardware. it should migrate transparently from on-premise to cloud vendor 1 to cloud vendor 2.
Now let us see what all technical components are needed to build a modern application.
- As Modern application is a true distributed application where different parts of the application serve a different business function and can scale elastically, containerization is the best technology that can fit these requirements. These small parts of the application can be bundled as light weight microservices and deployed on containers.
2) Managing different micro services / containers , communication between them , taking care of failure scenarios is cumbersome and we need a container orchestration took like Kubernetes as the ideal fit here.
3) The microservices should be developed using a modern development framework which is light weight and provides short startup time. A framework like Micronaut/Helidon can be the right fit here. Choosing a legacy development framework which is heavy can cause large footprint for microservices and will be against our requirements.
4) We also need a Application Delivery System that provides ways to store the code repository along with a CI/CD offering so that various parts of the application can be developed, packaged and deployed in an automated way.
5) These micro services will be stored as a container images and we need a container registry to store these images.
6) This new application should also be using server less computing a.k.a functions where we deploy small components as functions focusing on the business functionality and forget about its operational infrastructure administration. We don’t provision or maintain compute instances, and operating system software patches and upgrades are applied automatically. Functions simply ensure our app is highly-available, scalable, secure, and being monitored. our business code is deployed as a function based on a triggering event as and when needed.
7) Different micro services can use same / different database depending upon the business function. we can use multi tenant database like Oracle Database where different functions can be deployed as separate tenants to promote loose coupling and independence at the data layer as well.
8) Our application may expose various API’s to internal or external partners and these API can be provisioned / managed by using an API Gateway. Oracle API Gateway with leading API-First platform Apiary can be the perfect fit here.