Архитектура распределенных систем программного обеспечения. Учебное пособие издано при поддержке образовательной программы Формирование
Скачать 1 Mb.
|
ОткрытостьОткрытость – это использование синтаксических и семантических правил, основанных на стандартах. Для распределенной системы – это, прежде всего, использование формализованных протоколов. Службы, входящие в распределенную систему, определяются через интерфейсы, которые часто описываются при помощи языков описания интерфейсов IDL. Языки IDL касаются почти исключительно синтаксиса (имена доступных функций, типы параметров, возвращаемых значений, исключительные ситуации). Семантика чаще задается неформально, на естественном языке. Если интерфейс описан правильно, возникает возможность правильной совместной работы одного произвольного процесса, нуждающегося в интерфейсе, с другим произвольным процессом, представляющим интерфейс. Один и тот же интерфейс может быть также реализован в разных распределенных системах (независимо друг от друга), но работать обе системы будут одинаково. Для обеспечения переносимости и способности к взаимодействию в интерфейсе должно быть все, что нужно для его реализации, но он не должен определять внешний вид реализации. Переносимость характеризует, насколько приложение, сделанное для одной распределенной системы, может работать в составе другой системы, а способность к взаимодействию показывает, насколько две реализации систем или компонентов, выполненных разными людьми, в состоянии работать совместно. Открытые системы обладают очень важной характеристикой – гибкостью. Гибкость есть легкость конфигурирования системы, состоящей из различных компонентов. Достижения необходимого уровня гибкости приводит к тому, что открытая распределенная система становится расширяемой. МасштабируемостьРаспределенные системы программного обеспечения обладают свойством масштабируемости, которая может проявляться по отношению к размеру, к географическому положению, к административному устройству систем. Достижение масштабируемости связано с решением проблем, возникающих из-за наличия узких мест по обслуживанию (один сервер для множества клиентов), данным (множественный доступ к одному файлу данных), и алгоритмам (перегрузка коммуникаций из-за использования централизованных алгоритмов). Требование масштабируемости часто является препятствием распространения систем, реализованных для локальных сетей, на уровень сетей глобальных (корпоративных или Интернета). В глобальных сетях время получения ответа может значительно превышать локальные задержки, поэтому там чаще используется асинхронная связь. Кроме того, в локальных сетях службы часто распределены по компьютерам фиксированно, а в глобальных сетях местоположение необходимой службы заранее неизвестно. Еще одно следствие масштабируемости: аппаратные решения для распределенных систем могут быть гетерогенными. В отличие от гомогенных систем, построенных на единой технологии, гетерогенные системы могут состоять из частей, построенных на разных физических принципах, и обладающих разными свойствами и характеристиками. Разнородность в сочетании с независимостью приводят к важнейшему свойству распределенных систем: сами системы могут существовать продолжительное время, но отдельные их части могут время от времени отключаться. При этом пользователи и приложения не должны уведомляться о том, что эти части вновь подключены, что добавлены новые части для поддержки дополнительных пользователей или приложений. Логические программные слои распределенных системКонцептуально распределенные системы строятся послойно: презентационныйслой, слой прикладной логикии слой управленияресурсами. Эти слои могут быть только абстракциями, существуя лишь на этапе проектирования, но могут быть четко видимы в программном обеспечении, когда их реализуют в виде отдельных подсистем, иногда с применением различного инструментария. Презентационный слой. Все распределенные системы должны общаться с внешним миром, с пользователями-программистами или другими программными системами. Значительная часть этого общения связана с преобразованием информации и представлением ее для внешних пользователей, подготовкой запросов и получением ответов. Компоненты распределенной системы, обеспечивающие эту деятельность, формируют презентационный слой. Часто этот слой называют клиентомраспределенной системы, что неверно. Все распределенные системы имеют клиентов, то есть сущности, которые пользуются сервисами, предоставляемыми этими системами. Клиенты могут быть полностью внешними по отношению к системам и независимыми от них. В этом случае они не являются презентационным слоем самих систем. Лучшими примерами программ, спроектированных таким образом, являются сетевые навигаторы, обрабатывающие документы, написанные на языке HTML. Презентационным слоем распределенной системы в данном случае будет сетевой сервер, а также модули, занятые созданием HTML-документов. Случается, что клиент и презентационный слой слиты воедино. Это типично для систем типа клиент/сервер, в которых имеется программа, одновременно исполняющая роль клиента и презентационного слоя. Слой прикладной логики. Любые системы программного обеспечения не только демонстрируют информацию, но и осуществляют обработку данных. Эта обработка производится программой, реализующей фактические операции, запрошенные клиентом через посредство презентационного слоя. Такая программа называется программой слоя прикладной логики. Иногда эти программы называются службами, предлагаемыми распределенными системами. В зависимости от сложности выполняемой логики этот слой может называться бизнес процессом, бизнес логикой, бизнес правилами или просто сервером. Слой управления ресурсами. Для работы любая система программного обеспечения нуждается в данных. Данные могут размещаться в базах данных, файловых системах, в других репозиториях. Программы слоя управления ресурсами объединяют все такие элементы. Иногда, чтобы показать, что этот слой реализуется с использованием системы управления базой данных, этот слой называют слоем данных. Этот подход, однако, имеет ограничения, поскольку он концентрируется только на аспекте управления данными. Однако в управлении нуждаются все внешние системы, поставляющие информацию. Сюда входят не только базы данных, но и другие распределенные системы со своими слоями презентационным, прикладным и управления ресурсами. При этом появляется возможность рекурсивно строить распределенные системы, состоящие из других систем, как из компонентов. Описанные три слоя – это концептуальные конструкции, которые логически разделяют функциональность большинства распределенных систем. В практических реализациях они могут комбинироваться различными способами. В этих случаях говорят не о концептуальных слоях, а о ярусах (звеньях). Известны 4 типа основных типа распределенных систем, отличающихся количеством входящих в них ярусов: одно-, двух-, трех- и многоярусные системы. Виды распределенных систем программного обеспечения Одноярусныеархитектурывозникли под влиянием архитектуры первых вычислительных систем, которая включала в себя большой вычислительный модуль и некоторое количество периферийных устройств для ввода и вывода информации, подготовленной при вычислениях. Системы неизбежно получались монолитными, то есть все три слоя (презентационный, прикладной и ресурсный) являлись частями одной программы (располагались на одном ярусе), а в качестве клиента выступал простой терминал, имевший только клавиатуру для ввода команд оператора и экран для отображения ответов от вычислителя. Спроектированы одноярусные системы так, что у них нет никаких точек входа, кроме канала связи с терминалом. В случае необходимости связать их с другими системами нужно применять имитаторы терминалов, осуществляя обмен экранами. Но есть у одноярусных систем и достоинства. Во-первых, объединение слоев может проводиться для повышения эффективности. Обычно в таких системах минимизированы накладные расходы на переключение контекста и переходы между компонентами, а также на сложные преобразования данных. Не требуется разрабатывать специальную клиентскую часть, что снижает затраты на внедрение и поддержку. Сопровождать одноярусные системы трудно и дорого. В настоящее время есть все возможности разрабатывать одноярусные системы, но общее развитие науки идет в противоположном направлении. Двухъярусные архитектурыпоявились после возникновения персональных ЭВМ, на которых стало возможно не просто отображать информацию, но и обрабатывать ее. Роль сервера по-прежнему играла большая ЭВМ, но презентационный слой больше не требовалось объединять с другими слоями системы. У такого подхода есть два важных преимущества: использование вычислительных мощностей персональных ЭВМ (снятие нагрузки с других слоев), и использование одного презентационного слоя для разных целей, без усложнения системы. Двухъярусные архитектуры стали весьма популярны в виде архитектур клиент/сервер. Часто под термином клиент понимают презентационный слой и собственно клиентское программное обеспечение, называя сервером объединение прикладной логики и управления ресурсами. Клиент может принимать различные формы, он может даже выполнять некоторую функциональность, которая в противном случае была бы на сервере. В зависимости от сложности клиентской программы ее называют тонким клиентом, если она выполняет минимум функциональности, либо толстым клиентом, если эта функциональность достаточно развита. Разработка архитектуры клиент/сервер привела к появлению множества полезных механизмов, применяющихся в настоящее время в распределенных системах. Ярким примером является удаленный вызовпроцедуры. Еще одним полезным новшеством явились прикладныепрограммные интерфейсы, существенно повлиявшие на методологию разработки распределенных систем. Прикладной программный интерфейс определяет, как надо обращаться к службе, какие можно ожидать ответы или изменения внутреннего состояния сервера, происходящие в результате обращения к нему. Если сервер имеет хорошо определенный, стабильный прикладной программный интерфейс, для него можно разработать разные виды клиентов и производить модернизацию сервера без какого-либо изменения в клиентах. Двухъярусные системы имеют много преимуществ перед одноярусными. Объединение прикладной логики и управления ресурсами позволяет выполнять важнейшие вычисления очень быстро, поскольку переключения контекста не происходит. Двухъярусные системы гораздо более мобильны: сервер в них отделен от презентационного слоя. Одной из основных проблем двухъярусных систем является ограниченность возможностей сервера по связям со многими клиентами одновременно. Двухъярусные архитектуры не справились с требованиями локальных информационных сетей. С их помощью клиенты могли общаться только со своими серверами, не будучи в силах взаимодействовать с другими. информационная система Трехъярусные архитектурысложнее и разнообразнее архитектур клиент/сервер. Все слои в них четко разделены (Рис. 1.1). Презентационный слой размещается в клиенте, как в двухъярусной архитектуре. Прикладная логика размещается в среднем ярусе и называется слоем системной поддержки или промежуточным слоем программного обеспечения (middleware). Слой управления ресурсами располагается на третьем ярусе и состоит из всех серверов, которые интегрируются в архитектурном решении. С точки зрения подсистемы управления ресурсами программы, работающие в слое прикладной логики, это просто клиенты (Рис. 1.2). Рис.1.1.Втрехъяруснойархитектуремеждупрезентационнымслоемислоем управленияресурсовпредставленпромежуточныйслойсистемнойподдержки (middleware). Хотя трехъярусные архитектуры разрабатывались преимущественно для интеграции, их можно использовать точно так же, как и двухъярусные. Их преимуществом при этом будут возросшие возможности по масштабированию. Каждый слой может работать на отдельной ЭВМ. В частности, прикладной слой может быть распределен по разным компьютерам. Прикладная логика при этом может быть сделана существенно более независимой от управления ресурсами, ее переносимость и переиспользуемость существенно возрастает. один ярус два яруса три яруса Рис.1.2.Интеграциясистемразличнойархитектурысиспользованиемтрехъярусного подхода. Трехъярусные системы дополнили и развили концептуально важные понятия, выдвинутые двухъярусными системами. Стало еще очевиднее, что управление ресурсами должно подчиняться четким интерфейсам, которыми должны пользоваться программы прикладной логики, находящиеся в промежуточном слое. Если двухъярусные архитектуры потребовали определения интерфейсов прикладного слоя, то трехъярусные привели к стандартизации интерфейсов слоя управления ресурсами. Особенно четко преимущества трехъярусной архитектуры проявляются при интеграции разнородных ресурсов. Современное программное обеспечение промежуточных слоев включает в себя функциональность, необходимую для введения в эти слои дополнительных свойств: транзакционных гарантий для различных видов ресурсов, балансировки загрузки оборудования, возможностей по регистрации событий, репликации, сохранности данных и многого другого. Используя системную поддержку, разработчики прикладной логики могут при создании сложнейших моделей взаимодействия пользоваться поддержкой, обеспечиваемой промежуточным слоем, а не программировать все самостоятельно. Потери в производительности компенсируются распространением модели промежуточного слоя на разные сетевые узлы, что существенно влияет на масштабируемость и надежность систем. Ограниченность модели трехъярусных систем проявилась при попытках интегрировать несколько трехъярусных систем, а также при выходе распределенных систем на уровень Интернета, что связано недостаточной стандартизацией этих систем. Многоярусные архитектурыне сильно отличаются от трехъярусных: это обобщение трехъярусной модели с учетом важности доступа к данным через Интернет. Многоярусные архитектуры разрабатываются для двух основных применений: объединение разнородных систем и подключение к Интернету. Отдельные слои многоярусных систем сами представляют собой двух- или трехъярусные системы. Большинство современных систем построено по принципу многоярусности. Их создание потребовало больших усилий по интеграции других систем. В этом проявляется основной недостаток многоярусных систем – в них слишком много промежуточных слоев, часто с избыточной функциональностью, сложных, дорогих в разработке, регулировке и поддержке. Хотя с введением в систему новых ярусов достигается повышение ее гибкости, растет функциональность, но одновременно возрастает стоимость взаимодействия между ярусами, возникают проблемы с производительностью системы. |