В.В. Кулямин - Технологии программирования. Компонентный подход (1133554), страница 60
Текст из файла (страница 60)
Чтобы хоть как-то структурировать эти проблемы, их разделяют по следующимаспектам [3].• Связь.Организация связи и передачи данных между элементами системы.В связи с этим аспектом возникают следующие задачи.o Какие протоколы использовать для передачи данных.o Как реализовать обращения к процедурам и методам объектов одних процессов издругих.o Какой способ передачи данных выбрать — синхронный или асинхронный. В первомслучае сторона, инициировавшая передачу, приостанавливает свою работу до приходаответа другой стороны на переданное сообщение.
Во втором случае первая сторонаимеет возможность продолжить работу, пока данные передаются и обрабатываютсядругой стороной.o Нужно ли, и если нужно, то как, организовать хранение (асинхронных) сообщений в товремя, когда и отправитель и получатель сообщения могут быть неактивны.o Как организовать передачу непрерывных потоков данных, представляющих собойаудио-, видеоданные или смешанные потоки данных.
Этот вопрос имеет большоезначение, поскольку заметные человеку прерывания в передаче таких данных приводятк значительному падению качества предоставляемых услуг.216••••••Именование.Поддержка идентификации и поиска отдельных ресурсов внутри системы.o По каким правилам присваивать имена и идентификаторы различным ресурсам.o Как организовать поиск ресурсов в системе по идентификаторам и атрибутам,описывающим какие-нибудь свойства ресурсов.o Как размещать и находить мобильные ресурсы, изменяющие свое физическоеположение в ходе работы.o Как организовывать и поддерживать в рабочем состоянии сложные ссылочныеструктуры, необходимые для описания имеющихся в распределенной системе ресурсов.Как, например, находить и удалять ресурсы, ставшие никому не доступными.Процессы.Организация работ в рамках процессов и потоков.o Как разделить работы в системе по отдельным процессам и машинам.o Нужно ли определять различные ролей процессов в системе, например, клиентские исерверные, и как организовывать их работу.o Как организовать работу исполняемых агентов — процессов, способных перемещатьсямежду машинами и выполнять свои задачи в любой подходящей среде.Синхронизация.Синхронизация параллельно выполняемых потоков работ.o Как синхронизовать действия отдельных процессов и потоков, работающих в системе,для получения нужных результатов.o Как организовать работу многих процессов на разных машинах в том случае, если всистеме нельзя непротиворечиво определить глобальное время.o Как организовать выполнение транзакций — таких наборов действий, которые надолибо все выполнить, либо не выполнить ни одного из них.Целостность.Поддержка целостности данных и непротиворечивости вносимых изменений.o Каким образом можно обеспечивать целостность данных.o Какие модели непротиворечивости нужно поддерживать.
Модель непротиворечивостиопределяет, на основе каких требований формируются результаты выполняемыходновременно изменений и что доступно клиентам, выполнявшим эти изменения.o Какие протоколы обеспечения непротиворечивости, создания и записи транзакций,создания и согласования реплик и кэшей использовать для выполнения требований этихмоделей.Отказоустойчивость.Организация отказоустойчивой работы.o Как организовать отказоустойчивую работу одного процесса.o Как обеспечить надежную связь между элементами системы.o Какие протоколы использовать для реализации надежной двусторонней связи илинадежных групповых рассылок.o Какие протоколы использовать для записи промежуточных состояний и восстановленияданных и работы системы после сбоев.Защита.Организация защищенности данных и коммуникаций.o Как организовать защиту системы в целом.При этом большее значение, чем технические аспекты, имеют организационные ипсихологические факторы — проблемы определения процедур проведения работ,217обеспечивающих нужный уровень защищенности, и проблемы соблюдения людьмиэтих процедур.o Как организовать защиту данных от несанкционированного доступа.o Как обеспечить защиту каналов связи от двух видов атак — воспрепятствоватьнесанкционированному доступу к передаваемой информации и не дать подменитьинформацию в канале.o Какие протоколы аутентификации пользователей, подтверждения идентичности иавторства использовать.Из перечисленных тем отдельного рассмотрения заслуживают вопросы организации передачисообщений и транзакций, тем более что все рассматриваемые далее технологии используют этимеханизмы.
Более того, практически любая распределенная система сейчас строится на основепрограммного обеспечения промежуточного уровня (middleware, это программное обеспечение,которое предназначено для облегчения интеграции ПО, размещенного на нескольких машинах, вединую распределенную систему и поддержки работы такой системы), содержащего ту или инуюих реализацию.Синхронное и асинхронное взаимодействиеПри описании взаимодействия между элементами программных систем инициаторвзаимодействия, т.е. компонент, посылающий запрос на обработку, обычно называется клиентом,а отвечающий компонент, тот, что обрабатывает запрос — сервером.
«Клиент» и «сервер» в этомконтексте обозначают роли в рамках данного взаимодействия. В большинстве случаев один и тотже компонент может выступать в разных ролях — то клиента, то сервера — в различныхвзаимодействиях. Лишь в небольшом классе систем роли клиента и сервера закрепляются закомпонентами на все время их существования.Синхронным (synchronous) называется такое взаимодействие между компонентами, прикотором клиент, отослав запрос, блокируется и может продолжать работу только после полученияответа от сервера.
По этой причине такой вид взаимодействия называют иногда блокирующим(blocking).Обычное обращение к функции или методу объекта с помощью передачи управления по стекувызовов является примером синхронного взаимодействия.КлиентСерверПотокивыполнениязапросБлокировкав ожиданииответаответРисунок 66. Синхронное взаимодействие.Синхронное взаимодействие достаточно просто организовать, и оно гораздо проще дляпонимания.
Человеческое сознание обладает единственным «потоком управления»,представленным в виде фокуса внимания, и поэтому человеку проще понимать процессы, которыеразворачиваются последовательно, поскольку не нужно постоянно переключать внимание напроисходящие одновременно различные события. Код программы клиентского компонента,описывающей синхронное взаимодействие, устроен проще — его часть, отвечающая за обработкуответа сервера, находится непосредственно после части, в которой формируется запрос. В силу218своей простоты синхронные взаимодействия в большинстве систем используются гораздо чащеасинхронных.Вместе с тем синхронное взаимодействие ведет к значительным затратам времени на ожиданиеответа. Это время часто можно использовать более полезным образом: ожидая ответа на одинзапрос, клиент мог бы заняться другой работой, выполнить другие запросы, которые не зависят отеще не пришедшего результата.
Поскольку все распределенные системы состоят из достаточнобольшого числа уровней, через которые проходят практически все взаимодействия, суммарноепадение производительности, связанное с синхронностью взаимодействий, оказывается оченьбольшим.Наиболее распространенным и исторически первым достаточно универсальным способомреализации синхронного взаимодействия в распределенных системах является удаленный вызовпроцедур (Remote Procedure Call, RPC, вообще-то, по смыслу правильнее было бы сказать«дистанционный вызов процедур», но по историческим причинам закрепилась имеющаясятерминология). Его модификация для объектно-ориентированной среды называется удаленнымвызовом методов (Remote Method Invocation, RMI). Удаленный вызов процедур определяет какспособ организации взаимодействия между компонентами, так и методику разработки этихкомпонентов.На первом шаге разработки определяется интерфейс процедур, которые будут использоватьсядля удаленного вызова.
Это делается при помощи языка определения интерфейсов (InterfaceDefinition Language, IDL), в качестве которого может выступать специализированный язык илиобычный язык программирования, с ограничениями, определяющимися возможностью передачивызовов на удаленную машину.Определение процедуры для удаленных вызовов компилируется компилятором IDL в описаниеэтой процедуры на языках программирования, на которых будут разрабатываться клиент и сервер(например, заголовочные файлы на C/C++), и два дополнительных компонента — клиентскую исерверную заглушки (client stub и server stub).Клиентская заглушка представляет собой компонент, размещаемый на той же машине, гденаходится компонент-клиент. Удаленный вызов процедуры клиентом реализуется как обычный,локальный вызов определенной функции в клиентской заглушке.