Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 35
Текст из файла (страница 35)
Именно поэтому у получателя нет необходимости быть активным в то время, когда сообщение пересылается в его очередь. Точно так же нет нужды и в активности отправителя во время обработки сообщения получателем. Отправитель и получательмогут выполняться абсолютно независимо друг от друга. На самом деле, как только сообщение поставлено в очередь, оно будет оставаться в ней до удаления,независимо от того, активен его отправитель или его получатель.
Это, в зависимости от состояния отправителя и получателя, дает нам четыре комбинации, показанные на рис. 2.23.2.4. Связь посредством сообщенийОтправительактивенОтправительактивенОтправительпассивенОтправительпассивенПолучательактивенПолучательпассивенПолучательпассивен137IПолучательактивенРис. 2.23. Четыре комбинации слабосвязанных взаимодействийс использованием очередейНа рис. 2.23, а как отправитель, так и получатель в ходе всего процесса передачи сообщения находятся в активном состоянии.
На рис. 2.23, б активен толькоотправитель, в то время как получатель отключен, то есть находится в состоянии, исключающем возможность доставки сообщения. Тем не менее отправительвсе же в состоянии отправлять сообщения. Комбинация из активного получателя и пассивного отправителя приведена на рис. 2.23, в. В этом случае получательможет прочитать сообщения, которые были посланы ему ранее, наличия работающих отправителей этих сообщегпп! при этом совершенно не требуется.
И наконец, на рис. 2.23, г мы наблюдаем такую ситуацию, когда система сохраняет и, возможно, передает сообщения, даже при неработающих отправителе и получателе.Сообщения в принципе могут содержать любые данные. Единственно важный момент — они должны быть правильно адресованы.
На практике адресацияосуществляется путем предоставления уникального в пределах системы имениочереди, в которую направляется письмо. В некоторых случаях размер сообщений может быть ограничен, несмотря на то, что, возможно, базовая система в состоянии разбивать большие сообщения на части и собирать их обратно в единоецелое абсолютно прозрачно для приложений. Эффект подобного подхода —ВТОМ, что базовый интерфейс, предоставляемый приложениям, в результатеможно сделать потрясающе простым. Это иллюстрирует табл. 2.3.Таблица 2 .
3 . Базовый интерфейс очереди в системе очередей сообщенийПримитивНазначениеPutДобавить сообщение в соответствующую очередьGetПриостановить работу до тех пор, пока в соответствующей очередине появятся сообщения, затем извлечь первое сообщениепродолжение^138Глава 2. СвязьТаблица 2.3 (продолжение)ПримитивНазначениеPol 1Проверить наличие сообщений в соответствующей очереди, затем извлечьпервое из них. Ничего не блокироватьNoti fyВставить дескриптор функции, которая будет вызвана при помещениисообщения в соответствующую очередьПримитив put вызывается отправителем для передачи сообщения базовойсистеме, где оно будет помеи^ено в соответствующую очередь.
Как мы объясняли,это неблокирующий вызов. Примитив get — это блокирующий вызов, посредством которого авторизованный процесс может извлечь самое старое сообщение изопределенной очереди. Процесс блокируется только в том случае, если очередьпуста. Варианты этого вызова включают в себя поиск в очереди определенногосообщения, например, с использованием приоритетов или образца для сравнения.
Неблокирующий вариант представлен примитивом poll. Если очередь пуста или искомое сообщение не найдено, вызвавший этот примитив процесс продолжает свою работу.И, наконец, большинство систем очередей сообщений поддерживают такжепроцесс вставки дескриптора функции обрат?1ого вызова (callback function), которая автоматически вызывается при попадании сообщения в очередь. Обратныевызовы могут быть также использованы для автоматического запуска процесса,который будет забирать сообщения из очереди, если ни один процесс в настоящее время не запущен. Подобное поведение обычно реализуется при помощи демона на стороне получателя, который постоянно проверяет очередь на наличиевходящих сообщений и поступает в соответствии с результатами проверки.Общая архитектура системы очередей сообщенийДавайте теперь рассмотрим поближе, как выглядит обобщенная система очередей сообщений.
Одно из первых ограничений, которые мы сделаем, будет состоять в том, что сообщения могут быть помещены только в локальные очередиотправР1теля, то есть в очереди, находящиеся на той же самой машине или, вовсяком случае, не дальше, чем на соседней, то есть машине, входящей в ту же локальную сеть. Подобная очередь называется исходящей очередью (source queue).Аналогично, прочитаные сообщения могут быть только из локальных очередей.Сообщение, помещенное в очередь, содержит описание очереди пазпачепия (destination queue), в которую оно должно быть перемещено. В обязанности системыочередей сообщений входит предоставление очередей отправрттелям и получателям и обеспечение перемещения сообщений из исходящих очередей в очерединазначения.Важно понимать, что набор очередей разнесен по множеству машин.
Соответственно, для того чтобы система очередей сообщений могла перемещать сооби1ения,она должна поддерживать отображение очередей на сетевые адреса. На практикеэто означает, что она должна поддерживать базу данных (возможно, распределенную) имен очередей (queue names) в соответствии с их сетевым местоположением, как показано на рис. 2.24. Отметим, что это отображение полностью анало-2.4. Связь посредством сообщений139гично использованию системы доменных имен (DNS) для электронной почтыИнтернета.
Так, например, для отсылки почты на логический почтовый адресsteen@cs.vu.nl почтовая система запрашивает у DNS сетевой адрес (то есть IPадрес) почтового сервера получателя, чтобы затем использовать его для передачи сообщений.Поиск адресаочередина транспортномуровнеАдрес на уровнеочередиNБаза данныхпоиска адресовСетьАдрес на транспортномуровнеРис. 2.24. Отношение между адресацией на уровне очередей и на сетевом уровнеОчереди управляются менеджерами очередей (queue managers). Обычно менеджер очередей взаимодействует непосредственно с отправляющими и принимающими сообщения приложениями. Существуют, однако, и специализированныеменеджеры очередей, которые работают как маршрутизаторы, или ретрансляторы: они перенаправляют приходящие сообщения другим менеджерам очередей.Таким образом, система очередей сообщений может постепенно вырасти до законченной оверлейной сети {overlay netxQ)ork) прикладного уровня поверх существующей компьютерной сети.
Этот подход схож с ранней конструкцией системыМВопе поверх Интернета, в которой обычные пользовательские процессы конфигурировались для маршрутизации групповых рассылок. В наши дни многиемаршрутизаторы сами поддерживают групповые рассылки и необходимость воверлейных групповых рассылках сильно сократилась.Ретрансляторы могут быть удобны по нескольким причинам. Так, во многихсистемах очередей сообщений не существует общих служб именования, которыемогли бы динамически поддерживать отображение имен на адреса.
Вместо этоготопология сети с очередями сделана статической, а каждый менеджер очередейимеет копию отображения очередей на адреса. Нельзя не сказать, что в крупномасштабных системах очередей сообщений подобный подход легко может привести к трудностям в управлении сетью.Одним из решений этой проблемы является использование нескольких маршрутизаторов, имеющих информацию о топологии сети. Когда отправитель Л помещает в локальную очередь сообщение для получателя В, это сообщение первымделом передается на ближайший маршрутизатор R1, как показано на рис.
2.25.При этом маршрутизатор знает, что делать с этим сообщением, и передает егов направлении В. Так, R1 может понять по имени 5, что сообщение следует передать на маршрутизатор R2. Таким образом, при добавлении или удалении очере-140Глава 2. Связьдей обновление информации потребуется только маршрутизаторам, в то времякак остальным менеджерам очередей достаточно будет знать только местоположение ближайшего маршрутизатора.Отправитель АМаршрутизаторРис. 2.25. Обобщенная организация систем очередей сообщений с маршрутизаторамиСледовательно, маршрутизаторы могут помочь в создании масштабируемыхсистем очередей сообщений. Однако по мере роста сети очередей сообщенийстановится ясно, что ручное конфигурирование этой сети скоро станет невозможным.
Единственным решением будет использование динамической схемымаршрутизации, такой же как в компьютерных сетях. В этом отношении легкоеудивление вызывает тот факт, что подобные решения до сих пор не встроеныв какие-нибудь популярные системы очередей сообщений.Другой причиной использования ретрансляторов является их способностьпроизводить вторичную обработку сообщений. Так, например, в целях безопасности или защиты от сбоев может быть необходимо ведение журнала сообщений. Специальный тип ретрансляторов, о котором мы поговорим в следующемпункте, в состоянии работать как шлюз, преобразуя сообщения в удобный дляполучателя вид.И, наконец, ретрансляторы могут использоваться для групповой рассылки.В этом случае входящее сообщение просто помещается в каждую из исходящихочередей.Брокеры сообщенийВажнейшей областью применения систем очередей сообщений является интеграция существующих и новых приложений в единые согласованные распределенные информационные системы.