Известно, что хорошо построенная структура распределенной системы должна представлять собой некоторое эффективное решение, обеспечивающее надежное функционирование, хорошую управляемость и гибкость. Среди существующих архитектур, используемых для построения распределенных систем и получивших наибольшее признание, следует выделить клиент-серверную архитектуру и архитектуру распределенных объектов [1, 2]. В клиент-серверной модели система рассматривается как набор сервисов, предоставляемых серверами клиентам. В таких системах серверы и клиенты значительно отличаются друг от друга. В случае модели распределенных объектов между поставщиками услуг (серверами) и их пользователями (клиентами) не существует заметных различий и система рассматривается как набор взаимодействующих объектов, местоположение которых не имеет особого значения. Именно поэтому автором данной работы предпочтение отдается последней модели – архитектуре распределенных объектов.
Реализацию выбранной архитектуры распределенной модели предлагается осуществлять на основе применения следующих базовых принципов:
- использование автоматного подхода;
- отделение внешних связей с компонентой от внутренних связей с ее составными частями;
- разделение компоненты (узла) распределенной системы на взаимодействующие части – функциональную и представительскую.
Автоматный подход. Для представления структурных элементов распределенной модели используем автоматный подход. Суть его в том, что каждая компонента распределенной системы представляется в виде функционального блока (черного ящика) с соответствующим набором входов и выходов (рис. 1).
Отделение внешних связей от внутренних. Наличие компонент с наборами входных и выходных сигналов позволяет легко строить из них системы самой разнообразной конфигурации. Однако при этом важно различать две ситуации. Первая: распределенная система строится из некоторого набора компонент, расположенных на одном иерархическом уровне (одноуровневая система). В этом случае все компоненты являются равноправными, а добавление новых компонент или удаление существующих позволяет развивать системы только по горизонтали (то есть в пределах одного уровня). Такие связи между компонентами, расположенными на одном иерархическом уровне, получили название горизонтальных связей. Вторая ситуация: какая-либо компонента состоит из нескольких других компонент. Такую компоненту будем называть владеющей, а компоненты, которыми она владеет, – подчиненными. Связи между владеющей и подчиненными компонентами позволяют организовать взаимодействие между компонентами, расположенными на разных иерархических уровнях, и получили название вертикальных связей. Учитывая необходимость реализации в распределенных системах как горизонтальных, так и вертикальных связей, предлагается все связи, имеющиеся в распоряжении компоненты, разделить на два подмножества:
- внешние связи компоненты – связи между компонентами, расположенными на одном иерархическом уровне и не состоящими в отношении подчиненности друг к другу;
- внутренние связи компоненты – связи между владеющей и подчиненными компонентами, расположенными на более низком иерархическом уровне и состоящими в отношении подчиненности к владеющей компоненте.
Соответствующая структура связей, предлагаемая к использованию в компонентах для построения распределенных систем, представлена на рисунке 2. Отделение внешних связей от внутренних облегчает построение иерархических структур распределенных систем различной сложности и позволяет развивать их как по горизонтали, так и по вертикали.
Разделение компоненты на представительскую и функциональную части. Поскольку распределенная система представляет собой совокупность взаимодействующих между собой компонент, ее размер сильно зависит от размера каждой из них. Для ослабления этой зависимости каждую из компонент в распределенной системе предлагается разделить на две связанные между собой части – функциональную и представительскую. Функциональная часть (или функциональный модуль) предназначена для реализации функциональных возможностей компоненты, а ее представительская часть – для предоставления внешнему окружению информации о состоянии функциональной части компоненты и средств, с помощью которых внешнее окружение компоненты может взаимодействовать с ее функциональной частью.
Другими словами, разделение каждой компоненты распределенной системы на две части позволяет физически отделить функциональную часть компоненты от места ее непосредственного использования и взаимодействовать с ней только через ее представительскую часть (рис. 3).
Такой подход дает возможность размещать функциональные части (модули) компонент распределенной модели в разных адресных пространствах и даже на разных компьютерах. Это поз- воляет в распределенной системе вместо функциональных модулей подчиненных компонент использовать только их представительские части. При этом значительные по объему функциональные модули компонент можно размещать в других местах, в том числе и на других компьютерах.
Наличие у владеющего функционального модуля распределенной компоненты внутренних связей с представителями подчиненных компонент позволяет реализовать те же возможности, что и при работе с замещаемыми ими функциональными модулями. Этот эффект можно рассматривать как реализацию принципа инкапсуляции в той ее части, которая касается отделения и сокрытия внутренней реализации функционального модуля компоненты и ограничения доступа к нему со стороны внешнего окружения, которое возможно только со стороны ее представительской части. Такой подход позволяет реализовать функциональную часть каждой компоненты распределенной системы в виде отдельного объекта, автономно функционирующего в собственном адресном пространстве, например, в виде самостоятельного приложения. При этом в состав функционального модуля владеющей компоненты вместо функциональных модулей подчиненных компонент будут входить только их полномочные представители.
Реализацию внутренних связей предлагается осуществлять, используя механизмы удаленного доступа и/или механизмы обмена сообщениями и их обработки, основанные на активном использовании таких понятий, как события и делегаты. Для этого представители подчиненных компонент подписываются (обязуются) соответствующим образом реагировать на все сообщения, посылаемые для них модулем владеющей компоненты (на рис. 3 – сигналы управления модулем). В свою очередь, и модуль владеющей компоненты подписывается реагировать на все сообщения, отсылаемые ему подчиненными компонентами (на рис. 3 – ответные реакции модуля). Такое решение позволит обеспечить достаточно эффективное и надежное взаимодействие между владеющими и подчиненными компонентами распределенной модели.
Рассмотренный компонентный подход к построению распределенных систем был использован на кафедре ЭВМ Тверского государственного технического университета для построения распределенных дискретно-событийных имитационных моделей устройств цифровой автоматики и вычислительной техники на основе применения математического аппарата теории сетей Петри [3]. Полученные результаты полностью подтвердили эффективность предложенного подхода и перспективность его применения при построении распределенных имитационных моделей.
Литература
1. Таненбаум Э., ван Стеен М. Распределенные системы. Принципы и парадигмы. СПб: Питер, 2003.
2. Александров А.А. Распределенное имитационное моделирование: технологии, методы, средства // Вестн. НГУ: Сер. Информационные технологии. Вып. 3. Т. 7. 2009.
3. Веселов А.А. Моделирование устройств цифровой электронной техники D-расширением сетей Петри: монография. Тверь: ТГТУ, 2006.