Форум Сообщества Аналитиков

Дисциплины => Проектирование => Тема начата: Виталий Григораш от 22 Января 2008, 02:26:31

Название: Layer vs. Tier
Отправлено: Виталий Григораш от 22 Января 2008, 02:26:31
Привет Всем!
Коллеги, помогите разобраться!
Я немного запутался в понятиях layer (слой) и tier (уровень) в представлении системной архитектуры.
Расскажу свое понимание этих терминов, а вы меня исправьте или дополните.
Оба подхода, как "расслоение" (layering) так и разделение по уровням (tiers) используется для декомпозиции системной архитектуры, но, как я понял, с разных точек зрения.
Слои применяются для группировки компонентов по некоторой функциональности (представление, бизнес-логика, доступ к данным).
Уровни используются при физической реализации (клиент - сервер - хранилище).
Получается, что часть слоя представления, например, может располагаться как на клиенте, так и на сервере.
1. Если мы реализуем "толстого" клиента, то представление на клиенте, если "тонкого", то на сервере.
2. Если это desktop приложение, то все слои реализованы на клиенте.
3. Часть логики слоя "доступ к данным" может быть реализована на сервере (например, Hibernate) или в хранилище (СУБД).

В дополнении ко всему, хочется заметить, что каждый уровень (tier) - это не обязательно один компьютер. Например, уровень сервер может быть развернут на одном и более компьютерах, хранилище тоже на нескольких.

+ Хотелось бы услышать какие диаграммы UML используются для представления данных концепций. Мне кажется, что это Component Diagram, Composite Structure Diagram, Deployment Diagram.
Название: Re: Layer vs. Tier
Отправлено: Galogen от 22 Января 2008, 08:30:54
Возьмем в качестве исходной точки такую цитату:
Мартин Фаулер. Архитектура корпоративных программных приложений

Цитировать
Концепция слоев (layers) — одна из общеупотребительных моделей, используемых разработчиками программного обеспечения для разделения сложных систем на более простые части. В архитектурах компьютерных систем, например, различают слои кода на языке программирования, функций операционной системы, драйверов устройств, набо¬ров инструкций центрального процессора и внутренней логики чипов. В среде сетевого взаимодействия протокол FTP работает на основе протокола TCP, который, в свою оче¬редь, функционирует "поверх" протокола IP, расположенного "над" протоколом Ethernet.
Описывая систему в терминах архитектурных слоев, удобно воспринимать состав¬ляющие ее подсистемы в виде "слоеного пирога". Слой более высокого уровня пользует¬ся службами, предоставляемыми нижележащим слоем, но тот не "осведомлен" о наличии соседнего верхнего слоя. Более того, обычно каждый промежуточный слой "скрывает" нижний слой от верхнего: например, слой 4 пользуется услугами слоя 3, который обра¬щается к слою 2, но слой 4 не знает о существовании слоя 2. (Не в каждой архитектуре слои настолько "непроницаемы", но в большинстве случаев дело обстоит именно так.)

Цитировать
При обсуждении вопросов расслоения программных систем нередко путают понятия слоя (layer) и уровня, или яруса (tier). Часто их употребляют как синонимы, но в большин¬стве случаев термин уровень трактуют, подразумевая физическое разделение. Поэтому сис¬темы клиент/сервер обычно описывают как двухуровневые (в общем случае "клиент" действительно отделен от сервера физически): клиент — это приложение для настольной машины, а сервер — процесс, выполняемый сетевым компьютером-сервером. Я приме¬няю термин слой, чтобы подчеркнуть, что слои вовсе не обязательно должны располагать¬ся на разных машинах. Отдельный слой бизнес-логики может функционировать как на персональном компьютере "рядом" с клиентским слоем интерфейса, так и на сервере ба¬зы данных. В подобных ситуациях речь идет о двух узлах сети, но о трех слоях или уров¬нях. Если база данных локальна, все три слоя могут соседствовать и на одном компьюте¬ре, но даже в этом случае они должны сохранять свой суверенитет.

