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

N-уровневая архитектура

Я уверен, что все знают об N-уровневой архитектуре. Эта архитектура используется уже много лет, особенно с появлением веб-приложений. Позже N-уровневая архитектура была реализована и в других приложениях. Вкратце напомним, что в N-уровневой архитектуре мы делим наше приложение на три или четыре основные области. UI – пользовательский интерфейс, отображается для конечного пользователя. Средний уровень, иногда называемый бизнес-уровнем, – это тот, в котором мы добавляем функции для бизнес-логики, доступа к данным и т.д. Иногда уровень доступа к данным может быть упомянут отдельно. Последний уровень – это уровень данных, на котором мы сохраняем наши данные с помощью какого-либо хранилища, например, реляционной или нереляционной базы данных. Это очень мощная конструкция, которая пользуется большим успехом на протяжении многих лет.

Микросервисная Архитектура

В мире разработок появилось новое слово – микросервисы, а вместе с тем и многочисленные преимущества, которые они дают. Микросервисы – это независимые сервисы, подобные приложениям, которые существуют сами по себе. Они имеют собственную логику, состояние и деплой. Они взаимодействуют друг с другом через вызовы API, очереди и т.д., в зависимости от требований. Эти микросервисы объединяются для создания общего прикладного решения. Поскольку они очень слабо связаны между собой, микросервисы можно поддерживать, масштабировать и обновлять независимо друг от друга. Разные команды могут работать над ними в одно и то же время. Также хотелось бы отметить, что для проектирования и разработки отдельных сервисов можно использовать N-уровневую архитектуру.

Нужно ли переводить все на микросервисы?

Поскольку N-уровневая архитектура представляет собой некую группу, которая в основном обновляется и деплоится вместе, а микросервисы независимы и очень слабо связаны друг с другом, должны ли мы перенести все или строить все новые приложения только с использованием микросервисов? Для меня – ответ "нет". Мы должны проанализировать каждую ситуацию, тип и масштаб приложения, прежде чем решить, какой дизайн использовать. Для небольших приложений, которые имеют несколько тысяч пользователей, мы можем построить приложение с помощью стандартной N-уровневой архитектуры, используя принципы SOLID. Эти принципы сделают наше приложение масштабируемым, обслуживаемым и высокопроизводительным. С помощью новых облачных решений, таких как службы приложений в Microsoft Azure, мы можем разворачивать приложения и обеспечивать их масштабирование с использованием инфраструктуры. Таким образом, N-уровневая архитектура предоставляет нам очень жизнеспособное решение. Это решение также очень экономически эффективно, поскольку обычно над приложением работает одна команда, и координация между командами не становится проблемой.

Однако если мы создаем очень большое приложение для обслуживания сотен тысяч пользователей или более, где требуется высокий уровень надежности, мы можем использовать микросервисную архитектуру. Помните, что при создании микросервисов необходимо гораздо больше планирования. Мы не можем запустить процесс гибкой разработки так быстро, как это можно сделать в стандартном N-уровневом приложении. Может понадобиться создать разные команды для работы с разными микросервисами, а также поработать над методом координации между ними и провести обширную работу по проектированию методологии взаимодействия между различными сервисами. Аналогичным образом, на этапе разработки потребуется еще много работы, чтобы проект шел гладко. В облаке у нас есть несколько отличных сервисов для микросервисов. Например, в Microsoft Azure есть AKS (Azure Kubernetes Services) и Service Fabric. Эти сервисы также требуют гораздо больше работы по планированию, проектированию, деплою и обслуживанию, в отличие от сервисов службы приложений, о которых мы говорили ранее.

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

Заключение

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

Комментарии (9)


  1. onets
    17.10.2022 18:00
    +4

    А сам микросервис это разве не N уровневая архитектура?


    1. Darya_Chuyko
      20.10.2022 13:04
      +1

      Добрый день, микросервис призван выполнять определенную функцию. Как правило, сервис реализует бизнес-логику и взаимодействие с данными в БД. Поэтому да, микросервис содержит элементы n-уровневой архитектуры.


  1. ITweb
    17.10.2022 18:06
    +8

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

    Интересно откуда такая уверенность?

    А вообще статья похожа на маркетинговую копипасту от MS


    1. dmi3mart
      18.10.2022 10:56

      Вот у меня тоже всегда возникает такой вопрос. Где какие-то метрики, какие-то объективные показатели, которые могут дать представление о той или иной архитектуре как о "более масштабируемой, простой в поддержке, эффективной, дешевой"?


  1. Politura
    17.10.2022 18:25
    +5

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

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

    Мартин Фаулер, один из главных идеологов микросервисов который кажется даже придумал это название, вполне согласен с тем, что по-умолчанию стоит делать монолит, а думать о микросервисах имеет смыл тогда, когда на это есть веские причины: https://www.youtube.com/watch?v=GBTdnfD6s5Q&t=535s&ab_channel=GOTOConferences

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


  1. Hivemaster
    18.10.2022 09:41

    Автор сравнивает подходы на разных уровнях абстракции. Что дальше, рассуждения о том, стоит ли применять ООП или микросервисы?


  1. Ulys-ses
    19.10.2022 13:07

    Кто мешает строить многоуровневую архитектуру из микросервисов?


  1. CalmNad
    20.10.2022 14:13
    +2

    Наведем немного порядок "в головах" :)

    N-уровневая архитектура - это разнесение системы по физически разным машинам (виртуальным - тоже считается). Например:

    - 1-уровневая - запуск всей системы на компьютере пользователя;

    - 2-уровневая - классический клиент-сервер, когда слой представления запускается в браузере пользователя (на его машине), а серверная (с базой и т.п.) - на отдельном сервере;

    - 3-уровневая - тот же клиент-сервер, но под DB выделена отдельная машина;

    Слоеная архитектура - это разнесение системы по логически компонентам (очень похоже на слои, но делят логикой :).

    Эти два понятия близки/переплетаются. Например, во время разработки три логических слоя (представление, бизнес логика, данные) запускаются как одноуровневая система на компьютере пользователя. А при развертывании в прод - как N-уровневая система.

    Часто уровни и слои называют "горизонтальным" разбиением системы.

    Микросервисная архитектура - это способ "вертикального" разбиения системы на слабосвязанные части. По факту, каждая такая часть может быть реализована как N-уровневая/слоеная.

    Т.е. в принципе не верно противопоставлять эти архитектуры, они "о разном".


    1. Serverspace
      20.10.2022 14:33
      +1

      Здравствуйте, спасибо за краткое резюме!
      Эти архитектуры разные. И в данной статье автор рассказывает, когда для построения приложений использовать N-уровневую архитектуру и нужно ли вообще переводить все на микросервисы.