Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Inf_comp_sys

.pdf
Скачиваний:
8
Добавлен:
21.03.2016
Размер:
3.33 Mб
Скачать

в качестве идентификатора корреляции. После этого ответ передается инициатору запроса. Инициатор извлекает из ответа идентификатор корреляции и определяет, к какому запросу он относится. Описанное решение получило название идентификатор корреляции, потому что вызывающее приложение коррелирует каждый ответ с запросом, к которому тот относится.

16.4.7 Цепочка сообщений

При передаче приложением большого объема данных использование одного сообщения не подойдет, так как размер данных, передаваемых в сообщении, ограничен. На практике объем данных, который можно поместить в одно сообщение, ограничен. В одних системах обмена сообщениями такое ограничение абсолютно. В других сообщениям позволяется достигать сравнительно больших размеров, но большие сообщения все равно снижают производительность, Даже если система обмена сообщениями допускает передачу сообщений очень большого размера, поставщик или потребитель сообщений может ввести собственные ограничения относительно того, какой объем данных они способны обработать за один раз. Например, многие системы на основе СОВОL или мэйнфреймов поставляют или потребляют данные только порциями по 32 Кбайт.

Избежать передачи больших сообщений можно путем настройки приложения таким образом, чтобы ему никогда не пришлось передавать больше данных, чем может уместиться в одном сообщении. Однако, такое ограничение может помешать приложению предоставлять желаемую функциональность. Если большой объем данных появляется в результате выполнения запроса, вызывающее приложение может создать несколько запросов, по одному на каждую порцию результирующих данных, но это приведет к возрастанию сетевого трафика. Кроме того, указанный подход предполагает, что вызывающее приложение заранее знает количество порций результирующих данных. Получатель может прослушивать канал ответов в ожидании порций данных, пока те не перестанут поступать, а затем попытается воссоздать на их основе исходную, большую структуру данных, но это чревато многочисленными ошибками.

Если из-за ограничения на максимально допустимый размер сообщений большой объем данных приходится разбивать на несколько порций, то данные можно отправлять в виде цепочки сообщений, снабдив каждое сообщение из цепочки несколькими идентификаторами (Диаграмма 31).

151

 

Цепочка 1

Цепочка 1

 

Цепочка 1

Цепочка №1

Позиция 1

Позиция 2

 

Позиция n

Длина n

Длина n

Длина n

 

 

Тело сообщения

Тело сообщения

 

Тело сообщения

 

 

Диаграмма 31

Каждое сообщение, входящее в цепочку сообщений, помечается тремя идентификаторами.

Идентификатор цепочки. Идентифицирует пакет сообщений, в составе которого отправляется данное сообщение.

Идентификатор позиции. Задает порядок расположения каждого сообщения в цепочке сообщений.

Индикатор длины или конца. Показывает, сколько всего сообщений входят в пакет, или отмечает последнее сообщение в пакете. В последнем случае длина цепочки равняется значению идентификатора позиции такого сообщения.

Обычно цепочки сообщений конструируют таким образом, чтобы в каждом сообщении содержалась информация относительно того, сколько всего сообщений входит в цепочку. Вместо этого можно указывать, является ли текущее сообщение последним в цепочке, присваивая индикатору конца значение TRUE или FALSE (Диаграмма 32).

 

Цепочка 7

Цепочка 7

 

Цепочка 7

Последова

Позиция 0

Позиция 1

 

Позиция n-1

Конец F

Конец F

Конец T

тельность

 

 

 

 

 

 

 

 

№7

Тело сообщения

Тело сообщения

 

Тело сообщения

Диаграмма 33

Если необходимо передать набор данных в виде пакета из трех сообщений, то идентификатор цепочки такого пакета сообщений будет выражаться некоторым уникальным значением. Идентификаторы позиций для каждого сообщения будут разными: 1, 2 или. Если отправитель с начала знает общее число сообщений цепочки, тогда индикатор длины для каждого сообщения будет равен 3. Если же отправитель не знает, сколько всего сообщений будет в цепочке, и отсылает сообщения, пока не закончатся данные, то индикатор конца для каждого сообщения, за исключением последнего, будет равняться FALSE. Когда отправитель поймет, что следующее сообщение станет

