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

Недавно я видел довольно много объявлений о вакансиях разработчиков, которые включают предложение, которое более или менее похоже на это: "Должен иметь опыт работы с архитектурой N-Tier" или "Должен быть способен разрабатывать приложения N-уровня".

Это заставляет меня спросить, что такое архитектура N-Tier? Как можно получить опыт?

Ответ 1

Wikipedia:

В разработке программного обеспечения многоуровневый архитектуры (часто называемой n-уровневая архитектура) является архитектура клиент-сервер, в которой, презентация, приложение обработки и управления данными логически разделить процессы. Для Например, приложение, которое использует промежуточное ПО для обслуживания запросов данных между пользователем и базой данных многоуровневая архитектура. Большинство широкое использование "многоуровневого" архитектура "относится к трехуровневым архитектура.

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

alt text

Изменить. Одним из следствий является то, что уровень представления и логический уровень (иногда называемый бизнес-логическим слоем) должны пересекать границы машин "по проводам", иногда по ненадежной, медленной и/или небезопасной сети, Это очень отличается от простого настольного приложения, в котором данные хранятся на том же компьютере, что и файлы или веб-приложение, где вы можете напрямую попасть в базу данных.

Для программирования n-уровня вам необходимо упаковать данные в виде транспортабельной формы, называемой "набор данных", и пролететь их по проводу..NET DataSet класс или протокол веб-служб, например SOAP мало таких попыток пролетать объекты по проводу.

Ответ 2

Он основан на том, как вы разделяете уровень презентации с основной бизнес-логикой и доступом к данным (Wikipedia)

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

Ответ 3

Это модное слово, которое относится к таким вещам, как обычная веб-архитектура, например, Javascript - ASP.Net - Middleware - уровень базы данных. Каждая из этих вещей является "уровнем".

Ответ 4

Приложениями данных N-уровня являются приложения данных, которые разделены на несколько уровней. Также называемые "распределенные приложения" и "многоуровневые приложений", n-ярусные приложения разделяют обработку на дискретные которые распределяются между клиентом и сервером. Когда ты разрабатывать приложения, которые обращаются к данным, у вас должно быть четкое разделение между различными уровнями, которые составляют приложение.

Типичное приложение n-уровня включает в себя уровень представления, средний уровня и уровня данных. Самый простой способ разделить различные уровни в n-уровневом приложении - создавать дискретные проекты для каждого уровня которые вы хотите включить в свое приложение. Например, уровень представления может быть приложением Windows Forms, тогда как логика доступа к данным может быть библиотекой классов, расположенной в среднем уровне. Кроме того, уровень представления может связываться с данными логику доступа в среднем уровне через службу, такую ​​как услуга. Разделение компонентов приложения на отдельные уровни увеличивает ремонтопригодность и масштабируемость приложения. Это делает облегчая принятие новых технологий, которые могут быть применены к единый уровень без требования для реорганизации всего решения. В Кроме того, приложения n-уровня обычно хранят конфиденциальную информацию в средний уровень, который поддерживает изоляцию от уровня представления.

Взято из Microsoft веб-сайт.

Ответ 5

Если я понимаю вопрос, тогда мне кажется, что вопроситель действительно спрашивает "ОК, поэтому 3-ярус хорошо разбирается, но кажется, что существует смесь шумихи, замешательства и неопределенности вокруг того, что 4-ярусная, или для обобщения, архитектуры N-уровня имеют значение. Итак... какое определение уровня N, которое широко понято и согласовано?"

На самом деле это довольно глубокий вопрос, и для объяснения, почему, мне нужно немного глубже. Медведь со мной.

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

Теперь эта модель хорошо зарекомендовала себя на протяжении десятилетий, и это классическая модель "клиент-сервер". Быстрый переход к облачным предложениям, где веб-браузеры являются пользовательским интерфейсом для широкого и физически распределенного набора пользователей, и обычно обычно приходится добавлять сервисы распространения контента, которые не являются частью классической 3-уровневой архитектуры (и которые должны управляться сами по себе).

Концепция обобщает, когда речь заходит о сервисах, микро-службах, распределении данных и вычислений и т.д. Независимо от того, является ли какой-то "уровень", в основном сводится к тому, обеспечивает ли уровень интерфейса интерфейса и развертывания сервисам, которые находятся за (или ниже) уровня. Таким образом, сеть распространения контента будет уровнем, но службы аутентификации не будут.

Теперь перейдите и прочитайте другие описания примеров архитектуры N-уровня с этой концепцией, и вы начнете понимать эту проблему. Другие перспективы включают в себя основанные на поставщиках подходы (например, NGINX), контент-ориентированные балансировочные системы, изоляцию данных и службы безопасности (например, IBM Datapower), которые могут или не могут добавить ценность для данной архитектуры, развертывания и использования.

