<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Дима пишет | Дмитрий Смотров: заметки с тегом модульный_монолит</title>
<link>https://dimasmotrov.ru/tags/modulny-monolit/</link>
<description>backend python fastapi django rabbitmq kafka postgresql sqlalchemy</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>backend python fastapi django rabbitmq kafka postgresql sqlalchemy</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Модульный монолит (5)</title>
<guid isPermaLink="false">9</guid>
<link>https://dimasmotrov.ru/all/modulny-monolit-5/</link>
<pubDate>Tue, 05 Nov 2024 01:13:11 +0300</pubDate>
<author></author>
<comments>https://dimasmotrov.ru/all/modulny-monolit-5/</comments>
<description>
&lt;p&gt;Хочу подвести итоги темы модульного монолита.&lt;/p&gt;
&lt;p&gt;1) Монолит — система, состоящая из одной единицы развертывания.&lt;br /&gt;
2) Монолит по умолчанию не комок грязи, в его определение такого нет в принципе&lt;br /&gt;
3) Модульный монолит — монолит, спроектированный с учетом модульности.&lt;br /&gt;
4) Модульный компонент — независим, автономен и имеет четкий интерфейс&lt;/p&gt;
&lt;p&gt;Стоит помнить особенности разработки и эксплуатации монолитных систем:&lt;br /&gt;
1) Более легкий порог вхождения для разработки — думаю, тут все понятно.&lt;br /&gt;
2) Запуская проект для локальной разработки — вы запускаете ВЕСЬ проект.  Был я на проекте, где с учетом размера кодовой базы и мощностей рабочего железа процесс локального развертывания мог занимать полчаса. Удовольствие очень сомнительное, скажу я вам. Желательно в таком случае иметь тестовые стенды, в которых вы можете подкинуть свои изменения и проверить выполненную работу на них.&lt;br /&gt;
3) Деплой монолита — это деплой всех его модулей. Опять же, с ростом кодовой базы процесс становится дольше, отсюда у разных компаний могут появляться свои системы сборки, с точечной оптимизацией процесса развертывания, свои отделы выпусков, которые будут следить за окончанием работ над каждым модулем и соблюдением режима тишины. Буду надеятся, что внутрь подобных систем сборки залить вам не придется :)&lt;br /&gt;
4) Иногда разработчикам двух разных модулей приходится ждать друг друга — ведь чтобы запустить сборку изменение второго разработчика, нужно будет дождаться сборки изменений первого. Обычно это касается работы в крупном энтерпрайзе.&lt;br /&gt;
5) Масштабируемость. Возможны ситуации, когда определенные модули потребляют ресурсов больше, чем все остальные. К сожалению, нельзя добавить мощностей только для нагруженных модулей, вернее вертикальное масштабирование сервера приложения позволит это сделать, но ВМ конечно. А при горизонтальном масштабировании, добавляя новый экземпляр приложения, мы так же закладываем ресурсы для модулей, которые не нуждаются в дополнительных ресурсах. Как итог — теряем деньги на лишние вычислительные мощности. Не факт, что подобные потери будут велики, но стоит это учитывать. (тут должна быть шутка про то, как AWS выставляет чек на крупную сумму, так как ты не отключил автомасштабирование облака).&lt;br /&gt;
6) Сломана нога — умирает весь человек. Если один из модулей падает с критической ошибкой, все приложение падает на пол, вся команда разрабов сидит и чинит прод на выходных, либо же просто сидит отдыхает, пока виновник торжества исправляет ситуацию, отбиваясь от дубликатов ошибок и нависшего над душой менеджера.&lt;br /&gt;
7) Использование сторонних технологий. В рамках монолита нельзя использовать разные ЯП(исключения есть, но не о них сейчас). Поэтому резко начать впихивать rust у вас не получится, как использовали php, так и используйте :)&lt;/p&gt;
</description>
</item>