152

последним в цепочке, он присвоит индикатору конца этого сообщения значение TRUE. И в том, и в другом случае у получателя будет достаточно информации, чтобы правильно собрать фрагменты данных в единое целое, даже если эти фрагменты поступают в произвольном порядке.

16.4.8 Срок действия сообщений

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

Часто содержимое сообщения имеет ограниченный срок действия, по истечении которого оно теряет свою актуальность. Если отправитель отослал сообщение и долго не получает ответ, он никак не может отменить вызов или повторить его еще раз, не рискуя при этом получить ответы на оба вызова. Точно так получатель может проверять время отправки каждого сообщения и отклонять сообщения, которые были отосланы слишком давно, но у каждого отправителя может быть свой временной интервал актуальности. Для определения этого временного интервала необходимо задавать «время жизни» сообщения.

Если время, на протяжении которого сообщение сохраняет свою актуальность, уже истекло, а сообщение так и не было потреблено, значит оно устарело (Диаграмма 34). Потребители системы обмена сообщениями будут игнорировать это сообщение.

Срок действия

 

Время доставки истекло

 

сообщения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отправитель

Сообщение Канал

Получатель

Перенаправить доставку

Устаревшее

Канал

сообщение

недоставленных

 

сообщений

Диаграмма 34 Срок действия сообщения представляет собой метку времени, которая

указывает, как долго после отправки сообщения будет годным, либо момент

153

времени, в который оно станет устаревшим. Данный параметр может быть абсолютным или относительным. Абсолютный срок действия задает дату и время, по истечении которых сообщение потеряет смысл. Относительный срок действия указывает, в течение какого времени после отправки сообщение будет считаться годным. Для преобразования относительного срока действия в абсолютный системе обмена сообщениями достаточно воспользоваться датой и временем отправки сообщения. Кроме того, система обмена сообщениями должна автоматически настраивать метку времени для получателей, находящихся в других часовых поясах, учитывая переход на летнее времени выполнять любые другие действия по согласованию системных часов отправителя и получателя.

Когда сообщение устаревает, система обмена сообщениями может его уничтожить или перенаправить в канал недоставленных сообщений. Получатель, который не смог вовремя обработать принятое им сообщение, должен направить его в канал недопустимых сообщений. Если сообщение размещается в канале «публикация-подписка», то каждый подписчик получает собственную копию сообщения. Некоторые копии могут успешно дойти до получателей, а некоторые – устареть еще до их потребления. В схеме «запросответ» задавать сроки действия надо с осторожностью. Если сообщение с ответом устареет, отправитель запроса никогда не узнает, был ли получен запрос. По этой причине, если для ответа указывается срок действия, в отправитель запроса следует встроить специальный обработчик ситуации, когда ожидаемый ответ не придет.

16.4.9 Идентификатор формата

При обмене сообщениями приложения используют некоторый согласованный формат данных. Однако этот формат может меняться. В интеграционном решении может появиться еще несколько приложений, у которых будут свои требования к формату данных; в сообщения может понадобиться включать новые данные; или же разработчики могут отыскать более удачный способ структурирования те же данных. Разработка единой корпоративной модели данных – весьма сложное занятие, но создать модель, которая многие годы сможет удовлетворять нужды компании без изменений, практически невозможно.

Изменение корпоративного формата данных – не проблема, если все приложения меняются вместе с ним. Если все приложения одновременно прекратят использовать старый формат и перейдут на новый, то они продолжат взаимодействовать друг с другом в нормальном режиме. Однако на практике одни приложения переводятся на новый формат раньше, другие позже, также вполне возможно, что в каналах останутся сообщения в старом формате.

Обычно приложениям приходится одновременно поддерживать и старый и новый форматы данных. Для этого приложениям необходимо различать какие сообщения находятся в старом, а какие в новом формате.

