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

В моем проекте есть одна серверная служба (веб-API) и одно внешнее приложение SPA. Серверная служба имеет уровни представления, службы приложений, домена и инфраструктуры, расположенные в разных сборках .net. Уровень предметной области имеет объекты бизнес-домена, инфраструктура — связь с внешними данными и прочее, службы приложений — набор служб, используемых уровнем представления, представление — контроллеры веб-API. Я думаю, что это очень распространенная многоуровневая архитектура.

Наш новый архитектор объявил, что мы собираемся перейти от серверной части к архитектуре микросервисов, разбивая наши уровни и разделяя уровни домена, службы приложений и инфраструктуры на несколько сервисов, а также преобразовать уровень представления в серверную часть для внешнего интерфейса (как здесь описано). В особенности у нас будет мобильное приложение. База данных Sql Server пока останется без изменений.

У меня нет опыта работы с микросервисной архитектурой, поэтому мои вопросы таковы: многоуровневая архитектура уже вышла из моды? Какие преимущества и проблемы может принести такая архитектура для моего приложения?


person Varman    schedule 24.01.2017    source источник


Ответы (2)


Микросервис и многоуровневая архитектура — это немного разные вещи. Микросервисная архитектура — это то, как устроено ваше приложение, какие компоненты (сервисы) в нем есть и как эти сервисы взаимодействуют друг с другом, как они разрабатываются, развертываются и так далее.

Многоуровневая архитектура — это логическое разделение приложения на уровни, где каждый уровень имеет свою логическую функцию (представление, домен и т. д.). Очень часто многоуровневая архитектура связана с монолитной архитектурой и сервис-дизайном.

Судя по вашему описанию, вы не собираетесь разбивать свои слои, ваш архитектор хочет разделить логику на разные сервисы. Эти два архитектурных стиля можно использовать вместе. Например, у вас может быть 3 службы, и каждая служба может иметь уровни представления, домена и службы. Если ваши текущие слои в одном сервисе достаточно тяжелые, имеет смысл разделить их, чтобы упростить разработку и тестирование. Бэкэнд для внешнего интерфейса также имеет свои преимущества, особенно если вы хотите добавить мобильное приложение.

Об этом

Многослойная архитектура уже вышла из моды?

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

Какие преимущества и проблемы может принести такая архитектура для моего приложения?

Я рекомендую вам посмотреть на сравнение стилей микросервисной и монолитной архитектуры и этот < href="https://stackoverflow.com/questions/33041733/microservices-vs-monolithic-architecture">пост. Разделять или нет, вы должны учитывать размер и сложность вашего проекта, размер вашей команды. Разделение должно приносить пользу всему приложению, облегчая разработку. Приложение Monolithic имеет свои преимущества, и до определенного размера проекта оно может быть хорошим решением. Конечно, работать с огромным монолитным приложением и сотней очень маленьких (нано) сервисов — кошмар.

person Vasyl Zv    schedule 24.01.2017

Спасибо, что поделился!

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

Убедитесь, что монолитная структура хороша и достаточна для вашего приложения, если вам подходит любой из следующих вариантов:

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

  • Быстрый запуск. У вас есть свежая идея или стартап, который нужно запустить как можно скорее, ведь на данный момент у него нет конкурентов и у вашего проекта есть все шансы стать успешным. Сжатые сроки реализации идеи. Ограниченный бюджет.

  • Доказательство концепции. Вы хотите проверить, осуществима ли и полезна ли ваша идея, создав базовый продукт для вашей целевой аудитории.

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

Монолитная или микросервисная архитектура — это вопрос, на который проще ответить, если вы знаете, в каких случаях следует выбирать последнюю.

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

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

  • Опыт работы с микросервисами. В вашей команде есть разработчики, имеющие опыт проектирования и развертывания микросервисов в рабочей среде, и вы уверены, что часть команды будет поддерживать и разрабатывать основное приложение, пока они работают над микросервисами.

  • Утопия. У вас достаточно денег, лояльных менеджеров и отсроченных сроков.

Теперь выбор между монолитом и микросервисом должен быть проще.

person Aleksandra Bessalitskykh    schedule 31.01.2019