Monolithic application: Difference between revisions

Content deleted Content added
dead link substitution
Bert.Roos (talk | contribs)
m Textual correction
 
(27 intermediate revisions by 16 users not shown)
Line 1:
{{Short description|Software design pattern}}
In [[software engineering]], a '''monolithic application''' describes a single-tiered [[Application software|software application]] in which the [[user interface]] and data access code are combined into a single program from a single [[Platform (computing)|platform]].
[[File:Uluru, helicopter view, cropped.jpg|300px|thumb|Monolithic applications can be compared to [[monolith]]s, such as [[Uluru]], [[Australia]]: a large single (mono) rock (lith)]]
 
In [[software engineering]], a '''monolithic application''' is a single unified [[Application software|software application]] that is self-contained and independent from other applications, but typically lacks flexibility.<ref name=mishra>{{cite book | last1=Mishra | first1=Mayank | last2=Kunde | first2=Shruti | last3=Nambiar | first3=Manoj | title=Proceedings of the 12th European Conference on Software Architecture: Companion Proceedings | chapter=Cracking the monolith: Challenges in data transitioning to cloud native architectures | publisher=[[Association for Computing Machinery ]] (ACM) | publication-place=New York, NY, USA | year=2018 | doi=10.1145/3241403.3241440 | pages= 1–4 |number= 35| isbn=9781450364836 | s2cid=52295004 }}</ref> There are advantages and disadvantages of building applications in a [[monolith]]ic style of [[software architecture]], depending on requirements.<ref name=atlas>{{cite web|url=https://www.atlassian.com/microservices/microservices-architecture/microservices-vs-monolith|website=atlassian.com|title=Microservices vs. monolithic architecture: When monoliths grow too big it may be time to transition to microservices|first=Chandler|last=Harris|year=2022}}</ref> Monolith applications are relatively simple and have a low cost but their shortcomings are lack of [[Elasticity (system resource)|elasticity]], [[Software fault tolerance|fault tolerance]] and [[scalability]].<ref name=":0">{{Cite book |title=Fundamentals of Software Architecture: An Engineering Approach |publisher=O'Reilly Media |year=2020 |isbn=978-1492043454}}</ref> Alternative styles to monolithic applications include [[multitier architecture]]s, [[distributed computing]] and [[microservices]].<ref name=atlas/> Despite their popularity in recent years, monolithic applications are still a good choice for applications with small team and little complexity. However, once it becomes too complex, you can consider refactoring it into microservices or a distributed application. Note that a monolithic application deployed on a single machine, may be performant enough for your current workload but it's less available, less durable, less changeable, less fine-tuned and less scalable than a well designed [[Distributed computing|distributed system]].<ref>{{Cite book |title=Monolith to Microservices Evolutionary Patterns to Transform Your Monolith |publisher=O'Reilly Media |year=2019 |isbn=9781492047810}}</ref>
A monolithic application is self-contained, and independent from other computing applications. 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.<ref>ICCI [http://www.codingthearchitecture.com/2014/11/19/what_is_a_monolith.html Monolithic Applications] Retrieved on 5 August 2007</ref><ref>Information Technology Services [http://www.its.state.nc.us/Information/Glossary/glossm.asp Monolithic Application] {{webarchive|url=https://web.archive.org/web/20070902151937/http://www.its.state.nc.us/Information/Glossary/Glossm.asp |date=2007-09-02 }} Retrieved on 28 November 2019</ref> Today, some personal finance applications are monolithic in the sense that they help the user carry out a complete task, end to end, and are [[Information_silo|private data silos]] rather than parts of a larger system of applications that work together. Some [[word processor]]s are monolithic applications.<ref>Microsoft [http://msdn2.microsoft.com/en-us/library/aa480455.aspx Three-tier Application] Retrieved on 3 August 2007</ref> These applications are sometimes associated with [[mainframe computers]].
 
A monolithic application is self-contained, and independent from other computing applications. 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.<ref>ICCI [http://www.codingthearchitecture.com/2014/11/19/what_is_a_monolith.html Monolithic Applications] Retrieved on 5 August 2007</ref><ref>Information Technology Services [http://www.its.state.nc.us/Information/Glossary/glossm.asp Monolithic Application] {{webarchive|url=https://web.archive.org/web/20070902151937/http://www.its.state.nc.us/Information/Glossary/Glossm.asp |date=2007-09-02 }} Retrieved on 28 November 2019</ref> Today, someSome personal finance applications are monolithic in the sense that they help the user carry out a complete task, end to end, and are [[Information_siloInformation silo|private data silos]] rather than parts of a larger system of applications that work together. Some [[word processor]]s are monolithic applications.<ref>Microsoft [http://msdn2.microsoft.com/en-us/library/aa480455.aspx Three-tier Application] Retrieved on 3 August 2007</ref> These applications are sometimes associated with [[mainframe computers]].
In software engineering, a monolithic application describes a software application which is designed without modularity. Modularity is desirable, in general, as it supports reuse of parts of the application logic and also facilitates maintenance by allowing repair or replacement of parts of the application without requiring wholesale replacement.
 
In software engineering, a monolithic application describes a software application whichthat is designed withoutas a single modularityservice.<ref>{{Cite Modularityweb is|date= desirable,2 inMarch general,2022|title=Cloud asAdoption itAs supportsA reusePart ofOf partsThe ofDigital Transformation Journey |url=https://kumaran.com/blogs/cloud-adoption-as-a-part-of-the-digital-transformation-journey/ application|website=kumaran.com}}</ref> logicMultiple andservices can be desirable in certain scenarios as it alsocan facilitatesfacilitate maintenance by allowing repair or replacement of parts of the application without requiring wholesale replacement.
Modularity is achieved to various extents by different modularization 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 which may be independently maintained and replaced without redeploying the entire application (e.g. [[Dynamic-link library|Microsoft "dll" files]]; Sun/UNIX "shared object" files). Some object messaging capabilities allow object-based applications to be distributed across multiple computers (e.g. Microsoft COM+). Service-oriented architectures use specific communication standards/protocols to communicate between modules.
 
Modularity is achieved to various extents by different modularization[[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 whichthat may be independently maintained and replaced without redeploying the entire application (e.g. Microsoft's [[Dynamic-link library|Microsoft "dll" files]] (DLL); Sun/UNIX "[[shared object"]] files).<ref>{{Cite web |last=Lutkevich |first=Ben |title=dynamic link library (DLL) |url=https://www.techtarget.com/searchwindowsserver/definition/dynamic-link-library-DLL |website=techtarget.com}}</ref> Some object messaging capabilities allow object-based applications to be distributed across multiple computers (e.g. Microsoft's [[Component Object Model]] (COM+)). [[Service-oriented architecturesarchitecture]]s use specific communication standards/protocols to communicate between modules.{{citation needed|date=May 2023}}
In its original use, the term "monolithic" described enormous main frame applications with no usable modularity. This – in combination with 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]]".
 
In its original use, the term "monolithic" described enormous mainframe applications with no usable modularity.<ref name="raymond">{{cite book
==See also==
| first = Eric S.
*[[Architecture description language]]
| last = Raymond
*[[Multitier architecture]]
| authorlink =Eric S. Raymond
*[[Software architecture]]
| title = [[The Art of Unix Programming]]
| year = 2003
| publisher = Addison-Wesley Professional
In }}</ref> its original useThis, the term "monolithic" described enormous main frame applications with no usable modularity. 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]]".
 
== Patterns ==
Here are common [[architectural pattern]]s used for monolithic applications, each has its own trade-offs:<ref name=":0" />
* [[Multitier architecture|Layered architecture]]
* [[Modular programming|Modular]] monolith
*[[Software Microkernel architecture]]
 
==References==