Просто пишите код. Часть 1

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Микросервисы: когда и зачем

В последнее время я часто читаю статьи о том, как использовать микросервисы, но редко встречаю ситуации, где принятие решения об их использовании имеет правильное обоснование. В этой статье я попробую показать, как должно приниматься такое решение - шаг за шагом для каждого домена. Важно понимать, что решение принимается по каждому домену в отдельности, в зависимости от его особенностей, его связей и команды, которая его реализует.

Постарался создать простой чек лист для принятия решения о выделения в микросервис конкретного домена.

Вопрос изоляции доменов (программной части и данных). Изоляция может быть реализована в виде микросервисов, service-based архитектуры, CQRS и других подходов. Выбор подхода зависит от логики, оценки положительных и отрицательных сторон изоляции по отношению к конкретному домену. К одному домену может быть применен один подход, к другому - другой, в зависимости от содержания домена и от способа взаимодействия команд ответственных за домены.

Статья - идейное продолжение моей статьи Борьба со сложностью

Доводы за изоляцию и альтернативы

Основные технологические доводы за изоляцию:

  1. Масштабирование: для обеспечения масштабирования есть множество иных, более дешевых способов: (шардирование, репликация или выделение аналитической части в CQRS). И только если они не помогли, то можно прибегнуть к паттерну микросервисов для обеспечения требований по масштабируемости.

  2. Безопасность: для таких доменов, как платежный модуль, изоляция в виде микросервиса является необходимостью ввиду требований к безопасности данных. Альтернативных подходов практически нет.

  3. Мультитехнологичность: альтернатив распределенным архитектурам (микросервисам или иным) чтобы обеспечить это требование почти что и нет. Но такая потребность возникает не так уж часто. Впрочем, если основная часть приложения написана на скриптовых языках (Python или PHP), а остальную часть для ускорения быстродействия необходимо переписать на Go, C# или Rust, то изоляция этой части кода будет хорошей идеей. Наличие или отсутствие требований изоляции данных определит будет ли это микросервис или иная архитектура, к примеру service-based architecture.

Организационные доводы за:

  • Микросервисы эффективны для Agile, когда количество команд превышает 5-10, и взаимодействие между командами становится затруднительным. При численности команды около 10 человек (по правилу двух пицц) и общей численности 50-100 человек на продукт имеет смысл изолировать практически каждый домен.

  • При росте сложности требований, кодовой базы и поведения программы изоляция уменьшает риск веерного изменения в зависимых модулях - усложнения разработки и тестирования. Да, через изоляцию доменов DDD на уровне логики можно добиться положительного эффекта, но для крупных программ может оказаться предпочтительней кардинальная изоляция зависимостей, предоставляемая микросервисами. В книге "Чистая архитектура" показано, насколько драматично может быть падение производительности разработки с ростом кодовой базы и усложнением требований, если не гарантировать изоляцию модулей.

Против

Технологические доводы против изоляции:

  • Изоляция баз данных приводит к проблемам с распределенными транзакциями:

    • Потеря консистентности данных

Для устранения этого необходимо применять сложные техники (например, паттерн Saga)

  • Сетевая изоляция вызывает:

    • Увеличение длительности запросов по сети

    • Ненадежность из-за вероятности сетевых ошибок

Для устранения этого необходимо примерять техники повторов и реакции на сетевые ошибки. А против высоких задержек по сети поможет разве что расположить их близко по сети, далее в одной ноде, далее и вовсе объединить.

Организационные доводы против:

  • Если вы неверно определили границу домена или она изменилась вместе с бизнес процессом перенести эту границу будет уже значительно сложнее. Особенно не рекомендуется начинать с микросервисов или выбирать их "навырост". Monolith first!

  • При использовании Waterfall модели с вертикальным взаимодействием между командами или при небольшом количестве команд, когда взаимодействие еще не очень сложное, микросервисы не являются лучшим вариантом решения. При наличии статических анализаторов зависимостей и при надзоре техлида за зависимостями модульный монолит станет отличным решением! Для быстрого развертывания изменений можно посмотреть такие решения как Blue-Green Deployment, Feature Flags и т.д.

  • Микросервисы дают существенную нагрузку на DevOps и падение средней производительности в условных фичах на человека в день. Падение раза в 2-3.

  • Если одна команда отвечает за несколько доменов, можно попробовать макросервисы - несколько доменов в одном сервисе с одним кодом и базой. Границей макросервиса станет граница ответственности команды

Решение

И вот, когда вы взвесили по этому домену все за и против его изоляции, решили изолировать только программную часть или вместе с данными, выбрали вариант отделения, тогда режте, но потихоньку.

Изоляция доменов в виде модульного монолита, микросервисов, CQRS, EDA или Service Based Architecture — это мощный инструмент для обеспечения масштабируемости, безопасности и гибкости архитектуры, но её применение требует взвешенного подхода с учётом организационных и технических особенностей проекта.

Изначально хотел написать большую статью, но все достоинства и недостатки микросервисов и распределенной архитектуры уже разобраны до костей.

Интересные статьи на хабре про микросервисы из моих закладок

Как перейти от монолита к микросервисам без сложностей и рисков? Четыре проверенных паттерна

Проектирование отказоустойчивости IT-систем

Микросервисы в представлении среднего разработчика, и как всё на самом деле

Композитная архитектура: возвращение к монолиту на новом уровне

Заметки об основах программной архитектуры

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Внедрение микросервисов в вашем проекте было обоснованным?
33.33% Да, это явно помогло бороться с трудностями монолита1
0% Нет, это была ошибка0
33.33% Меня никто не спросит, зачем тогда иметь свое мнение?1
33.33% Микросервисы это хороший способ добавить еще строку себе в резюме1
Проголосовали 3 пользователя. Воздержавшихся нет.
Источник: https://habr.com/ru/articles/875424/


Интересные статьи

Интересные статьи

В конце 2023го года в рамках работ по импортозамещению основным корпоративным мессенджером Московской Биржи вместо MS Teams стал eXpress.На корпоративный мессенджер завязано множество интеграций и раб...
Свой путь к гибким методологиям разработки организации часто начинают с того, что нанимают сертифицированного Agile-консультанта (Certified Agile Consultant™), изучают Agile-манифест разработки програ...
Те, кто собираются открывать интернет-магазин, предварительно начитавшись в интернете о важности уникального контента, о фильтрах, накладываемых поисковиками за копирование материалов с других ресурсо...
Эта статья для тех, кто собирается открыть интернет-магазин, но еще рассматривает варианты и думает по какому пути пойти, заказать разработку магазина в студии, у фрилансера или выбрать облачный серви...
В «1С-Битрикс» считают: современный интернет-магазин должен быть визуально привлекательным, адаптированным для просмотра с мобильных устройств и максимально персонализированным с помощью технологии Бо...