Содержание
Очередь сообщений (Message Queue) / Хабр
Очередь сообщений (Message Queue)
Этот пост рассказывает об очередях сообщений — почему вы должны знать о них, думать при планировании архитектуры и использовать их в вашем приложении.
Почему очереди сообщений?
Сообщения, наряду с блоками вычисления и хранения, составляют три основных блока почти в каждой блок-схеме системы. Очереди сообщений, по существу, являются связующим звеном между различными процессами в ваших приложениях и обеспечивают надежный и масштабируемый интерфейс взаимодействия с другими подключенными системами и устройствами.
О́чередь — структура данных с дисциплиной доступа к элементам «первый пришёл — первый вышел». Добавление элемента возможно лишь в конец очереди, выборка — только из начала очереди, при этом выбранный элемент из очереди удаляется.
Использование очереди сообщений
Десять причин, почему очереди сообщений являются жизненно важным компонентом для любой архитектуры или приложения:
- Слабое связывание — очереди сообщений создают неявные интерфейсы обмена данными, которые позволяют процессам быть независимыми друг от друга т. е вы просто определяете формат сообщений отправляемых от одного процесса другому.
- Избыточность — Очереди позволяют избежать случаев неэкономного использования ресурсов процесса(например памяти) в результате хранения необработанной (лишней) информации.
- Масштабируемость — очереди сообщений позволяют распределить процессы обработки информации. Таким образом, они позволяют легко наращивать скорость, с которой сообщения добавляются в очередь и обрабатываются.
- Эластичность и возможность выдерживать пиковые нагрузки — очереди сообщений могут выполнять роль своего рода буфера для накопления данных в случае пиковой нагрузки, смягчая тем самым нагрузку на систему обработки информации и не допуская ее отказа.
- Отказоустойчивость — очереди сообщений позволяют отделить процессы друг от друга, так что если процесс, который обрабатывает сообщения из очереди падает, то сообщения могут быть добавлены в очередь на обработку позднее, когда система восстановится.
- Гарантированная доставка — использование очереди сообщений гарантирует, что сообщение будет доставлено и обработано в любом случае (пока есть хотя бы один обработчик).
- Гарантированный порядок доставки — большая часть систем очередей сообщений способны обеспечить гарантии того, что данные будут обрабатываться в определённом порядке (чаще всего в том порядке в котором они поступили).
- Буферизация — очереди сообщений позволяет отправлять и получать сообщения при этом работая с максимальной эффективностью, предлагая буферный слой — процесс записи в очередь может происходить настолько быстро, насколько быстро это в состоянии выполнить очередь сообщений, а не обработчик сообщения.
- Понимание потоков данных — очереди сообщений позволяют выявлять узкие места в потоках данных приложения, легко можно определить какая из очередей забивается, какая простаивает и определить что необходимо делать — добавлять новых обработчиков сообщений или оптимизировать текущую архитектуру.
- Асинхронная связь — очереди сообщений предоставляют возможность асинхронной обработки данных, которая позволяет поместить сообщение в очередь без обработки, позволяя системе обработать сообщение позднее, когда появится возможность.
Я могу рассказать ещё больше на тему практических рекомендаций — как и для чего люди используют очереди сообщений, но, пожалуй, в следующий раз.
В целом области применения очередей сообщений включают в себя:
- Обработку данных
- Буферизацию потоков данных
- Управление процессами
- Интеграцию и взаимодействие систем
Вышеприведённые области должны дать вам идеи где можно использовать очереди сообщений. Если они не являются стандартной частью вашего инструментария, вы, вероятно, пропустили то, что может уменьшить сложность вашей системы и решить кучу проблем.
Почему SaaS?
Добавление очереди сообщений для облачных приложений имеет смысл, только если есть чистый выигрыш в плане установки и эксплуатации. Добавление дополнительного архитектурного слоя отвечающего за очереди сообщений — непростая задача, особенно если вы решили использовать собственное решение или установить на свои сервера стороннее, так как это привнесёт дополнительные затраты на мониторинг, настройку, управление и повлияет на общую надёжность и безопасность системы.
Когда очереди сообщений легки в установке, просты в использовании, высоко доступны и чрезвычайно надёжны — все становиться гораздо проще.
Тут уместна аналогия получения энергии. Прогресс шёл от ветряных мельниц и угольных печей до промышленных электростанций и линий электропередач.Этот последний шаг — индустриализация энергии — изменило лик промышленности в мире. Это снизило затраты на строительство и производство, изменило города, заводы, и дома, и позволило создать новые изобретения, услуги и виды бизнеса.
Аналогичным образом, путём подключения служб очередей сообщений, разработчики больше не должны поддерживать огромный наборов сервисов, работающих на нескольких серверах и не опасаться простоя в результате отказа систем. В современном мире поставщики услуг берут на себя ответственность за управления серверами, API и другими ресурсами, а разработчик абстрагируясь от большинства физических ограничений может сконцентрироваться на реализации своей идеи.
Преимущества перехода на облачные очереди сообщений включают в себя:
- Увеличение скорости выхода на рынок: приложения и системы могут быть построены гораздо быстрее.
- Уменьшение сложности: снижение рисков и накладных расходов в стратегическом потенциале. Например вам сейчас кажется что свой собственный сервер с поднятым и сконфигурированным RabbitMQ кажется лучшим решением, то в долгосрочной перспективе при росте нагрузки, требованиях к HA(high availability) ранняя интеграция сторонних сервисов может сыграть свою положительную роль.
- Увеличение масштабируемости: возможность легко масштабировать производительность и функциональность
С чего начать?
Различных сервисов предоставляющих услуги очередей сообщений не так много:
- Amazon SQS
- IronMQ
- StormMQ
- Windows Azure Queues
При этом SQS предоставляет 100 000 бесплатных сообщений (я так понял что за весь период использования), IronMQ — 10 000 000 бесплатных сообщений в месяц (при условии если вы введете данные кредитной карточки), а StormMQ на данный момент в закрытой бете. Вплане наличия примеров использования и библиотек в лидерах SQS, хотя IronMQ тоже поддерживает наиболее популярные языки (Ruby,Python,C#,Java…) и примеров использования уже достаточно.
PS Я надеюсь мне удалось заронить каплю сомнения в выбор «поставить свой сервер MQ или использовать сторонний сервис» и заинтересовать в существующих SaaS решениях в области очередей сообщений.
upd: добавил Windows Azure Queues
Что такое очередь сообщений?
Асинхронная передача сообщений для пакетных заданий и разъединения приложений
Очередь сообщений – это форма асинхронной коммуникации между сервисами, применяемая в бессерверных и микросервисных архитектурах. Сообщения хранятся в очереди, пока не будут обработаны и удалены. Каждое сообщение обрабатывается только один раз и только одним потребителем. Очереди сообщений могут использоваться для разъединения сложных процессов обработки, для буферизации или организации пакетной обработки, а также для сглаживания пиковых нагрузок.
Ниже представлены несколько ресурсов, которые помогут лучше разобраться в общих принципах работы очередей сообщений. Подробнее об очередях сообщений в AWS см. на странице Amazon Simple Queue Service (SQS).
33:27
Посмотрите запись вебинара, чтобы узнать о роли и компонентах обмена сообщениями в архитектуре приложений
В современной облачной архитектуре приложения разделяют на небольшие независимые элементы, которые проще разрабатывать, развертывать и обслуживать. Очереди сообщений обеспечивают для таких распределенных приложений возможность взаимодействия и координации. Очереди сообщений могут значительно упростить написание кода приложений с разъединенными компонентами, а также повысить их производительность, надежность и масштабируемость.
Очереди сообщений позволяют различным частям системы асинхронно взаимодействовать и обрабатывать операции. Очередь сообщений предоставляет упрощенный буфер, используемый для временного хранения сообщений, и конечные точки, которые позволяют программным компонентам подключаться к очереди для отправки и получения сообщений. Сообщения обычно имеют небольшой размер и могут представлять собой запросы, ответы, сообщения об ошибках или некую информацию. Чтобы отправить сообщение, компонент, называемый источником, добавляет сообщение в очередь. Сообщение хранится в очереди, пока другой компонент, называемый получателем, не извлечет это сообщение и не выполнит с ним некую операцию.
Очередь могут использовать многочисленные источники и получатели, но каждое сообщение обрабатывается одним получателем только один раз. По этой причине такой способ обмена сообщениями часто называют взаимно-однозначной или прямой передачей сообщений. Когда сообщение должно обрабатываться несколькими получателями, очереди сообщений можно комбинировать с моделью отправки сообщений «издатель-подписчик» в шаблоне проектирования разветвлений. См. подробнее в разделе Что такое модель передачи сообщений «издатель-подписчик»? или посетите страницу Amazon Simple Notification Service (SNS) для получения общей информации о модели передачи сообщений «издатель-подписчик» (Pub/Sub) в AWS.
Начните работу бесплатно с помощью трех простых команд.
Вход в Консоль
Подробнее об AWS
- Что такое AWS?
- Что такое облачные вычисления?
- Многообразие, равенство и инклюзивность AWS
- Что такое DevOps?
- Что такое контейнер?
- Что такое озеро данных?
- Безопасность облака AWS
- Новые возможности
- Блоги
- Пресс‑релизы
Ресурсы для работы с AWS
- Начало работы
- Обучение и сертификация
- Библиотека решений AWS
- Центр архитектуры
- Вопросы и ответы по продуктам и техническим темам
- Аналитические отчеты
- Партнеры AWS
Разработчики на AWS
- Центр разработчика
- Пакеты SDK и инструментарий
- .NET на AWS
- Python на AWS
- Java на AWS
- PHP на AWS
- JavaScript на AWS
Поддержка
- Свяжитесь с нами
- Обратиться в службу поддержки
- Центр знаний
- AWS re:Post
- Обзор AWS Support
- Юридическая информация
- Работа в AWS
Amazon. com – работодатель равных возможностей. Мы предоставляем равные права
представителям меньшинств, женщинам, лицам с ограниченными возможностями, ветеранам боевых действий и представителям любых гендерных групп любой сексуальной ориентации независимо от их возраста.
Поддержка AWS для Internet Explorer заканчивается 07/31/2022. Поддерживаемые браузеры: Chrome, Firefox, Edge и Safari.
Подробнее »
activemq — что такое MQ и почему я хочу его использовать?
спросил
Изменено
8 лет, 1 месяц назад
Просмотрено
71к раз
В моей рабочей группе мы часто используем технологию IBM MQ для связи между приложениями. В последнее время я видел в Hacker News и других местах информацию о других технологиях MQ, таких как RabbitMQ. У меня есть базовое понимание того, что это такое (обычно проверяемая область для размещения и получения сообщений), но что я хочу знать, в чем именно она хороша? Как я узнаю, где я хочу его использовать и когда? Почему бы просто не придерживаться более рудиментарных форм обмена сообщениями между процессами?
- activemq
- rabbitmq
- ibm-mq
Все объяснения до сих пор точны и точны, но может быть что-то упущено: одно из основных преимуществ очереди сообщений: отказоустойчивость.
Представьте себе: вам нужно связаться с двумя или тремя другими системами. Распространенным подходом в наши дни будут веб-сервисы, что хорошо, если вам нужны ответы прямо сейчас.
Тем не менее: веб-службы могут быть недоступны и недоступны — что тогда делать? Помещение вашего сообщения в очередь сообщений (которая также имеет компонент на вашем компьютере/сервере), как правило, будет работать в этом сценарии — ваше сообщение просто не будет доставлено и, следовательно, обработано прямо сейчас — но оно будет позже, когда другой часть сервиса возвращается в онлайн.
Таким образом, во многих случаях использование очередей сообщений для соединения разрозненных систем является более надежным и надежным способом отправки сообщений туда и обратно. Это не работает хорошо для всего (если вы хотите узнать текущую цену акций для MSFT, поместить этот запрос в очередь может быть не лучшей идеей), но во многих случаях, например, размещение заказа в вашем очереди сообщений поставщика, она работает очень хорошо и может помочь решить некоторые проблемы с надежностью при использовании других технологий.
4
MQ означает очередь сообщений.
Это уровень абстракции, который позволяет нескольким процессам (вероятно, на разных машинах) взаимодействовать с помощью различных моделей (например, точка-точка, публикация-подписка и т. д.). В зависимости от реализации его можно настроить для таких вещей, как гарантированная надежность, сообщения об ошибках, безопасность, обнаружение, производительность и т. д.
Все это можно сделать вручную с помощью сокетов, но это очень сложно.
Например: предположим, вы хотите, чтобы процессы обменивались данными, но один из них может умереть в середине, а затем снова подключиться. Как бы вы гарантировали, что промежуточные сообщения не будут потеряны? Решения MQ могут сделать это за вас.
Предполагается, что системы очередей сообщений дадут вам несколько бонусов. Среди наиболее важных из них — мониторинг и транзакционное поведение.
Транзакционный дизайн важен, если вы хотите быть невосприимчивым к сбоям, таким как сбой питания. Представьте, что вы хотите уведомить банковскую систему о снятии денег в банкомате, и это нужно сделать ровно один раз за запрос, независимо от того, какие серверы временно отказали в середине. Системы MQ позволят вам координировать транзакции в нескольких базах данных, MQ и других системах.
Излишне говорить, что такие системы очень медленные по сравнению с именованными каналами, TCP или другими нетранзакционными инструментами. Если требуется высокая производительность, вы не позволите своим сообщениям записываться на диск. Наоборот, это усложнит ваш дизайн — добиться экзотической надежной и быстрой связи, что толкает дизайнера на действительно нетривиальные ухищрения.
Системы MQ обычно позволяют пользователям просматривать содержимое очереди, писать плагины, очищать очередь и т. д.
0
MQ означает очередь сообщений.
Вы можете использовать его, когда вам нужно надежно отправить межпроцессное/межплатформенное/межприложенное сообщение, которое не зависит от времени.
Очередь сообщений получает сообщение, помещает его в соответствующую очередь и ожидает, пока приложение извлечет сообщение, когда оно будет готово.
1
Ссылка
: веб-сервисы могут быть недоступны и недоступны — что тогда делать?
В качестве расширения к этому; что, если ваша локальная сеть и ваш локальный компьютер тоже не работают?? Пока вы ждете, пока система восстановит зависимые развернутые системы в другом месте, ожидающие этих данных, необходимо увидеть альтернативный поток данных.
В противном случае это может оказаться недостаточно хорошим реагированием в режиме реального времени на сегодняшние и очень скоро будущие требования Интернета вещей (IOT).
, если вы хотите по-настоящему параллельное энергонезависимое хранилище различных потоков FIFO (по крайней мере, в какой-то точке цепочки сигналов), используйте память FPGA и FRAM. FRAM работает с тактовой частотой, а устройства FPGA можно перепрограммировать на лету, добавляя и удаляя столько независимых параллельных потоков данных, сколько необходимо (конечно, в рамках установленных ограничений).
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
ibm mq — предполагаемое использование очереди передачи
спросил
Изменено
9 лет назад
Просмотрено
3к раз
Это очень простой вопрос о IBM WebSphere MQ V7.
Что касается очереди передачи, насколько я понимаю, она используется только с удаленной очередью, которая находится в том же диспетчере очередей. Поэтому, если я хочу поместить сообщение в очередь, мне нужно поместить его в удаленную очередь.
Вот так.
Приложение —> Удаленная очередь —> Очередь передачи
Мой вопрос:
Можно ли поместить сообщение непосредственно в очередь передачи, как это?
Приложение —> Очередь передачи
— Изменено 17.03.2014 —
Я нашел способ поместить сообщение прямо в очередь передачи. Я не знаю, что это обычное использование, но для этого мне нужно было добавить MQXQH
к сообщению. Я попробовал и подтвердил, что это работает. См. ссылку на Инфоцентр здесь.
- ibm-mq
Никогда не ставьте напрямую в очередь передачи. Это опасно, если вы не знаете, что делаете.
Вы должны поместить свое сообщение в удаленную очередь. Удаленная очередь — это не то же самое, что локальная очередь. Удаленная очередь — это просто указатель на очередь в другом диспетчере очередей.
2
Хотя можно поместить сообщения непосредственно в XMitQ, это сопряжено со значительным риском, поэтому большинство администраторов будут препятствовать прямому доступу приложений к этой очереди. Как вы обнаружили, можно создать сообщение с заголовком очереди передачи, а за ним обычное сообщение с MQMD
и полезной нагрузкой. (Фактически именно так работает MCA.)
Проблема здесь в том, что QMgr не проверяет значения в MQMD
, находящийся в полезной нагрузке, поэтому вы можете поместить mqm
в качестве MQMD.UserID
, а затем адресовать сообщение в удаленную очередь команд и предоставить себе доступ администратора к этому удаленному QMgr.
Администраторы, заботящиеся о безопасности, обычно используют два элемента управления безопасностью, чтобы предотвратить это. Во-первых, они запрещают прямой доступ к XMitQ. Это помогает для исходящих сообщений. Что еще более важно, они установили MCAUSER
своих RCVR
/ RQSTR
/ CLUSRCVR
каналы для идентификатора пользователя, не являющегося администратором, которому не разрешено помещать сообщения в какие-либо конфиденциальные очереди.
Другая проблема, конечно, в том, что то, что вы описываете, полностью противоречит разрешению имен WMQ. Встраивая маршрутизацию в приложение, вы не позволяете администратору регулировать веса каналов, настройки кластера, аварийное переключение и распределение нагрузки на сетевом уровне. Нужно перераспределить трафик? Повторно разверните код. Не хороший план.
Итак, из соображений безопасности и потому, что вы заплатили много денег, чтобы получить надежность WMQ, большая часть которой связана с функциями динамической адресации и разрешения имен, настоятельно не рекомендуется кодировать приложения для записи непосредственно в XMitQ.
Вы не должны напрямую использовать очередь передачи.
Добавить комментарий