Traditional, legacy applications have been built in a very coupled manner, such that everything is dependent and tied to everything else, and there was very little, to no separation of concerns. Debugging was hard, pulling the hand would make the feet go up. It would not scale. Such applications are generally referred to as “monoliths”, and we want to move away from them in our Cloud Native world. But this is the age of Cloud Native Everything, isn’t it? This begs the question …

What is an application in this new age, the age of Cloud Native Computing? We hear the term microservices or microservices architecture a lot in this world. To quote Martin Fowler here:

“The microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.”

In the CNC world, one generally writes self-contained services. Each of these services does one thing (solves a business problem) and does it well. Sounds familiar? Indeed, this is an old Unix philosophy and design principle. These services can be independently deployed, scaled or torn down. They come together to form a modern day application.

You might be building a simple voting application that has a front end. The front end makes calls to an API service that fetches data from a Postgres DB. Or maybe you are building the next Uber or Flickr which has many different applications each comprising of multiple microservices. And it is definitely possible that many applications are using the same services independent of each other. For example, a location service, an authorization/login service, a rating service.

The above example is probably too simplistic but it conveys the message, “an application in the CNC world is what you want your application to be”. You stitch together services to build your application, and in all likelihood you containerize each service and run them. This is the new normal.