Что такое монолитная структура: Что такое монолитная архитектура? — QALight
Монолитная vs Микросервисная архитектура
Что такое монолитная архитектура?
Монолитное приложение (назовем его монолит) представляет собой приложение, доставляемое через единое развертывание. Таким является приложение, доставленное в виде одной WAR или приложение Node с одной точкой входа.
Пример
Давайте представим классический интернет-магазин. Стандартные модули: UI, бизнес-логика и дата-слой. Возможны способы взаимодействия с сервисом: API REST и веб-интерфейс.
При построении монолита все эти вещи будут управляться внутри одного и того же модуля. Я не написал «один и тот же процесс», так как это было бы неверно для сценариев, в которых несколько экземпляров нашего модуля будут работать для более высоких нагрузок.
Рассмотрите пример на следующем рисунке, где все части находятся в одном и том же модуле развертывания:
Достоинства
Большим преимуществом монолита является то, что его легче реализовать. В монолитной архитектуре вы можете быстро начать реализовывать свою бизнес-логику, вместо того чтобы тратить время на размышления о межпроцессном взаимодействие.
Еще одна вещь — это сквозные (E2E) тесты. В монолитной архитектуре их легче выполнить.
Говоря об операциях, важно сказать, что монолит прост в развертывании и легко масштабируется. Для развертывания вы можете использовать скрипт, загружающий ваш модуль и запускающий приложение. Масштабирование достигается путем размещения Loadbalancer перед несколькими экземплярами вашего приложения. Как вы можете видеть, монолит довольно прост в эксплуатации.
Теперь давайте рассмотрим негативный аспект монолитной архитектуры.
Недостатки
Монолиты, как правило, перерождаются из своего чистого состояния в так называемый «большой шарик грязи». Вкратце это описывается как состояние, возникшее, потому что архитектурные правила были нарушены и со временем компоненты срослись.
Это перерождение замедляет процесс разработки: каждую будущую функцию будет сложнее развивать. Из-за того что компоненты растут вместе, их также необходимо менять вместе. Создание новой функции может означать прикосновение к 5 различным местам: 5 мест, в которых вам нужно написать тесты; 5 мест, которые могут иметь нежелательные побочные эффекты для существующих функций.
Ранее я говорил, что в монолите легко масштабировать. Это действительно так до тех пор, пока он не перерастёт в «большой шарик грязи», как упоминалось ранее. Масштабирование может быть проблематичным, когда только одной части системы требуются дополнительные ресурсы, ведь в монолитной архитектуре вы не можете масштабировать отдельные части вашей системы.
В монолите практически нет изоляции. Проблема или ошибка в модуле может замедлить или разрушить все приложение.
Строительство монолита часто протекает с помощью выбора основы. Отключение или обновление вашего первоначального выбора может быть затруднительным, потому что это должно быть сделано сразу и для всех частей вашей системы.
Что такое микросервисная архитектура?
В микросервисной архитектуре слабо связанные сервисы взаимодействуют друг с другом для выполнения задач, относящихся к их бизнес-возможностям.
Микросервисы в значительной степени получили свое название из-за того, что сервисы здесь меньше, чем в монолитной среде. Тем не менее, микро — о бизнес-возможностях, а не о размере.
По сравнению с монолитом в микросервисах у вас есть несколько единиц развертывания. Каждый сервис развертывается самостоятельно.
Пример
Давайте вновь рассмотрим в качестве примера Интернет-магазин.
Как и раньше, у нас есть: UI, бизнес-логика и дата-слой.
Здесь отличие от монолита состоит в том, что у всех вышеперечисленных есть свой сервис и своя база данных. Они слабо связаны и могут взаимодействовать с различными протоколами (например, REST, gRPC, обмен сообщениями) через свои границы.
На следующем рисунке показан тот же пример, что и раньше, но с разложением на микроуслуги.
Каковы преимущества и недостатки этого варианта?
Достоинства
Микросервисы легче держать модульными. Технически это обеспечивается жесткими границами между отдельными сервисами.
В больших компаниях разные сервисы могут принадлежать разным командам. Услуги могут быть повторно использованы всей компанией. Это также позволяет командам работать над услугами в основном самостоятельно. Нет необходимости координировать развертывание между командами. Развивать сервисы лучше с увеличением количества команд.
Микросервисы меньше, и благодаря этому их легче понять и проверить.
Меньшие размеры помогают, когда речь идет о времени компиляции, времени запуска и времени, необходимом для выполнения тестов. Все эти факторы влияют на производительность разработчика, так как позволяют затрачивать меньше времени на ожидание на каждом этапе разработки.
Более короткое время запуска и возможность развертывания микросервисов независимо друг от друга действительно выгодны для CI / CD. По сравнению с обычным монолитом он намного плавнее.
Микросервисы не привязаны к технологии, используемой в других сервисах. Значит мы можем использовать лучшие технологии подгонки. Старые сервисы могут быть быстро переписаны для использования новых технологий.
В микросервисах изолируемые разломы лучше по сравнению с монолитным подходом. Хорошо спроектированная распределенная система переживет сбой одного сервиса.
Недостатки
Все звучит довольно хорошо, но есть и недостатки.
Распределенная система имеет свою сложность: в ней вам приходится иметь дело с частичным отказом, более затруднительным взаимодействием при тестировании (тесты E2E), а также с более высокой сложностью при реализации взаимодействия между сервисами.
Транзакции легче проводить в монолите. Решением этой проблемы на микросервисах является Saga Pattern. Хорошее решение, но все же слишком громоздкое для реализации на практике.
Существуют эксплуатационные накладные расходы, а множество микросервисов сложнее в эксплуатации, чем несколько экземпляров сигнального монолита.
Помимо вышеперечисленных сложностей, для микросервисов также может потребоваться больше оборудования, чем для традиционных монолитов. Иногда микросервисы могут превзойти один монолит, если есть его части, которые требуют масштабирования до предела.
Изменения, затрагивающие несколько сервисов, должны координироваться между несколькими командами, а это может быть сложно, если команды еще не имели контактов.
Заключение
Все зависит от вашей организационной структуры. У вас есть 6 команд, которые будут работать над одним продуктом? Микросервисы могут подойти.
У вас есть команда из 3 разработчиков? Вероятно, они будут хорошо строить и поддерживать монолит.
Другими факторами являются скорость изменения и сложность. Высокие темпы изменений и высокая сложность могут быть факторами, которые заставляют выбрать архитектуру микросервиса.
Напротив, когда вы не очень хорошо знакомы с предметной областью, начать с монолита может быть полезно. Просто сделайте себе одолжение и постарайтесь сохранить его модульным. Это облегчит задачу, если вы когда-нибудь решите разделить свой монолит на несколько сервисов.
Монолитная структура.
Наиболее простым и распространенным способом построения ОС является монолитная структура, когда ОС компонуется как одна программа Для построения монолитной системы необходимо скомпилировать все отдельные процедуры, а затем связать их вместе в единый объектный файл с помощью компоновщика (примерами могут служить ранние версии ядра UNIX или Novell NetWare).
Многоуровневая структура.
Развитием монолитного подхода является многоуровневый, когда ОС реализуется как иерархии уровней.
Уровни образуются группами функций ОС – файловая система, управление процессами и устройствами и т.п.
Каждый
уровень может взаимодействовать только
со своим непосредственным соседом –
выше- или нижележащим уровнем.
Первой многоуровневой ОС считают систему THE.
ОС THE была создана в Technische Hogeschool Eindhoven (Нидерланды) Э. Дейкстрой (Е. W. Dijkstra) и его студентами в 1968 году.
Она была простой пакетной системой для голландского компьютера Electrologica Х8, память которого состояла из 32 К 27-разрядных слов.
Понятие ядра.
Развитием многоуровневой концепции стала ядерная архитектура. В общем случае уровни ОС представляют собой серию концентрических колец, где внутренние кольца являлись более привилегированными, чем внешние.
Ядро – центральная часть ОС, выполняющая основные функции.
Ядро системы MULTICS, находящееся постоянно в памяти компьютера занимало всего 135 Килобайт кода.
Уровни привилегий (защиты).
Для обеспечения привилегий ОС необходима соответствующая аппаратная поддержка.
Между
числом уровней привилегий, поддерживаемых
аппаратно, и числом уровней привилегий
ОС нет прямого соответствия.
Для реализации ядра необходимо хотя бы два уровня: основные процедуры ОС выполняются в привилегированном режиме, тогда как пользовательские программы – в непривилегированном.
Ядро в привилегированном (защищенном) режиме.
Повышение устойчивости ОС обеспечиваемое рабой ядра в привилегированном режиме достигается за счет некоторого замедления выполнения системных вызовов.
Системный вызов привилегированного ядра инициирует переключение процессора из пользовательского режима в защищенный, а при возврате к приложению – обратно. В результате вызов выполняется медленнее.
Пример ядра в непривилегированном режиме.
В некоторых случаях разработчики ОС отступают от этого классического варианта архитектуры, организуя работу ядра и приложений в одном и том же режиме.
Так,
сетевая ОС Novell
NetWare
использует привилегированный режим
процессоров Intel
х86/Pentium
как для работы ядра, так и для работы
своих специфических приложений –
загружаемых модулей NLM.
Монолитное ядро.
Наиболее распространенным и классическим вариантом реализации ядерного подхода является моноли́тное ядро́.
Монолитность ядер усложняет их отладку, понимание кода ядра, добавление новых функций и возможностей, удаление «мёртвого», ненужного, унаследованного от предыдущих версий, кода.
«Разбухание» кода монолитных ядер также повышает требования к объёму оперативной памяти, требуемому для функционирования ядра ОС.
Это делает монолитные ядерные архитектуры мало пригодными к эксплуатации в системах, сильно ограниченных по объёму ОЗУ, например, встраиваемых системах, производственных микроконтроллерах и т. д.
Монолитная архитектура — GeeksforGeeks
Улучшить статью
Сохранить статью
Нравится Статья
Введение:
В монолитной архитектуре ядро операционной системы обеспечивает все службы операционной системы, включая управление памятью, планирование процессов, драйверы устройств и файловые системы, в одном большом двоичном файле. Это означает, что весь код выполняется в пространстве ядра без разделения между процессами уровня ядра и уровня пользователя.
Основное преимущество монолитной архитектуры заключается в том, что она может обеспечить высокую производительность, поскольку системные вызовы могут выполняться непосредственно в ядре без накладных расходов на передачу сообщений между процессами пользовательского уровня. Кроме того, конструкция упрощается, поскольку все службы операционной системы предоставляются одним двоичным файлом.
Однако у монолитной архитектуры есть и недостатки. Одним из основных недостатков является то, что это может привести к менее безопасной и менее стабильной операционной системе. Поскольку весь код выполняется в пространстве ядра, любые уязвимости или ошибки в ядре потенциально могут повлиять на всю систему. Кроме того, если происходит сбой процесса пользовательского уровня, это может вывести из строя всю систему, поскольку нет разделения между процессами уровня ядра и пользовательского уровня.
Еще одним недостатком монолитной архитектуры является сложность настройки и расширения операционной системы. Поскольку весь код находится в одном двоичном файле, может быть сложно добавлять или удалять функции, не затрагивая другие части системы. Это может затруднить разработку специализированных или специализированных операционных систем.
В целом, монолитная архитектура может обеспечить высокую производительность и простоту, но может иметь некоторые недостатки в плане безопасности, стабильности и гибкости. Выбор между монолитной и микроядерной архитектурой зависит от конкретных потребностей и требований разрабатываемой операционной системы
Характеристики монолитной архитектуры:
- Один исполняемый файл: Все приложение упаковано и развернуто как один исполняемый файл. Все компоненты и модули собраны вместе.
- Tight Coupling: Компоненты и модули приложения тесно взаимосвязаны и зависят друг от друга.
Изменения, внесенные в один компонент, могут потребовать изменений в других частях приложения.
- Общая память: Все компоненты приложения используют одно и то же пространство памяти. Они могут напрямую обращаться к общим структурам данных и изменять их.
- Монолитное развертывание: Все приложение развертывается как единое целое. Обновления или изменения в приложении требуют повторного развертывания всего монолита.
- Централизованный поток управления: Поток управления в приложении обычно управляется центральным модулем или основной функцией. Поток выполнения перемещается последовательно от одного компонента к другому.
Некоторые важные моменты и преимущества монолитной архитектуры включают:
- Высокая производительность: монолитные ядра могут обеспечить высокую производительность, поскольку системные вызовы могут выполняться непосредственно в ядре без накладных расходов на передачу сообщений между процессами пользовательского уровня.
- Простота. Конструкция монолитного ядра проще, поскольку все службы операционной системы предоставляются одним двоичным файлом. Это упрощает разработку, тестирование и обслуживание.
- Широкая аппаратная поддержка: монолитные ядра имеют широкую аппаратную поддержку, что означает, что они могут работать на широком спектре аппаратных платформ.
- Низкие накладные расходы: монолитное ядро имеет низкие накладные расходы, что означает, что оно не требует большого количества системных ресурсов, что делает его идеальным для устройств с ограниченными ресурсами.
- Простой доступ к аппаратным ресурсам: поскольку весь код выполняется в пространстве ядра, доступ к аппаратным ресурсам, таким как сетевые интерфейсы, видеокарты и звуковые карты, является простым.
- Быстрые системные вызовы: монолитные ядра обеспечивают быстрые системные вызовы, так как отсутствуют накладные расходы на передачу сообщений между процессами пользовательского уровня.
- Подходит для операционных систем общего назначения: монолитные ядра подходят для операционных систем общего назначения, требующих высокой производительности и низких накладных расходов.
- Простота разработки драйверов: разработка драйверов устройств для монолитных ядер упрощается, поскольку они интегрированы в ядро.
В целом, монолитная архитектура обеспечивает высокую производительность, простоту и широкую аппаратную поддержку. Он идеально подходит для операционных систем общего назначения, которым требуется высокая производительность и низкие накладные расходы. Однако это может привести к некоторым компромиссам с точки зрения безопасности, стабильности и гибкости.
Прежде чем изучать Микросервисы , мы всегда знаем, почему в настоящее время мы не используем монолитную архитектуру. Так что это поможет нам лучше понять микросервисы. Монолитная архитектура похожа на большой контейнер, в котором все программные компоненты приложения собраны и тесно связаны, т. е. каждый компонент полностью зависит друг от друга. Пример: Возьмем в качестве примера сайт электронной коммерции. Как вы можете видеть в примере, все услуги, предоставляемые приложением (обслуживание клиентов, услуги по затратам, услуги по продуктам), напрямую связаны. Поэтому, если мы хотим изменить код или что-то еще, мы также должны изменить все сервисы. Недостаток:
- Большие и сложные приложения: Для больших и сложных приложений в монолите трудно обслуживать, потому что они зависят друг от друга.
- Медленная разработка: Это связано с тем, что для изменения приложения мы должны повторно развернуть все приложение, а не часть обновлений. Требуется больше времени или медленное развитие.
- Немасштабируемый: Каждая копия приложения будет обращаться к дырочным данным, что увеличивает потребление памяти. Мы не можем масштабировать каждый компонент независимо.
- Ненадежно: Если одна служба выходит из строя, это влияет на все службы, предоставляемые приложением. Это потому, что все службы приложений связаны друг с другом.
- Негибкий: Действительно трудно внедрить новую технологию. Это потому, что мы должны изменить технологию нанесения отверстий.
Примечание: Эта статья является частью «Анализ монолитных и распределенных систем»