Вот текоторые пояснения: http://rsdn.ru/Forum/?mid=1128564
Цитировать
Здравствуйте, Adopt, Вы писали:

A>Немного не понял автор имел ввиду Model Layer, Data Layer, Presentation Layer?
A>Трехзвенную архитектуру ?

И да и нет. Есть разница между слоями и звеньями (layer и tier). Звенья разделяют приложение на физическом уровне, а слои на логическом. Слои предназначены для незавимости логики между слоями, При этом, в большинстве случаев, n-звенная архитектура подразумевает разбитие на слои(обратное утверждение не всегда верно). В данном случае говорится о Data Layer — собственно слой хранилища данных, Model Layer — слой в котором обычно лежит максимум бизнес-логики, предоставляет объектную модель следующему слою, и обеспечивает независимость Presentation Layer от модели хранения данных. Ну и Presentation Layer — само отображение данных и взаимодействие с клиентом. Если говорить что Data Layer — база данных, Model Layer — сервер приложений, а Presentation Layer — клиент — то это была бы 3-х звенная архитектура. Но обычно все строится несколько по другому — и слоев несколько больше. К сожалению саму эту книгу не читал, поэтому детали конкретно к этой классификации описать не могу.

С уважением, Gleb.

Тут вот еще дискуссия: http://www.gotdotnet.ru/Forums/Common/259458.aspx?page=2147483647

Народ предлагает понимать под layer - логический слой, tier - звено, ярус - то есть нечто физическое

Насчет диаграмм, я бы еще добавил и диаграмму пакетов
Название: Re: Layer vs. Tier
Отправлено: Виталий Григораш от 22 Января 2008, 09:05:54
Спасибо!
Как раз для понимания этих терминов я и пользовался Фаулером, вернее при проектировании - это была единственная книга на которую ссылались. Так как Фаулер четко не дал определения layer и tier, отсюда и пошло мое не осознавание данных концепций.

Эдуард, тогда принимая во внимание то, что вы написали и то, что я написал 8) можно сделать вывод, что я все понимаю правильно?
Название: Re: Layer vs. Tier
Отправлено: Юрий Булуй от 22 Января 2008, 14:16:21
1. Посмотрите в блоге Сергея Орлика (http://www.sorlik.blogspot.com/) перевод SWEBOK, главу Проектирование. Там есть кое-что на эту тему
2. Все-так речь идет не о системной архитектуре, а о программной архитектуре. Т.к. системная архитектура это часть системной инженерии, а не программной.
Название: Re: Layer vs. Tier
Отправлено: Galogen от 22 Января 2008, 17:49:52
Эдуард, тогда принимая во внимание то, что вы написали и то, что я написал 8) можно сделать вывод, что я все понимаю правильно?
Думаю да
Название: Re: Layer vs. Tier
Отправлено: Galogen от 22 Января 2008, 17:50:28
1. Посмотрите в блоге Сергея Орлика (http://www.sorlik.blogspot.com/) перевод SWEBOK, главу Проектирование. Там есть кое-что на эту тему
Кое-что действительно есть, но как-то нечетко
Название: Re: Layer vs. Tier
Отправлено: tolldo от 22 Января 2008, 23:24:08
Добавлю дровишек  :)

Иванова, Вершинин. Java 2 EE. Технологии проектирования и разработки.

Цитировать
Layers

Layers являются абстракцией, отражающей концепцию реализации системы. Каждый такой слой скрывает детали нижнего уровня. Например, слоями (layers) реализации Java-приложения являются:
  • Application (Приложение);
  • Virtual platform (Виртуальная платформа);
  • Uper platform (Платформа высокого уровня - системное окружение, например, сервер приложений);
  • Lower platform (Платформа низкого уровня - операционная система).
