В программной инженерии монолитное приложение — это единое унифицированное программное приложение , которое является самодостаточным и независимым от других приложений, но, как правило, не обладает гибкостью. [1] В зависимости от требований существуют преимущества и недостатки создания приложений в монолитном стиле архитектуры программного обеспечения . [2] Монолитные приложения относительно просты и имеют низкую стоимость, но их недостатками являются отсутствие эластичности , отказоустойчивости и масштабируемости . [3] Альтернативные стили монолитным приложениям включают многоуровневые архитектуры , распределенные вычисления и микросервисы . [2] Несмотря на свою популярность в последние годы, монолитные приложения по-прежнему являются хорошим выбором для приложений с небольшой командой и небольшой сложностью. Однако, как только оно становится слишком сложным, вы можете рассмотреть возможность его рефакторинга в микросервисы или распределенное приложение. Обратите внимание, что монолитное приложение, развернутое на одной машине, может быть достаточно производительным для вашей текущей рабочей нагрузки, но оно менее доступно, менее долговечно, менее изменчиво, менее тонко настроено и менее масштабируемо, чем хорошо спроектированная распределенная система . [4]
Философия дизайна заключается в том, что приложение отвечает не только за определенную задачу, но и может выполнять каждый шаг, необходимый для завершения определенной функции. [5] Некоторые приложения для управления личными финансами являются монолитными в том смысле, что они помогают пользователю выполнять полную задачу от начала до конца и являются частными хранилищами данных , а не частями более крупной системы приложений, которые работают вместе. Некоторые текстовые процессоры являются монолитными приложениями. [6] Эти приложения иногда связаны с мэйнфреймами .
В программной инженерии монолитное приложение описывает программное приложение, разработанное как единая служба. [7] Несколько служб могут быть желательны в определенных сценариях, поскольку это может облегчить обслуживание, позволяя ремонтировать или заменять части приложения, не требуя полной замены.
Модульность достигается в разной степени различными подходами к модульному программированию . Модульность на основе кода позволяет разработчикам повторно использовать и восстанавливать части приложения, но для выполнения этих функций обслуживания требуются инструменты разработки (например, приложение может потребоваться перекомпилировать). Модульность на основе объектов предоставляет приложение как набор отдельных исполняемых файлов, которые могут независимо поддерживаться и заменяться без повторного развертывания всего приложения (например, библиотека Microsoft Dynamic-link (DLL); общие объектные файлы Sun/UNIX ). [8] Некоторые возможности объектного обмена сообщениями позволяют распределять объектные приложения по нескольким компьютерам (например, модель Microsoft Component Object Model (COM)). Архитектуры, ориентированные на службы, используют определенные стандарты/протоколы связи для связи между модулями. [ необходима цитата ]
В своем первоначальном использовании термин «монолитный» описывал огромные мэйнфреймовые приложения без какой-либо полезной модульности. [9] Это, в сочетании с быстрым ростом вычислительной мощности и, следовательно, быстрым ростом сложности проблем, которые могли быть решены с помощью программного обеспечения, привело к появлению неподдерживаемых систем и « программному кризису ».
Вот общие архитектурные шаблоны, используемые для монолитных приложений, каждый из которых имеет свои собственные компромиссы: [3]