Ответ 6

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

Ответ 7

Приложения N-уровня данных - это приложения данных, которые разделены на несколько уровней. Также называемые "распределенные приложения" и "многоуровневые приложения", n-ярусные приложения разделяют обработку на дискретные уровни, которые распределяются между клиентом и сервером. Когда вы разрабатываете приложения, которые обращаются к данным, вы должны иметь четкое разделение между различными уровнями, составляющими приложение.

И так далее в http://msdn.microsoft.com/en-us/library/bb384398.aspx

Ответ 8

При построении обычной MCV (трехуровневой архитектуры) можно решить реализовать MCV с двухэтажными интерфейсами, так что на самом деле можно заменить определенный уровень, не изменяя даже одна строка кода.

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

Когда вы помещаете его на слой "Вид" (презентация), вы можете (удерживать!) заменять интерфейс USER другой машиной, тем самым автоматизировать REAL-вход (!!!) - и вы можете таким образом запускать утомительные тесты юзабилити тысячи раз, без какого-либо пользователя, который должен повторять и повторять повторное нажатие тех же вещей снова и снова.

Некоторые описывают такую ​​ трехуровневую архитектуру с 1 или 2 двойными интерфейсами как 4-уровневая или 5-уровневая архитектура, что подразумевает двойные интерфейсы.

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

Мобильный пример

Следовательно, многоуровневый или N-уровневый - действительно имеет несколько интерпретаций, тогда как я бы наверняка придерживался трехуровневых + дополнительных уровней, состоящих из тонких интерфейсных дисков, вклинившихся между ними активировать упомянутые уровни-свопы, а с точки зрения тестирования (особенно на мобильных устройствах) теперь вы можете запускать пользовательские тесты на реальном программном обеспечении, имитировать нажатие на пользователя способами, которые логика управления не может отличить от реального нажатия пользователем. Это почти первостепенное значение для моделирования реальных пользовательских тестов, поскольку вы можете записывать все входы от пользователей OTA, а затем повторно использовать один и тот же ввод при выполнении регрессионных тестов.

Ответ 9

Когда мы говорим о Tiers, мы обычно говорим о физических процессах (имеющих различное пространство памяти).

Таким образом, в случае, если Слои приложения развернуты в разных процессах, эти разные процессы будут разными уровнями.

Например, в трехуровневом приложении бизнес-уровень взаимодействует с мейнфреймами (отдельный процесс) и ведет переговоры с Reporting Service (отдельный процесс), тогда это приложение будет состоять из 5 уровней.

Следовательно, общее имя - n-ярус.

Ответ 10

с https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier

N-уровневая архитектура делит прикладные шины в основном на логические шины и физические уровни, и они делятся на подчасти. enter image description here

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

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

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

N-уровневое приложение может иметь архитектуру закрытого уровня или архитектуру открытого уровня:

In a closed layer architecture, a layer can only call the next layer immediately down.
In an open layer architecture, a layer can call any of the layers below it.

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

Ответ 11

Мартин Фаулер ясно демонстрирует:

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

Размышляя о системе в терминах слоев, вы представляете основные подсистемы в программном обеспечении, организованные в виде слоеного пирога, где каждый слой опирается на нижний уровень. В этой схеме верхний уровень использует различные сервисы, определенные нижним уровнем, но нижний уровень не знает о более высоком уровне. Кроме того, каждый уровень обычно скрывает свои нижние уровни от вышеперечисленных уровней, поэтому уровень 4 использует службы уровня 3, который использует службы уровня 2, но уровень 4 не знает об уровне 2. (Не все многоуровневые архитектуры непрозрачны, как это, но большинство из них - или, скорее, большинство в основном непрозрачные.)

Разбиение системы на слои имеет ряд важных преимуществ.

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

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

• Вы минимизируете зависимости между слоями. Если кабельная компания меняет свою физическую систему передачи, если она обеспечивает работу IP, нам не нужно менять наш FTP-сервис.

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

• После того, как вы построили слой, вы можете использовать его для многих сервисов более высокого уровня. Таким образом, TCP/IP используется FTP, telnet, SSH и HTTP. В противном случае все эти протоколы более высокого уровня должны будут писать свои собственные протоколы более низкого уровня. Из библиотеки Кайла Джеффри Пассарелли

Расслоение является важной техникой, но есть и недостатки.

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

• Дополнительные слои могут повредить производительность. На каждом уровне вещи, как правило, должны быть преобразованы из одного представления в другое. Однако инкапсуляция базовой функции часто дает вам повышение эффективности, которое более чем компенсирует. Слой, который контролирует транзакции, может быть оптимизирован, и тогда все будет быстрее. Но самая сложная часть многоуровневой архитектуры - это решить, какие слои иметь и какова ответственность каждого слоя.