Monolithic application

From HandWiki
Short description: Software design pattern
Monolithic applications are analogous to monoliths such as Uluru, Australia : a large single (mono) rock (lith)

In software engineering, a monolithic application is a single unified software application which is self-contained and independent from other applications, but typically lacks flexibility.[1] There are advantages and disadvantages of building applications in a monolithic style of software architecture, depending on requirements.[2] Alternative styles to monolithic applications include multitier architectures, distributed computing and microservices.[2]

The design philosophy is that the application is responsible not just for a particular task, but can perform every step needed to complete a particular function.[3] Some personal finance applications are monolithic in the sense that they help the user carry out a complete task, end to end, and are private data silos rather than parts of a larger system of applications that work together. Some word processors are monolithic applications.[4] These applications are sometimes associated with mainframe computers.

In software engineering, a monolithic application describes a software application that is designed as a single service.[5] Multiple services can be desirable in certain scenarios as it can facilitate maintenance by allowing repair or replacement of parts of the application without requiring wholesale replacement.

Modularity is achieved to various extents by different modular programming approaches. Code-based modularity allows developers to reuse and repair parts of the application, but development tools are required to perform these maintenance functions (e.g. the application may need to be recompiled). Object-based modularity provides the application as a collection of separate executable files that may be independently maintained and replaced without redeploying the entire application (e.g. Microsoft's Dynamic-link library (DLL); Sun/UNIX shared object files).[6] Some object messaging capabilities allow object-based applications to be distributed across multiple computers (e.g. Microsoft's Component Object Model (COM)). Service-oriented architectures use specific communication standards/protocols to communicate between modules.[citation needed]

In its original use, the term "monolithic" described enormous mainframe applications with no usable modularity.[7] This, in combination with the rapid increase in computational power and therefore rapid increase in the complexity of the problems which could be tackled by software, resulted in unmaintainable systems and the "software crisis".


References

  1. Mishra, Mayank; Kunde, Shruti; Nambiar, Manoj (2018). "Cracking the monolith: Challenges in data transitioning to cloud native architectures". Proceedings of the 12th European Conference on Software Architecture: Companion Proceedings. New York, NY, USA: Association for Computing Machinery (ACM). pp. 1–4. doi:10.1145/3241403.3241440. ISBN 9781450364836. 
  2. 2.0 2.1 Harris, Chandler (2022). "Microservices vs. monolithic architecture: When monoliths grow too big it may be time to transition to microservices". https://www.atlassian.com/microservices/microservices-architecture/microservices-vs-monolith. 
  3. Information Technology Services Monolithic Application Retrieved on 28 November 2019
  4. Microsoft Three-tier Application Retrieved on 3 August 2007
  5. "Cloud Adoption As A Part Of The Digital Transformation Journey". 2 March 2022. https://kumaran.com/blogs/cloud-adoption-as-a-part-of-the-digital-transformation-journey/. 
  6. Lutkevich, Ben. "dynamic link library (DLL)". https://www.techtarget.com/searchwindowsserver/definition/dynamic-link-library-DLL. 
  7. Raymond, Eric S. (2003). The Art of Unix Programming. Addison-Wesley Professional.