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

×


Layer vs. Tier(Прочитано 25573 раз)
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.
Если вы не знаете куда идете, то вы вряд ли туда дойдете [Форест Гамп]
www.grigorash.ru



Re: Layer vs. Tier Ответ #1 : 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 Ответ #2 : 22 Января 2008, 09:05:54
Спасибо!
Как раз для понимания этих терминов я и пользовался Фаулером, вернее при проектировании - это была единственная книга на которую ссылались. Так как Фаулер четко не дал определения layer и tier, отсюда и пошло мое не осознавание данных концепций.

Эдуард, тогда принимая во внимание то, что вы написали и то, что я написал 8) можно сделать вывод, что я все понимаю правильно?
Если вы не знаете куда идете, то вы вряд ли туда дойдете [Форест Гамп]
www.grigorash.ru



Re: Layer vs. Tier Ответ #3 : 22 Января 2008, 14:16:21
1. Посмотрите в блоге Сергея Орлика (http://www.sorlik.blogspot.com/) перевод SWEBOK, главу Проектирование. Там есть кое-что на эту тему
2. Все-так речь идет не о системной архитектуре, а о программной архитектуре. Т.к. системная архитектура это часть системной инженерии, а не программной.
"Politics is the art of looking for trouble, finding it, misdiagnosing it, and then misapplying the wrong remedies" (c)
Мой блог
http://www.yurybuluy.blogspot.com/



Re: Layer vs. Tier Ответ #4 : 22 Января 2008, 17:49:52
Эдуард, тогда принимая во внимание то, что вы написали и то, что я написал 8) можно сделать вывод, что я все понимаю правильно?
Думаю да



Re: Layer vs. Tier Ответ #5 : 22 Января 2008, 17:50:28
1. Посмотрите в блоге Сергея Орлика (http://www.sorlik.blogspot.com/) перевод SWEBOK, главу Проектирование. Там есть кое-что на эту тему
Кое-что действительно есть, но как-то нечетко



Re: Layer vs. Tier Ответ #6 : 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, и слои, и уровни - суть логические абстракции, показывающие систему с разных точек зрения. Скажем так, слоев и уровней может быть много, но вся система при этом может располагаться на одном компьютере.
Анатолий Дегтярёв ака tolldo

Ночь наиболее темна перед самым рассветом



Re: Layer vs. Tier Ответ #7 : 23 Января 2008, 09:34:48
Добавили дровишек!

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

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

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

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

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



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

Ночь наиболее темна перед самым рассветом



Re: Layer vs. Tier Ответ #9 : 23 Января 2008, 23:17:33
Кажется, еще больше запутали ситуацию.
Точно :)

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

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

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

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

Слои обычно представляются как пакеты с классами (редко компонентами).
Уровни в виде подсистем и компонентов
Если вы не знаете куда идете, то вы вряд ли туда дойдете [Форест Гамп]
www.grigorash.ru




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19