In regular web development process what do we do? We create one war file which contains all functionality, services, modules or all use cases related to our business. In this approach of development we do not focus to make our application modularise. We may be following modularization in our code but end product is not seperated. Every services, modules are bundled up in single war and this war is deployed on server so that our business will be available for outside world which can make a request to get the required resources. This native architecture of development is called Monolithic Architecture.
What is Monolithic Architecture
In simple definition monolithic architecture is the architecture in which all application components, functionality, modules are bundled up in single WAR. Here modules and functionality are tightly coupled with each other. And all request coming from either from web application or mobile devices or any other sources such as third party will be processed by this war.
Monolithic architecture is simple architecture with not much complexity generally used for development of small application where not much modularization is needed. In this architecture all function/modules are tightly coupled with each other. This monolithic architecture has several advantages listed below.
Advantages of Monolithic Architecture.
- Easy and fast development : In this we do not have to give much thought to modularity of the application every thing here is tightly coupled and each data required during development is easily available making development easy and fast as we are not dependent in other external services.
- Easy deployment : War file generated is simply deployed on server and is ready to serve its client without much configuration.
- Easy Load balancing : For purpose of load balancing we have to just created the copy of generated war and had to be deployed on different server.
With all this advantage Monolithic architecture comes with many disadvantages.
Disadvantages of Monolithic Architecture
- Hard to train new recruits : Since our application is large and not modularised new recruits have to learn all application which may result confusion and will consume time and therefore new recruits are not available to assist the development in short period.
- Not Scalable : for small change also we have to bring down entire application creating all functional use cases unavailable to client even the change do not have to do with other use cases.
- Reduced Productivity : As application developed using monolithic architecture are big and therefore they take long time to build in IDE's which makes the developer less productive.
- Continuous development is difficult: As we have to redeploy entire application for small change which make continuous development difficult.
- Difficult to change technology of the application : Big and vast application scope makes difficult to upgrade the existing technology or to migrate to newer technology.