<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>архитектура Archives &#8226; König Labs</title>
	<atom:link href="https://koniglabs.ru/tag/arhitektura/feed/" rel="self" type="application/rss+xml" />
	<link>https://koniglabs.ru/tag/arhitektura/</link>
	<description></description>
	<lastBuildDate>Wed, 21 May 2025 12:54:06 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://koniglabs.ru/wp-content/uploads/2019/06/cropped-favicon-32x32.png</url>
	<title>архитектура Archives &#8226; König Labs</title>
	<link>https://koniglabs.ru/tag/arhitektura/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Serverless vs монолит: что выбрать в среде AWS?</title>
		<link>https://koniglabs.ru/serverless-vs-monolit/</link>
					<comments>https://koniglabs.ru/serverless-vs-monolit/#respond</comments>
		
		<dc:creator><![CDATA[Alexey Palatkin]]></dc:creator>
		<pubDate>Mon, 30 Aug 2021 16:21:54 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[serverless]]></category>
		<category><![CDATA[архитектура]]></category>
		<category><![CDATA[монолит]]></category>
		<guid isPermaLink="false">https://koniglabs.com/?p=6240</guid>

					<description><![CDATA[<p>The post <a href="https://koniglabs.ru/serverless-vs-monolit/">Serverless vs монолит: что выбрать в среде AWS?</a> appeared first on <a href="https://koniglabs.ru">König Labs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div id="tm-row-69dc491aec690" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491aee7f8" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">Скажу сразу &#8211; оба архитектурных подхода имеют место быть. И монолит и Serverless, конечно, имеют свои плюсы и минусы. Но как подобрать лучший подход для конкретного ИТ-продукта? Я изучил этот вопрос и решил поделиться своими мыслями. Может быть, получится сэкономить кому-то время в поисках лучшего решения. </span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Меня зовут Василий Широченко, я backend-разработчик в Konig Labs. Когда я в очередной раз столкнулся с темой выбора архитектурного подхода для приложения в среде Amazon Web Services (про это тоже поговорим), я работал над мобильным приложением для обучения игре на фортепиано. Так что, все выводы в статье будут основаны на реальной практике. Поехали!</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491aef027"></div>
</div></div></div></div><div id="tm-row-69dc491aef2e3" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491aef78c" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h2><span style="font-weight: 400;">Начинаем с требований</span></h2>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Для начала, давайте разберемся, почему вопрос архитектуры так важен. </span><span style="font-weight: 400;">Планирование архитектуры ИТ-продукта всегда проводится перед стартом разработки. Это критически важно, т.к. как и архитектура здания, архитектура ИТ-продукта не должна “посыпаться” при малейших изменениях, и в перспективе должна выдержать масштабирование, увеличение нагрузки и возрастающую сложность. Стоимость внесения изменений при этом должна оставаться адекватной. </span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Также, верно подобранная архитектура &#8211; гарантия того, что реализация продукта будет учитывать нюансы всех требований (бизнесовых, нефункциональных, процессных и т.д.). </span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Теперь немного контекста о проекте, на примере которого будем рассуждать об архитектуре, и его предметной области. Заказчик поставил задачу разработать мобильное приложение, которым люди, интересующиеся игрой на фортепиано, могут пользоваться на платформах iOS и Android. Приложение должно уметь сканировать с листа произведения, записанные в классической музыкальной нотации, и далее распознавать нотный стан, сами ноты, знаки альтерации и т.д. (рис. 1, рис. 2).</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491aefd5a"></div>
</div></div></div></div><div id="tm-row-69dc491aeff93" class="vc_row vc_row-outer vc_row-fluid same-height vc_row-o-content-bottom vc_row-flex"><div id="tm-column-69dc491af04b4" class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner "><div class="wpb_wrapper"><div class="tm-box-image style-02 tm-animation move-up" id="tm-box-image-69dc491af0904">
	
	
	<div class="content-wrap">
		
<div class="content">

	<div class="images">
					<div class="image">
				<img decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/scanning-50x108.png" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/scanning-80x174.png" class="ll-image unload" alt="scan" width="80" height="174" />			</div>
		
			</div>

	
			<div class="text">Рис. 1. Сканирование с листа</div>	
	</div>
	</div>

	
</div>
</div></div></div><div id="tm-column-69dc491af2f76" class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner "><div class="wpb_wrapper"><div class="tm-box-image style-02 tm-animation move-up has-image-hover" id="tm-box-image-69dc491af3464">
	
	
	<div class="content-wrap">
		
<div class="content">

	<div class="images">
					<div class="image">
				<img fetchpriority="high" decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/recognition-50x28.jpg" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/recognition.jpg" class="ll-image unload" alt="recognition" width="512" height="288" />			</div>
		
					<div class="image-hover">
				<img fetchpriority="high" decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/recognition-50x28.jpg" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/recognition.jpg" class="ll-image unload" alt="recognition" width="512" height="288" />			</div>
			</div>

	
			<div class="text">Рис. 2. Распознавание нот</div>	
	</div>
	</div>

	
</div>
</div></div></div></div><div id="tm-row-69dc491b0a1fb" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b0a7f6" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper"><div class="tm-spacer" id="tm-spacer-69dc491b0ac64"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">Затем, на основании т.н. эталонной записи, пользователь исполняет свой вариант музыкального произведения на фортепиано. После игры система производит поиск ошибок и неточностей в игре учащегося (пользователя). Для каждого пользователя хранится история его попыток, показывается процент точности </span><i><span style="font-weight: 400;">попадания</span></i><span style="font-weight: 400;">. Также есть экран статистики в разрезе дня/недели/месяца/года. В принципе, получается </span><i><span style="font-weight: 400;">несложная </span></i><span style="font-weight: 400;">предметная область. </span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Конечно, мы понимаем, что приложение само по себе не будет работать, потому как где-то необходимо сохранять прогресс их игры, статистику и другие важные данные. По этим причинам необходимо разработать backend-часть для приложения. </span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b0af01"></div>
</div></div></div></div><div id="tm-row-69dc491b0b134" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b0ba8a" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h2><span style="font-weight: 400;">Про выбор архитектуры</span></h2>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Как я уже говорил, мы будем сравнивать монолитный и Serverless подходы. На самом деле, еще затронем микросервисный, но вскользь. Далее поймете, почему.</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Сперва предлагаю кратко пройтись по всем трем подходам, посмотреть на “профпригодность” каждого из них и уже более детально рассмотреть то, что мы выбрали.</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b0c1cd"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h4><span style="font-weight: 400;">Монолитное решение</span></h4>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Кратко напомним, что подразумевается под монолитным решением. Прежде всего, все </span><i><span style="font-weight: 400;">слои </span></i><span style="font-weight: 400;">приложения находятся в рамках единой кодовой базы, и, как следствие, публикация такого решения производится не частично (например, поменяли только визуальную составляющую), а целиком на все приложение.</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Так исторически сложилось, и более того, подтверждено различными опросами среди разработчиков, что монолитная архитектура &#8211; самый распространенный способ построения программного обеспечения. Почему так? Все благодаря своей простоте в разработке и поддержке по сравнению с более сложными подходами (если рассматривать те же микросервисы). Простота заключается в едином развертывании, когда у нас бизнес-логика всего приложения, UI (то, что видит конечный пользователь), хранение данных (база данных) и возможно другие дополнительные компоненты находятся в общем репозитории, разрабатываются совместно и публикуются на сервер в рамках одного процесса. </span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Конечно, у любого решения есть и минусы. Эволюция любого приложения &#8211; довольно непредсказуемый процесс, потому как появляются новые требования от заказчика. Эти требования необходимо стараться как-то “вписать” в существующее рабочее решение. В случае с монолитом, у разработчиков очень часто появляется соблазн нарушить определенные рамки и конвенции, разработанные на этапе проектирования, вследствие чего система начинает сильно </span><i><span style="font-weight: 400;">вязнуть</span></i><span style="font-weight: 400;">, и вносить все новые и новые изменения становится труднее.</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b0c485"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h4><span style="font-weight: 400;">Микросервисы</span></h4>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Архитектура, построенная на основе микросервисов &#8211; подход, набравший огромную популярность последние лет десять. Весьма распространен в больших проектах с долгим жизненным циклом, когда разработкой занимается несколько команд, каждая из которых отвечает за свои несколько микросервисов. В нашем блоге уже была статья про микросервисы, если интересно вникнуть в детали, читайте здесь: <a href="https://koniglabs.ru/cqrs-microservices/" target="_blank" rel="noopener noreferrer">Микросервисы и CQRS: оптимизируем затраты на продукт</a>.</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Среди явных плюсов: система разбита на модули, каждый из которых поддерживается определенной командой разработки, независимые публикации отдельно взятых микросервисов (допустим, в системе развернуто два микросервиса A и B, мы можем обновить микросервис B, не затронув при этом микросервис A). В то же время, приходится мириться с определенными ограничениями и иметь в виду, например, что для качественной разработки требуется высокая квалификация специалистов. Плюс ко всему, не стоит забывать и о том, что, несмотря на кажущуюся гибкость в разделении бизнес-процессов на так называемые</span><i><span style="font-weight: 400;"> ограниченные контексты</span></i><span style="font-weight: 400;">, стоит обязательно позаботиться о системе логирования и мониторинга (о записи действий приложения в специальный файл и о сборе, хранении метрик по инфраструктуре приложения). Более того, микросервисы должны уметь </span><i><span style="font-weight: 400;">общаться </span></i><span style="font-weight: 400;">друг с другом &#8211; реализуется это посредством различных протоколов, таких как </span><i><span style="font-weight: 400;">http</span></i><span style="font-weight: 400;">, </span><i><span style="font-weight: 400;">amqp </span></i><span style="font-weight: 400;">и других. Т.е., в отличие от монолита, здесь дополнительно нужно продумать и реализовать API.</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b0c769"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h4><span style="font-weight: 400;">Serverless</span></h4>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Serverless &#8211; данный подход стал применяться сравнительно недавно (последние несколько лет). Его суть в том, что облачный провайдер (по примеру AWS, Azure и др.) предлагает воспользоваться т. н. бессерверными вычислениями &#8211; пользователям теперь не надо заботиться о конфигурировании и поддержке сервера &#8211; за вас все делает провайдер (сколько ресурсов потребуется &#8211; столько провайдер и предоставит). </span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Этот подход достаточно новый. С одной стороны, простота &#8211; главное его преимущество перед остальными подходами. Здесь мы имеем в виду удобство работы с инфраструктурой (сервисы, службы, логирование, мониторинг, вертикальное и горизонтальное масштабирование).</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">С другой стороны, есть палка о двух концах &#8211; это управление бюджетом. Провайдер предлагает определенные расценки за использование ресурсов, которые можно посчитать в </span><i><span style="font-weight: 400;">калькуляторе </span></i><span style="font-weight: 400;">на сайте. Вот только есть нюанс динамически выделяемых ресурсов &#8211; к этому вопросу стоит относиться крайне внимательно &#8211; об этом будет рассказано более подробно ниже. Так что советуем не закрывать статью, вдруг дальше будет написано, где находится Янтарная комната… 🙂</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b0cb3b"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h4><span style="font-weight: 400;">Наши мысли</span></h4>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Итак, что мы имеем? Монолит как самый популярный вариант, микросервисы, как пример слабо связанной архитектуры и serverless &#8211; эдакий многообещающий вариант построения приложений. Ах, да, чуть не забыли &#8211; команду backend-разработчиков из двух человек 🙂</span></p>
<p><span style="font-weight: 400;"><br />
</span> <span style="font-weight: 400;">Посовещавшись, пришли к выводу, что микросервисы мы отметаем по причине того, что бизнес-модель не является </span><i><span style="font-weight: 400;">сложной </span></i><span style="font-weight: 400;">(даже если забегать вперед с </span><i><span style="font-weight: 400;">возможными </span></i><span style="font-weight: 400;">дополнениями) в связи с четко поставленными требованиями к конечному продукту для пользователей. Да, зарекаться не стоит, но взвесив все “за” и “против” решили оставить для более детального рассмотрения два варианта: монолитное решение и serverless.</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b0cdb0"></div>
</div></div></div></div><div id="tm-row-69dc491b0d04f" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b0d4f5" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h2><span style="font-weight: 400;">Использование монолита и serverless: детально</span></h2>
<p><span style="font-weight: 400;">Прежде всего, для наглядности приведем сводную таблицу со списком основных сервисов, которые предоставляет AWS. Каждый из этих сервисов может быть использован в любом из предложенных архитектурных решений. Почему AWS &#8211; спросите вы? Все дело в том, что во-первых, заказчик был заинтересован в использовании инфраструктуры AWS, во-вторых, действительно AWS является лидером среди облачных провайдеров во всем мире.</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b0da93"></div>
<div class="tm-image tm-animation move-up" id="tm-image-69dc491b0dc19">
			<div class="image"><img decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/servisy-aws-50x28.png" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/servisy-aws.png" class="ll-image unload" alt="AWS services" width="1202" height="694" /></div>	</div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><em><span style="font-weight: 400;">Рис. 3. Сервисы AWS, необходимые в backend-части</span></em></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b13e05"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">Позже мы более детально посмотрим на их использование и какое место каждый из этих элементов занимает в построении архитектуры приложения.</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b1403f"></div>
</div></div></div></div><div id="tm-row-69dc491b142ad" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b14927" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h3><span style="font-weight: 400;">Монолитное решение</span></h3>
<h4><span style="font-weight: 400;">Инфраструктурный вопрос</span></h4>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b14eed"></div>
<div class="tm-image tm-animation move-up" id="tm-image-69dc491b15026">
			<div class="image"><img decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/example-of-backend-architecture-50x45.png" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/example-of-backend-architecture.png" class="ll-image unload" alt="backend-architecture" width="512" height="466" /></div>	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b1afa6"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><em><span style="font-weight: 400;">Рис. 4. Предложенный вариант архитектуры backend’а, построенной на базе монолита</span></em></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b1b2d2"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">Из схемы на рис. 4 видно, что в системе есть мобильный клиент. Далее из мобильного приложения отправляется запрос в облачную инфраструктуру AWS, а конкретно,в виртуальную машину Ec2 instance. Запрос первым делом попадает на сервер nginx, который отвечает за перенаправление запроса в наше приложение. Что собой представляет приложение? </span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Это приложение, написанное на Python, со всеми необходимыми нам endpoint’ами, бизнес-логикой и т.д., запущенное и работающее в Docker-контейнере. Все остальные необходимые сервисы &#8211; это просто компоненты, созданные однажды. Хранилище файлов можно удобным образом выделить в S3. В качестве сервера БД выступает RDS (Relational Database Service). Так как в системе предусмотрена отправка email-уведомлений, то можно использовать либо Sendgrid, как на схеме, либо AWS SES (Simple Email Service). </span><span style="font-weight: 400;"><br />
</span></p>
<p>&nbsp;</p>
<p><i><span style="font-weight: 400;">P.S. Забегая вперед, хочется отметить, что на схеме не учтен момент с алгоритмом нахождения ошибок в игре пользователя (SMR). Предполагалось, что этот блок будет являться частью API, но после замеров нагрузки стало ясно, что такие тяжелые вычисления необходимо выносить в специальный сервис. Поэтому дальше в оценке можно будет увидеть этот дополнительный пункт.</span></i></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b1b59f"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h4><span style="font-weight: 400;">Оценка трудозатрат на разработку (с учетом на одного разработчика)</span></h4>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b1b7c9"></div>
<div class="tm-image tm-animation move-up" id="tm-image-69dc491b1b8fb">
			<div class="image"><img decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/trudozatraty-1-50x10.png" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/trudozatraty-1.png" class="ll-image unload" alt="Трудозатраты монолит" width="1058" height="232" /></div>	</div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><em><span style="font-weight: 400;">Рис. 5. Трудозатраты на разработку монолитного решения</span></em></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b2215d"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">Пока что эти цифры нам ни о чем не говорят, чуть позже сравним их со значениями для serverless-решения.</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b2239d"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h4><span style="font-weight: 400;">Затраты на хостинг</span></h4>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b225c3"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">* Исходим из расчета на 1000 активных пользователей системы</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b227d1"></div>
<div class="tm-image tm-animation move-up" id="tm-image-69dc491b228fb">
			<div class="image"><img decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/zatraty-na-hosting-50x22.png" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/zatraty-na-hosting.png" class="ll-image unload" alt="Затраты на хостинг" width="1169" height="530" /></div>	</div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><em><span style="font-weight: 400;">Рис. 6. Затраты на хостинг</span></em></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b2933f"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><b>Итого: ~ 265$ / месяц</b></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b29585"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h5><span style="font-weight: 400;">Плюсы</span></h5>
<ol>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Традиционная кодовая база. Можем сменить хоста в любой момент и практически ничего менять не придется</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Упрощенная схема инфраструктуры (общий сервер почти для всего, если не используем выделенные сегменты инфраструктуры)</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Ec2 запущен в режиме 24/7, поэтому нет проблемы «холодного старта»</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Довольно предсказуемая ценовая политика, что весьма важно!</span></li>
</ol>
<p>&nbsp;</p>
<h5><span style="font-weight: 400;">Минусы</span></h5>
<ol>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Повышенная ответственность со стороны разработки: настройка веб-сервера nginx, настройка логирования, настройка мониторинга сервисов приложения. Плюс необходима соответствующая квалификация разработчиков.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Масштабирование. Нет гарантии, что однажды не упремся в пороговое значение.  Для горизонтального масштабирования необходима настройка, что само по себе непросто (стоимость будет увеличиваться в разы).</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Если захотелось бесплатно поднять БД, то придется настроить бэкапы и мониторинг самостоятельно. Это сложнее, чем просто «выставить галочку» в RDS «мне нужны бэкапы каждый день в 24:00», а значит и стоимость работы все равно будет недешевой. </span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">При изменении чего-либо в конфигурации сервера не всегда получается понять, что пошло не так</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Авторизацию в серверной части, например, придется реализовывать самостоятельно</span></li>
</ol>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b298c8"></div>
</div></div></div></div><div id="tm-row-69dc491b29b8c" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b2a2d9" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h3><span style="font-weight: 400;">Serverless</span></h3>
<h4><span style="font-weight: 400;">Инфраструктурный вопрос</span></h4>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b2a899"></div>
<div class="tm-image tm-animation move-up" id="tm-image-69dc491b2a9d1">
			<div class="image"><img decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/example-of-serverless-architecture-50x49.png" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/example-of-serverless-architecture.png" class="ll-image unload" alt="Example of serverless-architecture" width="512" height="509" /></div>	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b32c83"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><em><span style="font-weight: 400;">Рис. 7. Архитектура serverless backend’а приложения</span></em></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b32f1d"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">В данном случае система выглядит немного интересней 🙂 </span></p>
<p><span style="font-weight: 400;">Нет привычных nginx’а, Docker’а, вместо них появились какие-то Lambda с нумерацией от 1 до N, Step Function, Cognito… На самом деле все не очень сложно. Если вспомнить, что serverless тесно связано с понятием FaaS, то можно увидеть, что вместо единого API у нас получились разрозненные lambda-функции, каждая из которых отвечает за свой endpoint. Например, чтобы создать пользователя в системе (выполнить POST-запрос /users) мы вызываем определенную lambda-функцию, задача которой создавать пользователей &#8211; ничего более!</span></p>
<p><span style="font-weight: 400;">Тот блок, который помечен как Step Function &#8211; </span><i><span style="font-weight: 400;">долгая </span></i><span style="font-weight: 400;">задача, выполняющаяся асинхронно (</span><i><span style="font-weight: 400;">дело в том, что мы не можем блокировать выполнение http-запроса до момента получения результата, потому как алгоритм нахождения ошибок может выполняться десятки секунд, а пользователь не очень хочет видеть заблокированный экран приложения</span></i><span style="font-weight: 400;">).</span></p>
<p><span style="font-weight: 400;">Cognito &#8211; мощный сервис авторизации пользователей в системе.</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b33206"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h4><span style="font-weight: 400;">Оценка трудозатрат на разработку (с учетом одного разработчика)</span></h4>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b3353d"></div>
<div class="tm-image tm-animation move-up" id="tm-image-69dc491b33729">
			<div class="image"><img decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/trudozatraty-serverless-50x11.png" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/trudozatraty-serverless.png" class="ll-image unload" alt="Трудозатраты serverless" width="1057" height="235" /></div>	</div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><em><span style="font-weight: 400;">Рис. 8. Трудозатраты на разработку</span></em></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b3d135"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">Чуть позже сравним 🙂</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b3d370"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h4><span style="font-weight: 400;">Затраты на хостинг</span></h4>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b3d6a3"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">* Исходим из расчета на 1000 активных пользователей системы</span></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b3d8cc"></div>
<div class="tm-image tm-animation move-up" id="tm-image-69dc491b3d9fc">
			<div class="image"><img decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/zatraty-na-hosting-serverless-50x20.png" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/zatraty-na-hosting-serverless.png" class="ll-image unload" alt="Затраты на хостинг serverless" width="1202" height="502" /></div>	</div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><em><span style="font-weight: 400;">Рис. 9. Затраты на хостинг &#8211; serverless</span></em></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b45e84"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><b>Итого: ~ 250$ / месяц</b></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b460af"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h5><span style="font-weight: 400;">Плюсы</span></h5>
<ol>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Подход развертывания конфигурации через</span><i><span style="font-weight: 400;"> template.yaml</span></i><span style="font-weight: 400;">, который, имеет очевидные достоинства в виде четко структурированного файла с описанием AWS инфраструктуры + любые изменения отслеживаются Git’ом (можно выявить проблемы, связанные с изменением конфигурации) + хорошо документировано на официальном сайте.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Lambda-функции являются изолированными, удобно тестируются, для каждой из них создана своя группа для мониторинга.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Cloud Watch – очень удобный инструмент для сбора логов и мониторинга сервисов AWS. Для Python есть мощная библиотека boto3, которая позволяет выполнять любые операции с сервисами AWS.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Удобный CI/CD (с использованием environment-переменных): dev-stack/prod-stack/etc.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Мы не заботимся об обслуживании lambda-функций, мы лишь пишем код и точка. Хотя нет, не точка – еще платим деньги, сколько – не известно – вот такая простая математика, все зависит от ситуации. Тогда почему этот пункт в плюсах?..</span></li>
</ol>
<h5></h5>
<h5><span style="font-weight: 400;">Минусы</span></h5>
<ol>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Высокий порог вхождения при отсутствии опыта. </span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">«Холодный старт» у lambda-функций – специфическое ограничение, для нашего проекта некритично.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Грамотная настройка IAM-политик и их полное соблюдение требуют соответствующей квалификации специалистов, что есть не всегда.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Кодовая база достаточно плотно завязана на AWS-провайдере.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Зачастую, невозможно предсказать нагрузку и предотвратить автомасштабирование (пример – черная пятница), что ведет к непредсказуемым затратам.</span></li>
</ol>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b46454"></div>
</div></div></div></div><div id="tm-row-69dc491b46715" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b46c6e" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h2><span style="font-weight: 400;">Подведение итогов</span></h2>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b47208"></div>
<div class="tm-image tm-animation move-up" id="tm-image-69dc491b47371">
			<div class="image"><img decoding="async" src="https://koniglabs.ru/wp-content/uploads/2021/08/sravnenie-stoimostej-50x19.png" data-src="https://koniglabs.ru/wp-content/uploads/2021/08/sravnenie-stoimostej.png" class="ll-image unload" alt="Сравнение стоимостей" width="1042" height="402" /></div>	</div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><em><span style="font-weight: 400;">Рис. 10. Сравнение стоимостей</span></em></p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b4e506"></div>

	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<p><span style="font-weight: 400;">Итак, как можно видеть из таблицы (рис. 10), стоимость инфраструктуры не сильно разнится, если смотреть со стороны стоимости разработки. Зато стоимость работ оценена практически в два раза больше. Это весомый аргумент в пользу монолитного решения. Плюс ко всему, как говорилось ранее, это и простота, и меньший порог вхождения и т.д. Тем не менее, есть несколько пунктов, которые перевесили наше решение в сторону выбора serverless: </span></p>
<p>&nbsp;</p>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Заказчик имеет положительный опыт разработки с использованием инфраструктуры AWS  и настаивает на serverless;</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">решение выглядит масштабируемым, т. е. со стороны разработки «практически» не потребуется ничего предпринимать с ростом нагрузки. Те затраты, которые понес заказчик в начале, с лихвой окупятся при масштабировании. А это значительный плюс по сравнению с монолитным решением;</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">SAM &#8211; об этом будет рассказано более подробно в следующей в статье;</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Со стороны команды разработки, действительно хотелось опробовать современный подход в разработке, поэтому остановились на serverless 🙂</span></li>
</ul>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b4e7ac"></div>
</div></div></div></div><div id="tm-row-69dc491b4ea4f" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b4efe0" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper"><div class="tm-button-wrapper tm-animation move-up" id="tm-button-69dc491b4f4c0">
		<a class="tm-button style-flat tm-button-nm tm-button-" href="https://b24-9tnih8.bitrix24.site/crm_form4/"
		target=" _blank"	>

		
						<span class="button-text" data-text="Консультация по архитектуре ПО">
				Консультация по архитектуре ПО			</span>
			
		

	</a>
</div>
<div class="tm-spacer" id="tm-spacer-69dc491b4f5eb"></div>
</div></div></div></div><div id="tm-row-69dc491b4f7f5" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b4fc5e" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			
		</div>
	</div>
</div></div></div></div>
<p>The post <a href="https://koniglabs.ru/serverless-vs-monolit/">Serverless vs монолит: что выбрать в среде AWS?</a> appeared first on <a href="https://koniglabs.ru">König Labs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://koniglabs.ru/serverless-vs-monolit/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Если вам нужен архитектор, то у меня для вас плохие новости</title>
		<link>https://koniglabs.ru/nuzhen-arhitektor/</link>
					<comments>https://koniglabs.ru/nuzhen-arhitektor/#comments</comments>
		
		<dc:creator><![CDATA[Alexey Palatkin]]></dc:creator>
		<pubDate>Fri, 04 Jun 2021 15:08:49 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[архитектура]]></category>
		<guid isPermaLink="false">https://koniglabs.com/?p=5925</guid>

					<description><![CDATA[<p>The post <a href="https://koniglabs.ru/nuzhen-arhitektor/">Если вам нужен архитектор, то у меня для вас плохие новости</a> appeared first on <a href="https://koniglabs.ru">König Labs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div id="tm-row-69dc491b54f24" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b553e3" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h3><span style="font-weight: 300;">Начнем с начала</span></h3>
<p>&nbsp;</p>
<p>Для начала давайте, как всегда, определимся с понятиями. Кто такой вообще Архитектор?<br />
Если на пальцах — то это роль, отвечающая за построение правильной архитектуры программной системы. Что такое «правильная архитектура» — повод для нескончаемых холиваров. Что такое «программная система» — тоже не вполне определено, т.к. надо учитывать размер системы, уровень абстракции и ширину рассмотрения. В общем, на пальцах понятно только, что это роль, и что это про архитектуру.</p>
<p>&nbsp;</p>
<p>На практике, кстати, уровень понимания этой роли обычно именно такой. Чёрт его знает, кто это должен быть и чем заниматься. Никто ведь не лезет в описания System Architect / Solution Architect по тому же SAFe. Просто нанимают какого-то башковитого мужика и говорят: вот, будешь у нас Архитектором.</p>
<p>&nbsp;</p>
<p>Ну, а чем обычно занимается этот Архитектор? Понятное дело, что если это какая-то громадная система уровня информационной системы министерства, или что-то с кучей интеграций — скажем, крупный проект SAP — то там бывает, что и несколько Архитекторов трудятся… в основном над документацией. И следят, чтобы все договоренности, описанные в этой документации, соблюдались. И бьют по кривым рукам коллег из параллельных структур за то, что те не соблюдают оговоренные программные интерфейсы. И пишут, пишут, пишут документацию.</p>
<p>&nbsp;</p>
<p>Ну, а в обычной продуктовой или заказной разработке? Как роль — безусловно, Архитектор нужен вообще в любом проекте. В начале. Ну, и немного — иногда исчезающе немного — по ходу работы над проектом. Чтобы следить, не нарушаем ли принятых архитектурных решений, и иногда эти решения обновлять под давлением обстоятельств.</p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b55954"></div>
</div></div></div></div><div id="tm-row-69dc491b55b84" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b5609d" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h3><span style="font-weight: 300;">Плохая новость №1</span></h3>
<p>&nbsp;</p>
<p>Но ведь бывает, что на роли Архитектора сидит действительно башковитый, опытный товарищ, и фуллтайм что-то делает сразу во всех проектах компании. И без него — никуда.</p>
<p>&nbsp;</p>
<p>Вот это как раз и есть первая плохая новость. Если разработчики проектов настолько некомпетентны, что не умеют / не могут выстроить архитектуру своего проекта — настолько некомпетентны, что за них это делать приходится отдельному башковитому мужичку — то какой же код они потом будут писать? Архитектор ведь не будет следить за каждой реализацией класса или интерфейса… или будет? 🙂</p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b565b5"></div>
</div></div></div></div><div id="tm-row-69dc491b567d6" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b56d1c" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h3><span style="font-weight: 300;">Плохая новость №2</span></h3>
<p>&nbsp;</p>
<p>Есть такой забавный подход к разработке ПО — условно можно назвать «подход Звезда» — когда на работу берут мощного опытного парня, ставят его в центр, а вокруг образуется звезда из кодеров. Уже не разработчиков — а именно кодеров. Тимлид / Архитектор генерит UML диаграммы с детализацией вплоть до конкретных классов и интерфейсов — а кодеры бездумно реализуют его концепцию. Кодеру вообще не надо думать — за него думает Архитектор. Более того — кодер НИКОГДА и не научится думать с таким подходом. А если даже и умел когда-то думать — то со временем разучится.</p>
<p>&nbsp;</p>
<p>И это — вторая плохая новость. Если вы централизуете принятие архитектурных решений — вам не только придётся всё глубже и глубже погружать Архитектора в каждый проект. Вы ещё и своих разработчиков разучите принимать самостоятельные решения, да и вообще думать головой.</p>
<p>&nbsp;</p>
<p>Правда, нынче придумали микросервисы. И я тихо подозреваю, что популярность микросервисов связана именно с проблемами индустрии, а не с тем, что это такой уж офигенный подход в принципе. Если вкратце — то микросервисный подход позволяет посадить в центре Архитектора, но ему надо будет детализировать уже не на уровне классов, а на уровне модулей и интерфейсов между ними. Это супер удобно, учитывая, что все разрабы — удаленщики, друг с другом общаются мало или вообще никак, да и живут / работают в абсолютно разных часовых поясах. Ну и ещё, положа руку на сердце, — потому что хорошего разработчика найти тяжело, воспитать еще тяжелее, а микросервис реализовать можно и незнакомому индусу поручить.</p>
<p>&nbsp;</p>
<p>В итоге все проблемы разработки убираются с уровня модулей — микросервисов — и перекладываются на уровень выше. На уровень согласования работы модулей, data flow, взаимного оповещения и так далее. То есть на традиционно гораздо более проблемный уровень. На котором, к тому же, приходится работать куда более квалифицированным и дорогостоящим специалистам. А уж при развертывании всего этого колхоза у DevOps проблем столько, что из отложенных кирпичей можно каждый день строить новый дом. Зато есть куда приложить нашего Архитектора. Конечно, при этом разработчики снова будут превращаться в бездумных кодеров — ну, да это их проблемы, верно?</p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b572e8"></div>
</div></div></div></div><div id="tm-row-69dc491b5751f" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b579ce" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h3><span style="font-weight: 300;">Плохая новость №3</span></h3>
<p>&nbsp;</p>
<p>Есть ещё так называемые Архитекторы-Астронавты. Любители накручивать абстракции на абстракции, намазывать сложность поверх сложности, и так далее. Очень хорошо их описал Джоэль Спольски ещё в 2001-м году. Ну, действительно, вы же взяли очень умного парня на фуллтайм. Надо же ему чем-то заняться… не код же писать, в самом деле. Вот он и ходит туда-сюда, задумчивый. Продумывает очередную гениальную идею реализации стандартной, в общем-то, функциональности новым, революционным методом. Очень сложным, разумеется. Он же не дурак, чтобы делать просто. И это — третья плохая новость. Такой человек не просто будет бесполезно жрать огромную зарплату — он ещё и вреда нанесет столько, что потом с двумя бригадами ассенизаторов не разгребешь.</p>
<p>&nbsp;</p>
<p>В общем, в таких надо стреля… эмм, увольнять их надо без предупреждения.</p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b57f92"></div>
</div></div></div></div><div id="tm-row-69dc491b581ae" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b58621" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element  tm-animation move-up" >
		<div class="wpb_wrapper">
			<h3><span style="font-weight: 300;">Ищем решение</span></h3>
<p>&nbsp;</p>
<p>А что же делать? — спросит удивлённый читатель.</p>
<p>&nbsp;</p>
<p>На это есть два ответа: простой и сложный. Простой — брать на вооружение подход «Звезда», но делать это осознанно. Понимая, что микросервисы могут принести в дальней перспективе множество проблем. Понимая, что вы делаете своего Архитектора узким местом, бутылочным горлышком, повышая Bus Factor. Понимая, что вы низводите своих разработчиков до уровня кодеров, и им это не очень-то понравится. Понимая, что проблема воспитания кадров встанет ещё сильнее, и подходить к её решению придётся очень серьёзно.</p>
<p>&nbsp;</p>
<p>Просто, не правда ли? 🙂</p>
<p>&nbsp;</p>
<p>Ну, а сложный ответ: это учиться строить полноценные команды с Тим/Тех-лидами во главе, где каждый человек носит гордое звание разработчика и учится принимать ответственные решения на своём уровне понимания. И делать это в условиях удаленной работы, осложненной коронаситуацией. Что, собственно, и делает этот ответ сложным.</p>

		</div>
	</div>
<div class="tm-spacer" id="tm-spacer-69dc491b58bbd"></div>
</div></div></div></div><div id="tm-row-69dc491b58df2" class="vc_row vc_row-outer vc_row-fluid"><div id="tm-column-69dc491b59247" class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner "><div class="wpb_wrapper"><div class="tm-button-wrapper tm-animation move-up" id="tm-button-69dc491b5969d">
		<a class="tm-button style-flat tm-button-nm tm-button-" href="https://b24-9tnih8.bitrix24.site/crm_form4/"
		target=" _blank"	>

		
						<span class="button-text" data-text="Нужен архитектор!">
				Нужен архитектор!			</span>
			
		

	</a>
</div>
<div class="tm-spacer" id="tm-spacer-69dc491b597bc"></div>
</div></div></div></div>
<p>The post <a href="https://koniglabs.ru/nuzhen-arhitektor/">Если вам нужен архитектор, то у меня для вас плохие новости</a> appeared first on <a href="https://koniglabs.ru">König Labs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://koniglabs.ru/nuzhen-arhitektor/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>