IBM WebSphere MQ
IBM MQ — семейство сетевого ПО, открытое IBM в марте 1992. Ранее известно как MQSeries: IBM переименовало его в WebSphere MQ 2002 для ассоциации с линейкой продуктов WebSphere. В апреле 2014 переименовано в IBM MQ. IBM MQ также называют просто MQ или MQSeries.
IBM MQ — промежуточное ПО для сообщения (Message Oriented Middleware). Оно позволяет независимым и, возможно, работающим не одновременно приложениям в распределённой системе обмениваться данными друг с другом. MQ работает на всех основных платформах: z/OS (мейнфрейм), IBM i (IBM System i, ранее AS/400), Transaction Processing Facility, UNIX (AIX, HP-UX, Solaris), HP NonStop, OpenVMS, Linux и Microsoft Windows.
Промежуточное ПО для сообщения
IBM MQ — самое распространённое решение в этой области[1] для сообщения разных платформ, включая Windows, Linux, системы IBM высокого и среднего уровней, и другие системы Unix.
Доставка сообщений через очереди имеет две стороны:
- Сообщения — наборы двоичных или текстовых файлов, несущих определённый смысл для компонентов системы. Как и в случае с другими протоколами, служебная информация о хранении, маршрутизации и доставке добавляется к сообщениям при их создании, и удаляется из них перед передачей их непосредственно приложению-получателю.
- Очереди сообщений — объекты, хранящие сообщения в приложении.
Диспетчер очереди, хотя и не обязателен в таком ПО, всегда используется в IBM MQ и является системной службой, обеспечивающей логический контейнер для очереди сообщений. Он отвечает за передачу данных другим диспетчерам через специальные каналы сообщений.
У такой технологии есть несколько преимуществ:
- Доставка сообщений не «завязана» на протоколы пакетной передачи данных, такие как TCP/IP. Это позволяет обеспечивать асинхронность доставки и не требует тесной связи приложений.
- Сообщения доставляются гарантированно и только единожды, независимо от возможных ошибок в сети.
Программные интерфейсы
К средствам IBM MQ можно обращаться различными способами. В число поддерживаемых программных интерфейсов входят:
- интерфейс IBM Message Queue для C, COBOL, PL/I и Java, RPG;
- JMS для Java;
- интерфейс Perl (разработан MQ Engineering Group) (доступен на CPAN[2]);
- Windows PowerShell[3];
- XMS для C/C++ и .NET[4];
- .NET;
- SOAP.
Также реализованы многие другие интерфейсы, однако они не поддерживаются IBM.
Особенности
IBM MQ обеспечивает гарантированную доставку сообщений между системами на разных платформах. Акцент делается на надёжность передачи, сообщения никогда не должны быть потеряны при правильной конфигурации MQ.
Понятие сообщения в MQ обобщено, например с помощью MQ можно реализовать надёжную доставку больших файлов (то есть заменить FTP).
MQ позволяет иметь архитектуру не зависящую от времени (то есть без необходимости явной синхронизации). Сообщения могут посылаться одним приложением другому, независимо от того, работает последнее или нет в данный момент. Если оно не работает, сообщение попадёт в очередь и будет доставлено по назначению когда приложение-получатель станет доступно. Порядок сообщений сохраняется (причём можно настроить систему таким образом, чтобы сообщения доставлялись в обратном порядке, то есть сначала те сообщения, которые были посланы последними), также имеется система приоритетов сообщений.
Возможно преобразование данных для других архитектур и протоколов (например, порядок разрядов в байте, или кодировка символов). Такая возможность реализуется посредством специальных «выходов» (exits). Это специальные программы, которые работают на компьютере диспетчера очереди и выполняются IBM MQ при необходимости.
В IBM MQ можно с помощью специальных сообщений запускать на выполнение приложения, что позволяет реализовать архитектуру системы управляемой сообщениями (message-driven architecture).
В отличие от электронной почты, MQ сама отвечает за определение назначения сообщений, поэтому обработку отправленных сообщений можно перенести в отдельное приложение на другом компьютере. MQ имеет продуманную архитектуру маршрутизации, которая в частности позволяет доставлять сообщения по альтернативному пути через сеть диспетчеров MQ. MQ может быть реализован в виде кластера, в котором обработка сообщений выполняется несколькими экземплярами для увеличения производительности.
Взаимодействие
Основной компонент IBM MQ — диспетчер очереди (Queue Manager). Он отвечает за хранение файлов, временную привязку, запуск приложений (triggering) и другие действия, не связанные непосредственно с перемещением данных.
Диспетчеры открыты для взаимодействия либо через прямое программное соединение (называемое bindings connection), либо через сетевое, или клиентское соединение (client connection). Очевидно, прямое соединение возможно только для программ, выполняющихся на том же компьютере, что и диспетчер очереди.
Прямое соединение быстрее, но использование сетевого позволяет сделать систему более гибкой (даже если программа выполняется на том же компьютере, при сетевом соединении её легко можно перенести на другой, разгрузив таким образом компьютер на котором выполняется диспетчер).
Для взаимодействия диспетчеров между собой организуются специальные каналы. Так как каналы однонаправленные, для обратных данных нужен второй канал. В сети TCP/IP каждому каналу назначается отдельный порт. В случае ошибок MQ автоматически восстанавливает соединение после решения проблемы.
Локальная очередь — это просто путь в файловой системе к данным, ожидающим обработки.
Удалённая очередь для данного компьютера — это очередь другого диспетчера. В качестве пункта назначения выступают именно удалённые очереди.
Для передачи данных на другой диспетчер, сообщение помещается сначала во временную очередь на передачу данных связанную с каналом, и затем передается в удалённую очередь. Если сообщение было передано без ошибок, оно удаляется из очереди на передачу. При получении сообщения из канала определяется какому диспетчеру оно направлено и в какую очередь и, если это не диспетчер принявший сообщение, оно направляется далее. Если данный диспетчер является конечным, сообщение будет размещено в указанной очереди (если она существует, иначе — в очередь невостребованных сообщений). Для повышения эффективности сообщения могут намеренно оставляться в очереди до тех пор пока её размер не станет оптимальным для передачи в данных условиях.
MQ и Web-службы
IBM MQ может быть основой для построения системы с сервисно-ориентированной архитектурой. Для адаптации старых программ в Web-сервисах MQ есть несколько вспомогательных утилит. Большие разнородные корпорации часто являются простым объединением слабо связанных компонентов. В таких средах одни службы должны быть доступны только в рамках одного компонента, в то время как другие могут использоваться всей сетью. IBM MQ позволяет обеспечить это.
С IBM MQ тесно связан WebSphere Message Broker (полное название WebSphere Business Integration Message Broker, ранее - MQSeries Integrator), позволяющий расширять архитектуру основанную на очередях. Так, с его помощью можно реализовать интерфейс Web-служб с поддержкой файлов описания служб WSDL.
Ссылки
- В среднем сообщают о ~40 % доле рынка http://www.capitalware.biz/forecast_AI_market.html
- MQSeries — Perl extension for MQSeries support — metacpan.org
- MO74: WebSphere MQ - Windows Powershell Library (недоступная ссылка). Дата обращения: 6 декабря 2007. Архивировано 28 июня 2012 года.
- Introducing XMS -- The IBM Message Service API (недоступная ссылка). Дата обращения: 6 декабря 2007. Архивировано 28 июня 2012 года.
Внешние ссылки
- IBM's Product Overview
- Product page
- Introductory Whitepaper
- Trial code
- IBM Redbook: WebSphere MQ V6 Fundamentals
- «WebSphere MQ V6. Фундаментальные основы». Пер. с англ. Сайда Дэвис, Питер Бродхерст (2006 г.)
- WebSphere MQ newsgroups (недоступная ссылка)
- MQSeries Installation, Configuring inetd, xinet, Using JMSAdmin (In French)
- MQConnect for Unisys MCP (недоступная ссылка)
- MQ commands
- IBM Developerworks starting point