Одно из возможных решений этой проблемы – использовать отдельный канал для сообщений в новом формате. Но это приведет к появлению

154

огромного количества каналов, дублированию многих компонентов, а также сложностью настройки, так как каждое приложение придется под постоянно растущий набор каналов.

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

Используя индикатор формата, отправитель может уведомить получателя о формате отсылаемого сообщения. Благодаря этому получатель узнает, в каком из нескольких возможных форматов создано текущее сообщение, и поймет, как его интерпретировать.

16.5Маршрутизация сообщений

16.5.1 Простые маршрутизаторы

Маршрутизатор на основе содержимого перенаправляет сообщение в тот или иной исходящий канал в результате анализа его содержимого. Таким образом, приложение, сгенерировавшее сообщение, помещает его в канал, а доставку сообщения выполняет маршрутизатор на основе содержимого.

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

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

Маршрутизатор сообщений использует фиксированный набор правил для определения точки назначения входящего сообщения. Динамический маршрутизатор позволяет изменять логику маршрутизации с помощью управляющих сообщений, отправляемых с использованием специального порта.

Некоторые сообщения содержат набор элементов. Чтобы обработать каждый элемент отдельно, следует разбить сообщение на несколько более

155

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

Для воссоздания сообщения, разделенного на несколько отдельных частей с помощью разветвителя, используется агрегатор. Агрегатор принимает поток сообщений, идентифицирует части составного сообщения и объединяет их в одно сообщение. В отличие от других шаблонов маршрутизации агрегатор представляет собой маршрутизатор сообщений с сохранением состояния, поскольку ему приходится хранить сообщения до выполнения определенного условия. Таким образом, прежде чем опубликовать исходящее сообщение, агрегатор накапливает несколько входящих сообщений.

Так как технология обмена сообщениями предназначена для объединения приложений или компонентов, выполняющихся на нескольких различных компьютерах, сообщения могут обрабатываться параллельно. Например, несколько процессов могут извлекать сообщения из одного и того же канала. Скорость выполнения процессов неодинакова, что приводит к нарушению порядка обработки сообщений. Для восстановления исходного порядка применяется преобразователь порядка - маршрутизатор сообщений с сохранением состояния, накапливающий сообщения до момента образования ими корректной последовательности. В отличие от агрегатора, количество сообщений, опубликованных преобразователем порядка, совпадает с количеством полученных им сообщений.

16.5.2 Составные маршрутизаторы

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

Шаблоны обработчик составного сообщения и рассылка-сборка предусматривают маршрутизацию сообщения одновременно нескольким получателям и сборку ответных сообщений. Эти шаблоны реализуют параллельную маршрутизацию сообщения. Последовательная маршрутизация сообщения (прохождение сообщения через несколько последовательных этапов обработки) обеспечивается шаблонами проектирования карта маршрутизации и диспетчер процессов. Карта маршрутизации позволяет явно задать этапы обработки сообщения. Диспетчер процессов обеспечивает большую гибкость, однако он требует пересылки сообщения центральному компоненту после каждого этапа обработки.

16.5.3 Архитектурные шаблоны

Маршрутизаторы сообщений позволяют создавать интеграционные решения, основанные на использовании центрального брокера сообщений. Шаблон брокер сообщений описывает архитектурный стиль звезда.

156

16.5.4 Маршрутизатор на основе содержимого

Маршрутизатор на основе содержимого анализирует сообщение и помещает его в тот или иной канал в зависимости от содержащихся в сообщении данных (Диаграмма 35). Маршрутизация может осуществляться на основе всевозможных критериев, таких как существование полей, наличие определенных значений полей и т.д. Поскольку маршрутизатор может быть подвержен частой отладке, функцию маршрутизации следует максимально упростить. В более сложных интеграционных сценариях маршрутизатор на основе содержимого может определять исходящий канал на основе набора изменяемых правил.

Канал А

Новый заказ

Маршрутизатор

