div.main {margin-left: 20pt; margin-right: 20pt}
Microsoft Message Queue
Server
Сокол вылетел из гнезда
Microsoft Message Queue
Server 1.0 (MSMQ) — это новый продукт Microsoft, сервер очередей,
известный под кодовым названием Falcon («сокол»). В момент написания этой
статьи он существует в виде версии Beta 3. Сервер очередей предназначен
для обслуживания распределенных систем и обеспечения асинхронной связи между
элементами подобных систем.
Договоримся о терминах
Сообщение — это блок
информации, передаваемой от одного компьютера к другому. Это вовсе не
обязательно сообщение электронной почты.
Связь между участниками называется
синхронной, когда отправитель должен ожидать ответа от адресату, прежде
чем продолжить выполнение работы. Примером синхронной связи является вызов
удаленной процедуры (RPC).
При асинхронной связи
отправитель может послать сообщение и немедленно продолжить выполнение других
задач, не дожидаясь ответа от получателя. Более того, использование
асинхронной связи позволяет адресату быть свободным от каких-либо
обязательств, в какое время будут обрабатываться сообщения. Для отправителя
вообще не важно, активен ли адресат на момент отправки сообщения, он может
спокойно заниматься своим делом, периодически поглядывая, не пришел ли ответ
на посланное ранее сообщение. После того как ответ получен, можно предпринять
необходимые действия в зависимости от его содержания.
У читателя может возникнуть законный
вопрос о целостности данных. Мы рассмотрим его немного позже, но, забегая
вперед скажу, что причин для беспокойства нет, поскольку сервер очередей
изначально проектировался для обеспечения целостности транзакций.
Преимущества асинхронной
передачи
Как уже было сказано ранее, сервер
очередей предоставляет приложениям возможность отправлять и принимать
сообщения от других приложений в асинхронном режиме. Приложения могут
выполняться на одной машине или в сети. Формат сообщений может быть любым,
лишь бы они были понятны как отправителю, так и адресату. Так как приложения
«общаются» в асинхронном режиме, не имеет значения, работает ли адресат,
функциональна ли сеть (на участке от сервера очередей до получателя) и
подключен ли к сети отправитель в момент прихода ответа. Просто сообщение
будет доставлено в более удобный момент.
Не возьму на себя смелость
утверждать, что идея асинхронной передачи сообщений раньше была никому не
известна. Но прежде многим приходилось организовывать такой тип сообщений
самостоятельно, т.е. писать некоторые аналоги сервера очередей. Очевидно, что
разрабатывать такие приложения непросто, они не обладают полной
функциональностью и нелегки в поддержке.
В каких же ситуациях использование
сервера очередей может дать преимущества? Чаще всего в голову приходит уже
описанный выше сценарий, когда адресат по каким-то причинам недоступен. Это
верно, но картина будет неполной, если не рассмотреть другие ситуации.
Сервер очередей позволит надежно
обмениваться сообщениями, когда известно, что принимающая система не работает
в момент отправки. Для России с ее огромными расстояниями такой сценарий
вполне актуален. Сообщение, отправленное из Москвы во Владивосток, нормально
достигнет адресата, и приложению-отправителю не нужно работать для этого
круглые сутки. Сервер очередей может оказать очевидную помощь в организации
надежной линии передачи сообщений. Это особенно важно при работе в глобальных
сетах с информацией, утеря которой может привести к крупным финансовым или
иным потерям. К такого рода информации относятся данные, передаваемые
брокерами на фондовой бирже, данные о банковских операциях, информация о
протекании технологического процесса и т.п. Использование сервера очередей
гарантирует доставку сообщений адресату даже при нарушениях нормальной работы
сети.
Теперь давайте посмотрим, что же в
сервере очередей обеспечивает заявленную на данный момент функциональность.
Иными словами, что он умеет и как устроен.
Возможности Message Queue
Server
Обобщенная архитектура сервера
сообщений
Microsoft Message Queue
Server 1.0 имеет следующие возможности:
Передача сообщений при отсутствии прямых
соединений (Connectionless messaging). Наличие очередей для сохранения и
передачи сообщений избавляет приложения от необходимости обрабатывать
нештатные ситуации поведения сети. Так как сервер очередей использует модель
соединения вне сеанса связи (sessionless model), от адресата и отправителя
не требуется поддержка одних и тех же сетевых протоколов. Сервер очередей
поддерживает IP и IPX. Кроме того, фирма Level 8 Systems предполагает
обеспечить поддержку SNA для обращений к компьютерам IBM (MVS и
CICS).
Установка приоритетов передачи (Network traffic
prioritization). Возможность расстановки приоритетов позволяет
отправлять в первую очередь более срочные сообщения, что гарантирует хорошее
время отклика для критичных приложений за счет менее важных.
Динамические очереди (Dynamic queues).
Информация об очередях хранится в базе данных, которая может как изменяться
динамически, так и реплицироваться. Подобный подход позволяет
администраторам менять протокол и положение (помимо других параметров
очереди) не оказывая влияния на приложения передачи/приема сообщений.
Администратор может вносить указанные изменения с помощью MSMQ Explorer, где
бы он ни находился.
Маршрутизация (Routing). Сервер очередей
поддерживает динамическую маршрутизацию и доставляет сообщения, используя
путь с наименьшей ценой доставки. Когда работа сети на этом маршруте
нарушается, сервер автоматически выбирает следующий по стоимости маршрут.
Назначение цены участков передачи сообщений производится администратором при
помощи административной консоли. Администраторы также могут назначить
серверу очередей роль коммуникационного концентратора для обработки всего
трафика между двумя узлами.
Гарантированная доставка (Guaranteed
delivery). Сообщения могут сохраняться в дисковой очереди для
обеспечения гарантированной доставки (journaling), или уведомления о
невозможности доставки (dead letter). Для очень срочных сообщений сервер
очередей предоставляет возможность сохранения сообщений в памяти до того
момента, когда они могут быть доставлены адресату. В последнем случае
остановка сервера вызовет потерю сообщения.
Защищенность (Security). Сервер очередей
использует списки прав доступа (ACL) Windows NT для определения прав доступа
к очереди и другие системы защиты, основанные на использовании открытых
(Public) ключей (система защиты основана на использовании Crypto API с
RSA-провайдером). Для проверки целостности сообщений используются
контрольные суммы. Сервер очередей использует алгоритмы шифрования RC2 и
RC4, по умолчанию выбирается алгоритм RC2. Для шифрования сообщения
приложение просто присваивает ему атрибут «private», все остальное будет
сделано автоматически.
Поддержка ActiveX. Как любой «порядочный»
сервер, сервер очередей должен иметь открытую архитектуру. В нашем случае
разработка приложений под сервер очередей средствами VB облегчается
использованием трех OLE компонентов:
Queue (MQQueue) — открывает доступ к
очереди;
Message (MQMsg) — предоставляет доступ
посланным и принятым сообщениям;
Directory Service (MQDS) — используется
для поиска существующих и создания новых очередей.
Все эти компоненты обеспечивают
доступ к API для программирования всех функций сервера. Поддержка ActiveX
позволяет обращаться к серверу очередей из Microsoft Transaction Server,
Internet Information Server, активных Web страниц (ASP) и любых приложений,
поддерживающих OLE вызовы. Средствами С и С++ можно обращаться к API
напрямую.
Поддержка транзакций. Разработчики могут
включать операции сервера очередей в контекст транзакции при обращении к
другим источникам данных, способным восстанавливать состояние, таким как
серверы баз данных. Для сохранения целостности данных операции сервера
очередей фиксируются или откатываются назад вместе с остальными ресурсами в
пределах транзакции. Например, если приложение вносит модификации в базу
данных и посылает сообщение другому приложению внутри одной транзакции, то
может возникнуть ситуация, когда транзакция в базе данных должна быть
откачена назад. При этом операция по передаче сообщения также будет отозвана
сервером сообщений. Никакая операция по передаче сообщения не считается
завершенной до тех пор, пока не зафиксирована транзакция, в которой эта
операция участвует. Это значит, что адресату никогда не будет доставлено
сообщение из отмененной транзакции. Аналогичные действия сервер очередей
предпринимает при приеме сообщения. Если транзакция отменена, отменяются и
все операции приема. Очень важно, что сами сообщения при этом не теряются, а
возвращаются в очередь и остаются доступными для последующих транзакций.
Сервер очередей тесно интегрирован с
Microsoft Transaction Server и все вызовы от ActiveX компонентов, участвующих
в транзакциях, автоматически включаются в активную транзакцию MTS. Когда
приложения используют транзакции для «упаковки» сообщений, сервер очередей
гарантирует, что каждое сообщение будет доставлено только один раз и сообщения
внутри транзакции будут доставлены в том порядке, в котором они были посланы.
Администрирование
Графический интерфейс администратора
позволяет динамически управлять всеми компьютерами предприятия с
единой консоли.
Административная консоль использует
разделяемую и реплицируемую базу данных для поддержания актуальной информации.
Администратор всегда имеет возможность добавления, удаления, модификации и
перемещения очередей. Отсутствие статических таблиц конфигурации и
предопределенных путей улучшает масштабируемость и снижает затраты на
администрирование системы.
Вся система администрирования сервера
очередей концентрируется вокруг индивидуальных менеджеров очередей. Сообщения
перемещаются между менеджерами очередей посредством очередей передачи
(transmission queue). Менеджеры очередей группируются в узлы (site) и связаны
не «каждый с каждым», а через посредство общего сетевого пространства
предприятия. Как уже говорилось, информация об узлах и связях является
разделяемой и используется всеми, участвующими в процессе, компонентами. Это
гарантирует, что сообщения будут маршрутизироваться корректно и оптимально.
Конфигурация
Сервер очередей может быть
сконфигурирован в одной из трех модификаций: сервер, рабочая станция и клиент.
MSMQ как сервер
Сервер (рис. 3) поддерживает всю
доступную функциональность. Сервер способен:
Обслуживать API-вызовы от приложений,
выполняющихся на той же самой машине.
Выступать как клиентский прокси-сервер (client
proxy server) от имени клиентов сервера очередей на других ашинах.
Сохранять сообщения в очередях на машине, где
выполняется сервер очередей.
Выполнять функции маршрутизации
сообщений.
Поддерживать соединения с другими платформами
через MSMQ Connector.
Кроме того, серверная конфигурация
поддерживает MSMQ Information service — каталог для информации о
маршрутизации и конфигурации, и MSMQ Explorer — основную административную
консоль.
MSMQ как рабочая станция
В конфигурации «рабочая станция», или
MSMQ Independent Client , сервер очередей может обслуживать API-вызовы от
приложений, выполняющихся на той же машине, и способен обслуживать локальные
очереди сообщений, т.е. сообщения, хранятся на той же машине, где он
выполняется. Рабочая станция MSMQ не содержит служб маршрутизации, прокси, или
служб MSMQ Information Services. Обычно рабочая станция MSMQ выступает как
клиент «полного» сервера очередей.
Если отказала сеть или клиент вовсе
не подключен к сети (например, мобильный пользователь), приложения могут
продолжать отправлять и принимать сообщения из локальной очереди. После
восстановления или инициализации соединения рабочая станция MSMQ отправляет
все накопленные в локальной очереди сообщения, предназначенные для другой
машины. Точно также все сообщения, предназначенные для рабочей станции MSMQ,
поступают к ней в очередь с других машин. Подобная функциональность делает
рабочую станцию MSMQ очень привлекательным решением, когда необходимо
обеспечить хранение и периодическую передачу сообщений с обычного настольного
компьютера.
Рабочая станция MSMQ не может
выполнять функции маршрутизации (т.е. выступать в качестве промежуточного
агента). Пересылка и прием сообщений от других рабочих станций может
выполняться только при точном указании имен очередей назначения.
Рабочая станция MSMQ может
выполняться в среде Windows 95. Windows NT Workstation и Windows NT
Server.
MSMQ как клиент
Конфигурация «клиент», или MSMQ
Dependent Client , предоставляет все API сервера очередей (такие как Open,
Close, Send, Receive) для приложений, выполняющихся на машинах, не имеющих ни
сервера, ни рабочей станции для обслуживания очередей. Когда приложение
выполняет API-вызов, клиент осуществляет пересылку этого вызова к клиентской
прокси-машине, на которой исполняется серверная конфигурация сервера очередей
(конфигурация «рабочая станция» не может обслуживать запросы от
MSMQ-клиентов). Клиентская прокси машина повторяет API вызов к серверу
очередей, который на этот раз исполняется применительно к конкретной очереди.
В данной ситуации сервер отвечает за все вопросы, связанные с управлением
сообщениями, хранением и маршрутизацией.
Основным преимуществом использования
MSMQ-клиентов являются минимальные требования к дисковому пространству и
объему памяти. Однако при отказе сети ни одно приложение не сможет выполнить
вызов к API сервера.
Конфигурация «клиент» поддерживается
на Windows 95. Windows NT Workstation и Windows NT Server.
Политика лицензирования и доступность
продукта
Microsoft Corporation объявила, что
версии Microsoft Message Queue Server будут включены в комплекты поставки
Windows NT Server, Standard Edition и Windows NT Server, Enterprise
Edition. В ближайшем будущем Message Queue Server войдет в состав
Windows NT 4.0 Option Pack (http://www.microsoft.com/ntserver/info/ntop.htm).
Поставки MSMQ как отдельного продукта не планируются.
Версия MSMQ, включенная в состав
Microsoft Windows NT Server, Enterprise Edition (unlimited version)
обеспечивает полную функциональность сервера очередей и не имеет ограничений
на количество подключаемых MSMQ Dependent Client или MSMQ Independent Client.
Версия MSMQ, включенная в состав
Microsoft Windows NT Server, Standard Edition (limited version) будет иметь
ограничение на 25 одновременно подключенных MSMQ Dependent Client или MSMQ
Independent Client, не обеспечивает маршрутизацию и работу с MSMQ Connector.
Дополнительную информацию можно
получить по адресам http://www.microsoft.com/ntserver и http://www.microsoft.com/ntserver/info/msmq.htm.
Заключение
Сервер очередей выглядит весьма
привлекательно. Архитектура сервера масштабируется в широких пределах с
минимальным ростом сложности администрирования. Широкий набор конфигураций
обеспечивает гибкость при развертывании: от легких клиентов, способных
исполняться на портативных компьютерах до мощных серверов, обслуживающих
высоконагруженные очереди.
|