Понятие очередей сообщений
Лекция посвящена обсуждению следующих вопросов:
- Базовые понятия
- Упрощение
- Расширяемость и скорость работы
- Надежность служб и целостность данных
- Защита
- Высокая готовность системы
- Мониторинг и учет операций
2.1. Базовые понятия
В ИТ-инфраструктуре компании может параллельно существовать множество технологий. Зачастую в нее входят различные аппаратные платформы, языки программирования, операционные системы и системы коммуникаций.
На базе этой инфраструктуры организуются службы, каждая из которых обеспечивает возможность выполнения действия или получения информации. Службы могут предоставляться для внутренних нужд компании или использования поставщиками и клиентами предприятия.
Как одно целое, службы и предназначенная для их поддержки инфраструктура образуют систему. Для представления любой точки в такой системе, способной быть местом размещения службы, могущей запрашивать службу или соединять себе подобные воедино, в книге используется общее понятие узел. Узлы могут являться отдельными аппаратными серверами, а могут группами встречаться в программных компонентах одного сервера.
Новые службы способны вводить в систему новые технологии. Однако им зачастую необходимо взаимодействовать со службами, которые уже существуют, используя для этого существующий набор технологий.
К тому же компания может испытывать желание технологически состыковать собственную систему с системами других предприятий или предоставлять внешние интерфейсы к своей системе существующим и потенциальным клиентам или бизнеспартнерам.
2.1.1. Промежуточное ПО
Программные приложения, разработанные компанией с целью запроса и предоставления служб, требуют связи со службами, реализуемыми системой. Эти службы находятся в разных ее узлах, а те могут быть созданы с использованием различных инфраструктурных компонентов и технологий.
Технологии промежуточного ПО образуют абстрактный слой между инфраструктурными компонентами и приложениями, стремящимися получить доступ к инфраструктуре для реализации служб. В дальнейшем промежуточное ПО становится частью инфраструктуры, играя в системе роль общего слоя, объединяющего узлы.
Слой промежуточного ПО способен упростить разработку и сопровождение приложений, реализующих сами службы или запросы к ним, что позволяет сосредоточить внимание на бизнес-логике служб, а не на сложностях доступа к имеющимся в системе службам.
Создание очередей сообщений – технология промежуточного ПО, заметно упрощающая коммуникации между узлами одной системы, а также между узлами связи разных систем. Создание очередей сообщений дает службам возможность гибкого взаимодействия, не требующего детального знания целевой службы или наличия сведений о ее текущей доступности. Надежной связи отдельных служб можно добиться независимо от сложности инфраструктуры, объединяющей узлы конкретной системы.
Основу упомянутой технологии образуют два главных понятия: сообщение и очередь.
2.1.2. Сообщения
Входящему в систему узлу нередко требуется передать данные или запросить службу другого узла в той же или связанной с ней системе. Эту порцию информации или запрос можно считать примерами сообщений.
Сообщение может содержать простые данные в формате символов или чисел, сложную двоичную информацию, запрос, команду или смесь всего перечисленного. Важно, чтобы любой целевой узел, принимающий сообщение, "понял" его формат. Однако объединяющая узлы инфраструктура приема и передачи сообщений не требует единого понимания. Она должна лишь гарантировать поддержание целостности информации в сообщении и его правильную доставку по назначению.
Инфраструктура сообщений "понимает" различия между программными и аппаратными составляющими, на которых работает тот или иной узел. Для обеспечения возможности прочитать данные на разных программно-аппаратных платформах может потребоваться перекодирование символьных и числовых данных. Инфраструктуру сообщений можно настроить так, чтобы это перекодирование осуществлялось прозрачным образом и каждое сообщение осталось корректным при его получении.
Для передачи сообщения по назначению к нему может понадобиться добавить дополнительные данные, сопровождающие его при пересылке в инфраструктуре. Заметим, что эти данные отделены от информации, содержащейся в сообщении, так же, как конверт существует независимо от письма, которое в него вложено.
2.1.3. Очереди
Очередь – это контейнер для сообщений. Новые сообщения помещаются в конец очереди, а размещенные в ней, как правило, извлекаются из начала. Движение сообщений в пределах очереди показано на рис. 2.1.
Также для извлечения сообщений могут использоваться идентификаторы, которые с ними связаны. Сообщениям можно назначить приоритет, чтобы сообщения с высоким приоритетом извлекались из очереди быстрее сообщений с низким приоритетом, или логически сгруппировать так, чтобы одно из них зависело от другого.
Однако очереди не призваны стать заменой баз данных. Они оптимизированы для небольшого количества сообщений, проходящих их до своей доставки по назначению.
Эта простая, но действенная идея лежит в основе надежной и расширяемой инфраструктуры приема и передачи сообщений – инфраструктуры очередей сообщений. Понятие очереди используется в инфраструктуре очередей сообщений, в том числе, для решения следующих задач.
- Буфер между отправителем и получателем сообщений.
Служба, которая получает, потребляет и обрабатывает сообщения, может быть не готова обрабатывать каждое сообщение в момент его поступления, поскольку может быть занята обработкой другого сообщения или недоступна по какой-то иной причине. В то же время сообщения не могут поступать с одинаковой интенсивностью или не поступать в периоды занятости; спрос на работу службы может временно превышать ее возможности по обслуживанию. При наличии очереди между отправителем сообщений и получателем отправитель может посылать сообщения, не зная, доступен ли получатель в настоящее время.
Подобный режим работы называется асинхронным взаимодействием, так как источник может продолжить свою работу, как только сообщение будет помещено в очередь. Сравните его с синхронным взаимодействием, при котором он должен ожидать готовности получателя и полного завершения работы над сообщением для того, чтобы продолжить свою работу.
- Пакетная обработка.
Служба может быть не настроена на обработку и потребление каждого сообщения при получении, а будет, напротив, ждать достижения некоего порога сообщений в конкретной очереди, чтобы обработать их как единый пакет или выполнить обработку всех сообщений, полученных в определенный период времени. Это позволит службе воспользоваться эффективностью масштаба обработки, а возможно, и обработать данные в тот период, когда другие связанные системы и службы не функционируют.
- Буферы между промежуточными узлами системы.
При движении от отправителей к получателям сообщениям может требоваться пройти промежуточные узлы системы. Количество узлов, которые пройдет сообщение, а также место расположения пункта назначения сообщения может быть неизвестно стороне отправления или оказаться изменено. Сетевые соединения между промежуточными узлами или сами промежуточные узлы иногда могут быть недоступны. Поместив очередь как буфер между всеми узлами системы, можно ставить сообщения на ожидание в любой точке, где они останутся до тех пор, пока узел или сетевое соединение не станет снова доступным, после чего сообщение автоматически перейдет к следующему узлу.
2.1.4. Межточечный обмен сообщениями
Многие сообщения предназначены для потребления лишь однажды. Точка внутри системы, где сообщение будет использовано, может быть как известна, так и неизвестна для отправителя. Однако сам отправитель обеспечивает инфраструктуру сообщений достаточной информацией для того, чтобы доставить сообщение только одному потребителю.
В режиме межточечного обмена сообщение приходит один и только один раз в единственное корректное место своего назначения.
Процесс межточечного обмена можно представить двумя общими категориями.
- Обмен по принципу "отправил – забыл".
Сообщение передается службе, выполняющей действие на базе этого сообщения. При его обработке служба может сформировать новое сообщение, но источник запроса не получает никаких явных свидетельств происходящего.
Иллюстрацией этого может быть сообщение с обновлением информации в базе данных или сообщение с подробностями события, факт наступления которого требует тех или иных действий, к примеру отправки сообщений системным администраторам.
- Обмен по принципу "запрос – ответ".
Сообщение передается службе, выполняющей действие на базе этого сообщения и посылающей ответ для его отправителя.
Пример подобной работы – запрос информации в базе данных и посылаемый как реакция на него ответ или сообщение-запрос с подробным описанием действия, которое требует выполнения и может иметь несколько результатов, – исход такого события отсылается как ответ.