Канал Б

 

Диаграмма 35

Маршрутизатор на основе содержимого - одна из наиболее распространенных форм маршрутизатора сообщений. Маршрутизатор на основе содержимого реализует предиктивную маршрутизацию. Т.е. он обладает сведениями о возможностях всех остальных систем. Благодаря этому каждое входящее сообщение направляется на обработку непосредственно в требуемую систему, что позволяет говорить об эффективности маршрутизации. Недостаток маршрутизатора на основе содержимого заключается в том, что он вынужден поддерживать информацию обо всех известных получателях. Добавление, удаление или изменение получателя приводит к необходимости внесения изменений в маршрутизатор на основе содержимого. Это затрудняет поддержку интеграционного решения.

Зависимости маршрутизатора на основе содержимого от получателей можно избежать, предоставив последним возможность контроля за процессом маршрутизации. Подобный подход называется реактивной фильтрацией, поскольку он позволяет каждому участнику отфильтровывать нужные ему сообщения. Распределенное управление процессом маршрутизации устраняет необходимость в наличии маршрутизатора на основе содержимого.

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

157

16.5.5 Фильтр сообщений

Фильтр сообщений - это маршрутизатор сообщений с одним исходящим каналом. Если содержимое входящего сообщения соответствует критерию, заданному фильтром сообщений, сообщение направляется в исходящий канал. В противном случае оно отбрасывается (Диаграмма 36).

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заказ 1 Заказ 2 Заказ 3

 

 

 

Заказ 1 Заказ 3

 

 

 

 

 

 

Фильтр

сообщений

Диаграмма 36

16.5.6 Динамический маршрутизатор

Маршрутизатор сообщений отличается высокой эффективностью, потому что может направить сообщение сразу в требуемый пункт назначения. Другие решения, касающиеся маршрутизации сообщений (особенно с использованием реактивной фильтрации), менее эффективны, поскольку в своей работе руководствуются методом проб и ошибок. К примеру, карта маршрутизации направляет каждое сообщение в первый попавшийся пункт назначения. Если он оказывается тем, что нужно, он принимает сообщение; в противном случае оно направляется в следующий пункт назначения, и т.п. Фильтр сообщений также рассылает сообщения всем возможным получателям вне зависимости от того, заинтересованы они в получении этих сообщений или нет.

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

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

158

Помимо обычных входящих и исходящих каналов, динамический маршрутизатор использует дополнительный управляющий канал, Во время запуска системы каждый потенциальный получатель отправляет динамическому маршрутизатору по этому каналу специальное сообщение, в котором объявляет о своем присутствии и перечисляет условия, при которых может обрабатывать сообщения. Динамический маршрутизатор сохраняет настройки каждого получателя в базе правил. При поступлении нового сообщения динамический маршрутизатор просматривает базу правил и отправляет сообщение тому получателю, правила которого оно удовлетворяет. Это позволяет эффективно реализовать предиктивную маршрутизацию без необходимости ставить динамический маршрутизатор в зависимость от каждого потенциального получателя (Диаграмма 37).

Входящий канал

Диаграмма 37

Динамический

маршрутизатор

Маршрутизатор

сообщений

Динамический

список правил

Исходящий канал

А

Исходящий канал

Б

Исходящий канал

В

Управляющий канал

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

Динамические маршрутизаторы часто используют в сервисориентированных архитектурах. Если клиентскому приложению нужен доступ к некоторой службе, оно отправляет динамическому маршрутизатору сообщение с именем этой службы. Маршрутизатор, в свою очередь, ведет

159

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

16.5.7 Список получателей

Маршрутизатор на основе содержимого позволяет направить сообщение в требуемый пункт назначения, основываясь на содержимом этого сообщения. Такая маршрутизация происходит "прозрачно" для исходного отправителя в том смысле, что он просто отсылает сообщение в канал, а обо всем остальном заботится маршрутизатор.

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

Канал получателя

А

Б

В Список получателей

Г

Диаграмма 38

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

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

160

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]