Платформа низкого уровня скрывает детали аппаратной реализации и предлагает систему программных интерфейсов (APIs), управляющих аппаратными средствами.
Платформа высокого уровня скрывает реализацию платформы низкого уровня (потоки и взаимодействия ОС) и предоставляет окружение, в котором существуют компоненты.
Виртуальная платформа скрывает реализацию сервера приложений, предоставляя доступ к нему с помощью программных интерфейсов (APIs).
Приложение - самый высокий слой, содержащий бизнес-логику (business logic) и логику представления (presentation logic). Этот слой скрывает детали реализации приложения: как именно приложение работает в данной ОС или на данном сервере приложений.

Tiers

Tiers - уровни, которые используются для отражения не физической, а логической концепции разделения приложения, которая определяет роли и ответственности уровней в системе. Например, у многоуровневого J2EE приложения возможны следующие уровни (tiers):
  • Client tier (Уровень клиента);
  • Presentation tier (Уровень представления);
  • Business logic tier (Уровень бизнес логики);
  • Integration tier (Уровень интеграции);
  • Resource tier (Уровень ресурсов).
Client tier (Уровень клиента) - это, в первую очередь, интерфейс пользователя, а также модули поддержки взаимодействия пользователя с системой, апплеты и т.д.
Presentation tier (Уровень представления) - внешнее представление содержательной части системы на основе бизнес-информации.
Business logic tier (Уровень бизнес логики) содержит бизнес-логику приложения.
Integration tier (Уровень интеграции) - логика интеграции с ресурсами.
Resource tier (Уровень ресурсов) содержит ресурсы системы, в том числе базу данных.

IMHO, и слои, и уровни - суть логические абстракции, показывающие систему с разных точек зрения. Скажем так, слоев и уровней может быть много, но вся система при этом может располагаться на одном компьютере.
Название: Re: Layer vs. Tier
Отправлено: Galogen от 23 Января 2008, 09:34:48
Добавили дровишек!

Кажется, еще больше запутали ситуацию.

Все-таки, мне кажется, что-то не совсем ладное с логикой у Иванова с Вершининым. Такое ощущение, что поменялись местами оба понятия.

Все-таки tier предполагает физическое разделение, а layer некое абстрактное разделение. И как мне кажется все равно много зависит от языка реализации и субъективизма разработчика.

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

На ум мне приходит сравнение топологий построения сети.
Ethernet - по сути имеет шинную логическую топологию, но физическая топология может быть совершенно разная.
Название: Re: Layer vs. Tier
Отправлено: tolldo от 23 Января 2008, 13:34:27
Эта книжка издана в 2003 году и в выходных данных об авторах следующее:
Цитировать
  • Иванова Елена Борисовна, доцент Санкт-Петербургского государственного политехнического университета, кандидат технических наук, архитектор проектов, реализуемых в среде Together ControlCenter, разработчик технической документации фирмы TogetherSoft, вошедшей в фирму Borland.
  • Вершинин Максим Михайлович, руководитель направления J2EE фирмы TogetherSoft.
Авторы дали более конкретную трактовку вопроса, по сравнению с Фаулером. Можно ли им доверять? Может быть там техническая опечатка?
Виталий, задавший вопрос, судя доступным личным данным учится в этом самом политехе. Так ему и флаг в руки. Кто ж лучше него проверит эту информацию? :)
Название: Re: Layer vs. Tier
Отправлено: Виталий Григораш от 23 Января 2008, 23:17:33
Кажется, еще больше запутали ситуацию.
Точно :)

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

Я думаю действительно, авторы что-то напутали (хотя, а судьи кто 8)). Данные определения помоему взяты из Sun Certified Enterprise Architect for J2EE.

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

Слой - логическое разделение. Локализовать слой на отдельный уровень не возможно.  Обычно слой может быть размыт на несколько уровней. Например, бизнес-логика частично может быть реализована и на клиенте и на сервере приложений и на уровне хранилища.

Слои обычно представляются как пакеты с классами (редко компонентами).
Уровни в виде подсистем и компонентов