fosstodon.org is one of the many independent Mastodon servers you can use to participate in the fediverse.
Fosstodon is an invite only Mastodon instance that is open to those who are interested in technology; particularly free & open source software. If you wish to join, contact us for an invite.

Administered by:

Server stats:

8.6K
active users

#архитектура

6 posts5 participants1 post today
Habr<p>Архитектура Uniswap v4: разбираем основы протокола</p><p>Uniswap V4 — это новая версия Uniswap в которой снова все с ног на голову. В предыдущей версии мы увидели новую математику, а в этой версии новый взгляд на архитектуру смарт-контрактов. Часть моментов я разбирал в своей прошлой статье , здесь мы углубимся в организацию работы смарт-контрактов. В этой статье мы разберем: - Ключевые смарт-контракты и библиотеки : репозитории и смарт-контракты с которых начинать изучение кода - Менеджер пулов: основной функционал и схема наследования - Флоу транзакции : точка входа для пользователя и поставщика ликвидности - Transient Storage : на примере разблокировки пула в качестве защиты от reentrancy - Хуки : что смарт-контракт хука использует и как вызывается менеджером пулов Если вы хотите понять, как Uniswap V4 превратился из обычной DEX в мощную платформу для DeFi-протоколов, эта статья для вас. Погнали!</p><p><a href="https://habr.com/ru/articles/935928/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/935928/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/uniswap" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>uniswap</span></a> <a href="https://zhub.link/tags/uniswapv4" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>uniswapv4</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/%D1%85%D1%83%D0%BA%D0%B8" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>хуки</span></a> <a href="https://zhub.link/tags/%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>маршрутизация</span></a> <a href="https://zhub.link/tags/singleton" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>singleton</span></a> <a href="https://zhub.link/tags/transient_storage" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>transient_storage</span></a> <a href="https://zhub.link/tags/dex" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dex</span></a> <a href="https://zhub.link/tags/routing" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>routing</span></a> <a href="https://zhub.link/tags/%D1%81%D0%BC%D0%B0%D1%80%D1%82%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%BA%D1%82%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>смартконтракты</span></a></p>
Habr<p>Как перестать беспокоиться и начать жить с легаси в проекте</p><p>Привет, Хабр! Меня зовут Саша Мищенко, я тимлид платформенной команды в Профи.ру. Сегодня хочу поговорить о легаси и о том, почему мы не переписываем код просто из-за того, что он старый.</p><p><a href="https://habr.com/ru/companies/profi_ru/articles/936364/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/profi_ru</span><span class="invisible">/articles/936364/</span></a></p><p><a href="https://zhub.link/tags/%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%BE%D0%B9" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>управление_разработкой</span></a> <a href="https://zhub.link/tags/%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D0%BB%D0%BB%D0%B5%D0%BA%D1%82" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>искусственный_интеллект</span></a> <a href="https://zhub.link/tags/%D0%BB%D0%B5%D0%B3%D0%B0%D1%81%D0%B8" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>легаси</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>документация</span></a> <a href="https://zhub.link/tags/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>программирование</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%B8" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ии</span></a> <a href="https://zhub.link/tags/google" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>google</span></a> <a href="https://zhub.link/tags/cloudflare" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>cloudflare</span></a> <a href="https://zhub.link/tags/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>разработка</span></a></p>
Habr<p>Хватит страдать: Выбросьте ООП и ECS. Есть путь проще</p><p>Десятилетиями нам рассказывают, что есть только два пути: громоздкие иерархии ООП или стерильная бюрократия ECS. Нас заставили поверить в то, что создание игр — это выбор между анархией и диктатурой. Это ложь. Оба этих пути — ненужные усложнения. Есть прямой и эффективный способ, который мы променяли на модные, но непрактичные примочки. Эта статья — о том, как вернуться к здравому смыслу.</p><p><a href="https://habr.com/ru/articles/935552/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/935552/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D0%9E%D0%9E%D0%9F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ООП</span></a> <a href="https://zhub.link/tags/ecs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ecs</span></a> <a href="https://zhub.link/tags/entitycomponentsystem" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>entitycomponentsystem</span></a> <a href="https://zhub.link/tags/entitycomponent" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>entitycomponent</span></a> <a href="https://zhub.link/tags/kiss%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kissпринцип</span></a> <a href="https://zhub.link/tags/kiss" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kiss</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура_системы</span></a> <a href="https://zhub.link/tags/%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>паттерны_проектирования</span></a></p>
Habr<p>Фаззинг как основа эффективной разработки на примере LuaJIT</p><p>Представьте, что в основе вашего коммерческого продукта используется компонент с исходным кодом, который написан на смеси языка С и самописного ассемблера. Из-за слабой детерминированности поиск репродьюсеров сложен, а без репродьюсера мейнтейнер проекта заявляет: «Сделайте так, чтобы я про вас больше не слышал». Я расскажу, как мы построили процесс активной поддержки LuaJIT в СУБД Tarantool, сократили количество инцидентов в продакшене, сократили затраты на бэкпорт патчей из основного проекта и какую роль во всем этом сыграл фаззинг и его специфика. Команда разработки продукта полностью отвечает за весь код этого продукта, в том числе за компоненты с открытым исходным кодом от третьих лиц. К сожалению, не все мейнтейнеры проектов с открытым исходным кодом готовы сотрудничать с разработчиками или их сотрудничество ограничивается жесткими рамками, что усложняет использование этих компонентов в коммерческих продуктах. В СУБД Tarantool используется LuaJIT в качестве языкового рантайма, но в Tarantool используется не оригинальный проект, а его форк. Я расскажу, как мы прошли путь от пассивного использования кода LuaJIT к процессу поддержки форка, с которым количество инцидентов на продакшене установилось около нуля, сократились усилия по бэкпортингу патчей из основного проекта, а основной проект получил активных контрибьюторов. Я рассмотрю специфику работы с проектом исходного кода на примере LuaJIT, расскажу, как устроено тестирование в нашем форке и какую роль там играет фаззинг. Расскажу о специфике фаззинга LuaJIT и о том, каких результатов мы в этом достигли за последние два года.</p><p><a href="https://habr.com/ru/companies/vk/articles/935100/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/vk/artic</span><span class="invisible">les/935100/</span></a></p><p><a href="https://zhub.link/tags/tarantool" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>tarantool</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>отказоустойчивость</span></a> <a href="https://zhub.link/tags/lua" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>lua</span></a> <a href="https://zhub.link/tags/luajit" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>luajit</span></a> <a href="https://zhub.link/tags/%D1%84%D0%B0%D0%B7%D0%B7%D0%B8%D0%BD%D0%B3" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>фаззинг</span></a> <a href="https://zhub.link/tags/vk_tech" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>vk_tech</span></a> <a href="https://zhub.link/tags/%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>базы_данных</span></a></p>
H.O.F.<p>Умные дворы в любимом Стокгольме</p><p><a href="https://dindon.one/tags/%D0%A1%D1%82%D0%BE%D0%BA%D0%B3%D0%BE%D0%BB%D1%8C%D0%BC" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Стокгольм</span></a> <a href="https://dindon.one/tags/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Архитектура</span></a> <a href="https://dindon.one/tags/%D0%94%D0%B2%D0%BE%D1%80%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Дворы</span></a></p>
Habr<p>Оверинжиниринг: простое сложным языком</p><p>Оверинжиниринг — это когда простую задачу решают так, словно строят космический корабль: с абстракциями, фабриками и паттернами «на будущее». Разбираем живые примеры, почему так происходит и как находить баланс между гибкостью и простотой.</p><p><a href="https://habr.com/ru/articles/933412/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/933412/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D0%BD%D0%B6%D0%B8%D0%BD%D0%B8%D1%80%D0%B8%D0%BD%D0%B3" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>оверинжиниринг</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/%D1%87%D0%B8%D1%81%D1%82%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>чистый_код</span></a> <a href="https://zhub.link/tags/%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>паттерны_проектирования</span></a> <a href="https://zhub.link/tags/%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>паттерны_программирования</span></a> <a href="https://zhub.link/tags/kiss" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kiss</span></a> <a href="https://zhub.link/tags/yagni" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>yagni</span></a> <a href="https://zhub.link/tags/%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>тестирование</span></a> <a href="https://zhub.link/tags/python" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>python</span></a> <a href="https://zhub.link/tags/%D0%B0%D0%BD%D1%82%D0%B8%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>антипаттерны</span></a></p>
Habr<p>Не теория, а практический опыт: как мы внедряли отказоустойчивость в лотереях</p><p>О паттернах отказоустойчивой архитектуры написано уже немало. Но когда дело доходит до реальных кейсов, особенно в специфических отраслях вроде лотерейной — информации почти нет. А ведь здесь, как и в любой высоконагруженной системе, отказоустойчивость — не просто галочка в ТЗ, а вопрос пользовательского доверия и бизнес-репутации. В этой статье расскажем, как мы в «Столото» подошли к проектированию Lottery Payment System. Это полностью вымышленный сервис для выплат выигрышей, построенный на опыте реальных вызовов и ограничений для того, чтобы на его примере описать, как работают ключевые паттерны отказоустойчивой архитектуры: Retry, Idempotency Key, Deadlines, Rate Limit и Circuit Breaker . Также покажем, как они применяются в контексте распределённой системы, которая должна стабильно работать, даже когда вокруг всё пошло не по плану. В нашем вымышленном сценарии мы представили, что компания прошла через архитектурную трансформацию и решила переосмыслить доменные области. Слишком громоздкий и хрупкий процессинг тормозил развитие. В какой-то момент он стал похож на башню из кубиков, которую боишься задеть. Поэтому мы выбрали путь здорового прагматизма — выплаты вынесли в отдельный сервис, чтобы дать этому направлению и стабильность, и простор для развития. В зоне его ответственности — всё, что связано с переводами пользователям, которые хотят получать выигрыши по лотерейным билетам и исполнять свои мечты. Будет немного архитектуры, чуть-чуть лирики и много практики. Это не скучный туториал — это живая история гипотетического продукта, в котором отказоустойчивость стала краеугольным камнем. Если вы работаете с высоконагруженными системами, и вам важно, чтобы ваши системы не падали — добро пожаловать.</p><p><a href="https://habr.com/ru/companies/stoloto/articles/934492/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/stoloto/</span><span class="invisible">articles/934492/</span></a></p><p><a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>высоконагруженные_проекты</span></a> <a href="https://zhub.link/tags/%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%B0%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>высокая_производительность</span></a> <a href="https://zhub.link/tags/%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>отказоустойчивость</span></a> <a href="https://zhub.link/tags/%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>отказоустойчивые_системы</span></a> <a href="https://zhub.link/tags/%D0%B8%D1%82_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ит_система</span></a></p>
Habr<p>Как эволюционировали архитектурные паттерны и как они будут развиваться дальше</p><p>Если вспомнить, что мы проходили в архитектуре за последние десятилетия, вырисовывается любопытная картина. Сначала были монолиты и мэйнфреймы, затем — двух- и трехзвенные архитектуры. Не так давно все активно занимались распиливанием монолита на микросервисы, массово внедряли CQRS. Казалось, нащупан стабильный путь развития. Но что дальше? Как раз об этом сегодняшняя публикация. Мы подготовили ее на основе доклада на True Tech Day от Олега Ивлева — директора по развитию технологий, и Марина Путниковича — руководителя центра практик «Архитектура» в МТС Web Services. Надеемся, получилось интересно!</p><p><a href="https://habr.com/ru/companies/ru_mts/articles/933066/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/ru_mts/a</span><span class="invisible">rticles/933066/</span></a></p><p><a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/truetechday" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>truetechday</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%BD%D1%8B%D0%B5_%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектурные_паттерны</span></a> <a href="https://zhub.link/tags/%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>сервисы</span></a> <a href="https://zhub.link/tags/%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>микросервисы</span></a> <a href="https://zhub.link/tags/%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D1%80%D0%B5%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>проектирование_и_рефакторинг</span></a></p>
Habr<p>Рефакторинг системы рекомендаций: как мы перешли с монолита на микросервисы</p><p>Привет, я разработчик программного обеспечения в компании 1221Systems и хочу рассказать об опыте перевода проекта с монолитной архитектуры на микросервисную: как выглядел исходный проект и с какими проблемами мы столкнулись, какую архитектуру построили после рефакторинга и какие преимущества в итоге получили. Что у нас было Проект состоял из двух частей.</p><p><a href="https://habr.com/ru/articles/934058/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/934058/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>микросервисы</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a></p>
Habr<p>Как мы реализовали георезервирование инфраструктуры для системы видеоконференций: опыт, ошибки, выводы</p><p>Что общего у систем видеоконференцсвязи (ВКС), финансовых транзакций и авиаперевозок? Все они должны работать всегда, когда нужны людям. Сегодня расскажем, как мы строили георезервирование для инфраструктуры, что пошло не так и какие выводы сделали. Перед вами — true story, как мы помогаем одному из наших заказчиков сопровождать инфраструктуру большого критичного сервиса. Привет, Хабр! Это Никита Турцаков и Алексей Кузьмин из К2. В этой статье расскажем: • зачем и для чего нужно георезервирование для системы ВКС; • как мы подошли к выбору архитектуры; • с чем столкнулись при реализации; • и что бы сделали по-другому, если бы начинали сейчас. Готовьтесь: будет много практики и немного боли — потому что как без неё в масштабных и амбициозных задачах.</p><p><a href="https://habr.com/ru/companies/k2tech/articles/932106/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/k2tech/a</span><span class="invisible">rticles/932106/</span></a></p><p><a href="https://zhub.link/tags/%D0%BE%D0%B1%D0%BB%D0%B0%D1%87%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>облачные_сервисы</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%BD%D1%84%D1%80%D0%B0%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>инфраструктура</span></a> <a href="https://zhub.link/tags/%D0%BE%D0%B1%D0%BB%D0%B0%D1%87%D0%BD%D1%8B%D0%B5_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>облачные_хранилища</span></a> <a href="https://zhub.link/tags/%D1%86%D0%BE%D0%B4" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>цод</span></a> <a href="https://zhub.link/tags/%D0%B3%D0%B5%D0%BE%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>георезервирование</span></a> <a href="https://zhub.link/tags/%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>кластер</span></a> <a href="https://zhub.link/tags/%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>базы_данных</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/consul" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>consul</span></a> <a href="https://zhub.link/tags/postgresql" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>postgresql</span></a></p>
Habr<p>Байки про тактические паттерны DDD</p><p>Если вы никогда не интересовались паттернами DDD или это было давно и неправда, эта статья, к сожалению, мало чем сможет вам помочь. Если вы никогда не читали Вернона – я настоятельно рекомендую это сделать, его объяснения прекрасны, подробны и системны. Если же вы знакомы с трудами классиков, но сочли их оторванными от жизни, либо были когда-то ими воодушевлены, попробовали воплотить их идеи на практике, но столкнулись с проблемами и разочаровались, то, возможно, я смогу вам помочь. Не потому что я – лучший в мире архитектор, программист или технический писатель, а потому, что я применяю Domain Driven Design на практике и советы, которыми я хочу поделиться, это не « ещё один пересказ Эванса », а отражение того, как это действительно может работать (как минимум в моей практике) в реальных проектах.</p><p><a href="https://habr.com/ru/articles/933588/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/933588/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/domaindriven_design" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>domaindriven_design</span></a> <a href="https://zhub.link/tags/repository" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>repository</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a></p>
Habr<p>Безопасность с Astra Linux: ресурсы для специалиста ИБ</p><p>Безопасность с Astra Linux: ресурсы для специалиста ИБ Представленный материал систематизирует ключевые ресурсы для специалистов ИБ, работающих с Astra Linux. Позволяет сократить время на поиск документации и избежать ошибок при проектировании защищённых систем.</p><p><a href="https://habr.com/ru/articles/933676/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/933676/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D0%B1%D1%83%D0%BC%D0%B0%D0%B6%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>бумажная_безопасность</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>информационная_безопасность</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a></p>
Habr<p>Простая минификация Json тел запросов / ответов с Kotlin Serialization</p><p>Привет! Недавно в рамках одного из проектов на стеке KMP, Ktor и Kotlin Serialization мы с командой решили провести эксперимент и определить возможность и целесобразность минификации тел запросов / ответов на Json. Да, мы знаем про GraphQL, Protobuf и др., но в нашем случае имел место необузданный интерес наколхозить такое решение. И при всей его наивности удалось сократить средний размер итоговых джсонов (после всех внутренних оптимизаций) на 15-20%.</p><p><a href="https://habr.com/ru/articles/933474/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/933474/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/kotlin" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kotlin</span></a> <a href="https://zhub.link/tags/kmp" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kmp</span></a> <a href="https://zhub.link/tags/kotlin_multiplatform" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kotlin_multiplatform</span></a> <a href="https://zhub.link/tags/ktor" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ktor</span></a> <a href="https://zhub.link/tags/json" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>json</span></a> <a href="https://zhub.link/tags/kotlin_serialization" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kotlin_serialization</span></a> <a href="https://zhub.link/tags/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>оптимизация_запросов</span></a> <a href="https://zhub.link/tags/http" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>http</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/%D1%81%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>сериализация</span></a></p>
Habr<p>Взаимодействие микросервисов: проблемы, решения, практические рекомендации</p><p>Все говорили о микросервисах. Гибкость. Масштабируемость. Независимые команды. Звучало как мечта. Многие компании бросились распиливать свои монолиты. Разработка действительно ускорилась. Отдельные компоненты стало проще обновлять и разворачивать. А потом сервисам понадобилось общаться. И мечта превратилась в сложную, многомерную головоломку.</p><p><a href="https://habr.com/ru/articles/933110/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/933110/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>микросервисы</span></a></p>
Habr<p>Практический CQRS и Event Sourcing на Go</p><p>Event Sourcing и CQRS — это мощные архитектурные подходы, которые заменяют традиционное CRUD-управление состоянием на журналирование событий и разделение операций записи и чтения для масштабируемости и надежности. Вместо прямого изменения данных система сохраняет каждое изменение как событие, что обеспечивает полный аудит, контроль конкурентности и гибкость в обработке данных.</p><p><a href="https://habr.com/ru/articles/932510/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/932510/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/go" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>go</span></a> <a href="https://zhub.link/tags/golang" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>golang</span></a> <a href="https://zhub.link/tags/cqrs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>cqrs</span></a> <a href="https://zhub.link/tags/event_sourcing" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>event_sourcing</span></a> <a href="https://zhub.link/tags/backend" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>backend</span></a> <a href="https://zhub.link/tags/architecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>architecture</span></a> <a href="https://zhub.link/tags/system_design" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>system_design</span></a> <a href="https://zhub.link/tags/%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>микросервисы</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/microservices" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>microservices</span></a></p>
Habr<p>Когда State уже не спасает: путь к Statechart</p><p>В мире разработки программного обеспечения управление состоянием объекта - одна из фундаментальных задач. Когда поведение объекта должно меняться в зависимости от его внутреннего состояния, разработчики часто обращаются к паттерну State . Однако здесь и возникает путаница: его нередко отождествляют с более общей концепцией — State Machine (Конечный автомат), а то и вовсе не видят разницы. Погрузимся в мир управления состояниями — от простого к сложному!</p><p><a href="https://habr.com/ru/articles/931962/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/931962/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/state" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>state</span></a> <a href="https://zhub.link/tags/statemachine" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>statemachine</span></a> <a href="https://zhub.link/tags/java" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>java</span></a> <a href="https://zhub.link/tags/architecture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>architecture</span></a> <a href="https://zhub.link/tags/oop" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>oop</span></a> <a href="https://zhub.link/tags/oop_patterns" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>oop_patterns</span></a> <a href="https://zhub.link/tags/%D0%BE%D0%BE%D0%BF" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ооп</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a></p>
Habr<p>Серверные компоненты в React</p><p>Привет! На связи Изрипов Юсуп, фронтенд-разработчик, прошел путь от фриланса до роли ведущего разработчика в таких крупных российских компаниях, как AliExpress и VK. Последние годы работаю в бигтех-компаниях, над продуктами, ежедневная аудитория которых составляет десятки миллионов пользователей. В этой статье мы подробно разберем, как серверные компоненты меняют подход к разработке современных приложений.</p><p><a href="https://habr.com/ru/companies/beeline_cloud/articles/931800/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/beeline_</span><span class="invisible">cloud/articles/931800/</span></a></p><p><a href="https://zhub.link/tags/react" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>react</span></a> <a href="https://zhub.link/tags/nextjs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>nextjs</span></a> <a href="https://zhub.link/tags/frontend" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>frontend</span></a> <a href="https://zhub.link/tags/frontend%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>frontendразработка</span></a> <a href="https://zhub.link/tags/jsx" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>jsx</span></a> <a href="https://zhub.link/tags/async" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>async</span></a> <a href="https://zhub.link/tags/fullstack" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>fullstack</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/security" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>security</span></a></p>
Habr<p>Efficient Computer: программируем по кафелю</p><p>Экспериментируем с компилятором для новой не Фон-Неймановской архитектуры, обещающей повышение энергоэффективности в 100 раз.</p><p><a href="https://habr.com/ru/articles/931536/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/931536/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/iot" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>iot</span></a> <a href="https://zhub.link/tags/edge" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>edge</span></a> <a href="https://zhub.link/tags/%D1%8D%D0%BD%D0%B5%D1%80%D0%B3%D0%BE%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>энергоэффективность</span></a> <a href="https://zhub.link/tags/%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D0%B8%D0%B7%D0%BC" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>параллелизм</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a></p>
Habr<p>Как девопсы контейнеризацию с виртуализацией дружили</p><p>А что, если бы виртуалки вели себя как контейнеры — с миграциями, мониторингом, провижингом томов и GitOps? Мы во «Фланте» так и сделали: совместили Kubernetes с KubeVirt, там-сям допилили и получили решение, которое позволяет запускать виртуальные машины рядом с контейнерами и управляется как обычный кластер Kubernetes. Привет, Хабр! Я — Олег Сапрыкин, технический директор по инфраструктуре компании «Флант». Сегодня я расскажу, как мы создавали виртуализацию в экосистеме Deckhouse от выбора инструмента для управления ВМ в 2023 году до полноценного продукта, готового к использованию в production весной 2025-го. Подробно опишу, с какими подводными камнями мы столкнулись в процессе эксплуатации и какие доработки потребовались.</p><p><a href="https://habr.com/ru/companies/oleg-bunin/articles/928672/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/oleg-bun</span><span class="invisible">in/articles/928672/</span></a></p><p><a href="https://zhub.link/tags/devops" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>devops</span></a> <a href="https://zhub.link/tags/devopsconf" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>devopsconf</span></a> <a href="https://zhub.link/tags/kubernetes" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kubernetes</span></a> <a href="https://zhub.link/tags/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D0%BE%D0%B5_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>системное_администрирование</span></a> <a href="https://zhub.link/tags/%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>контейнеризация</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>виртуализация</span></a> <a href="https://zhub.link/tags/kubevirt" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kubevirt</span></a> <a href="https://zhub.link/tags/linstor" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>linstor</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%BD%D1%84%D1%80%D0%B0%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>инфраструктура</span></a></p>
Habr<p>Разработка высоконагруженных API: проблемы, решения, практические рекомендации</p><p>Ваш проект взлетел. Первые пользователи превратились в тысячи. Тысячи стали десятками тысяч. Метрики в дашбордах рисуют красивую кривую, устремленную вверх. Но есть и другие кривые, которые ползут вверх с не меньшей скоростью. Время ответа сервера. Количество ошибок 502 и 504. То, что летало на ста запросах в секунду, начинает задыхаться на десяти тысячах. Это не ошибка, это физика. Архитектура для этих двух миров — это как велосипед и грузовой поезд. Они оба едут, но задачи у них разные. Так что давайте забудем про теорию и посмотрим, где обычно рвется и как это чинить, чтобы не переписывать все с нуля каждый раз, когда у вас прибавляется нолик в статистике пользователей.</p><p><a href="https://habr.com/ru/articles/928948/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/928948/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>архитектура</span></a> <a href="https://zhub.link/tags/api" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>api</span></a></p>