<item>
<title>Модульный монолит (4)</title>
<guid isPermaLink="false">8</guid>
<link>https://dimasmotrov.ru/all/modulny-monolit-4/</link>
<pubDate>Tue, 05 Nov 2024 01:11:45 +0300</pubDate>
<author></author>
<comments>https://dimasmotrov.ru/all/modulny-monolit-4/</comments>
<description>
&lt;p&gt;Мы договорились, что модуль — это боевая единица, способная решать свою задачу в кооперации с другими модулями посредством интерфейсов.&lt;/p&gt;
&lt;p&gt;Для понимания того, как модульность выглядит на уровне приложения обратимся к схеме:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://dimasmotrov.ru/pictures/image.png" width="1024" height="403" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Оранжевый и сиреневый квадраты — это модули Бизнес Логики(БЛ).&lt;br /&gt;
Зеленые линии — это тоже модули, но модули технические.&lt;/p&gt;
&lt;p&gt;В контексте данной темы технические модули называют «слоями», а модули БЛ «модулями», так как чаще всего изменения и разработка касаются бизнес логики — добавляются новые фичи, изменяется поведение старых и тому подобное.&lt;/p&gt;
&lt;p&gt;На схеме отображено взаимодействия модулей бизнес логики с техническими слоями приложения. Каждый модуль реализует собственную функциональность, используя возможности слоев БД, логики приложения(обмен сообщений, запуск фоновых задач, ...) через контракты(интерфейсы).&lt;/p&gt;
&lt;p&gt;Мы можем изменить реализацию и способ хранения данных, но модуль «Orders» ничего не заметит, он как использовал нужные ему вызовы методов слоя БД, так и использует. Можем поменять визуальное представление сущностей модуля «Payments», модулю все равно, он отдает со своей стороны данные по контракту и получает объект-представление, как и было оговорено в контракте.&lt;/p&gt;
&lt;p&gt;Модули БЛ добавляются, приложение растет, полезных действия приложения становится больше, и еще длительное время проект спокойно развивается в рамках такой архитектуры.&lt;/p&gt;
</description>
</item>

<item>
<title>Модульный монолит(3)</title>
<guid isPermaLink="false">7</guid>
<link>https://dimasmotrov.ru/all/modulny-monolit-3/</link>
<pubDate>Mon, 04 Nov 2024 23:56:10 +0300</pubDate>
<author></author>
<comments>https://dimasmotrov.ru/all/modulny-monolit-3/</comments>
<description>
&lt;p&gt;Продолжим по модульный монолит.&lt;/p&gt;
&lt;p&gt;Если монолитная архитектура почти всегда скатывается в «комок грязи», а модульность должна нас от этого комка спасти. Давайте поймем, что такое «модуль».&lt;/p&gt;
&lt;p&gt;Модуль — независимый участок кода, содержащий все необходимое для выполнения только одного аспекта желаемой функциональности. Состоит из интерфейса и реализации.&lt;br /&gt;
Интерфейс модуля выражает элементы, которые предоставляются и требуются модулем. Элементы, определенные в интерфейсе, могут быть обнаружены другими модулями.&lt;br /&gt;
Реализация содержит рабочий код, соответствующий элементам, объявленным в интерфейсе.&lt;/p&gt;
&lt;p&gt;Модулем как правило называют модуль бизнес-логики приложения(модуль почтовой рассылки), но так же есть «инфраструктурные» модули(модуль для работы с БД, очередью и так далее).&lt;/p&gt;
&lt;p&gt;Модуль должен обладать следующими свойствами:&lt;br /&gt;
1)  Независимостью — зависимости модуля сведены к минимуму и частота изменений «родительских» модулей минимальна. Так же снижаем сцепленность и увеличиваем связность.&lt;br /&gt;
2) SRP — модуль решает четко определенную задачу.&lt;br /&gt;
3) имеет четко определенный интерфейс — контракт для взаимодействия с другими модулями. Хороший контракт — непротиворечивый и минимальный. Интерфейс модуля должен быть стабильным(не подвергаться частому изменению).&lt;/p&gt;
</description>
</item>


</channel>
</rss>