Очереди сообщений для практических навыков высокопроизводительных веб-сайтов

Java

Что такое очередь сообщений

очередь сообщений(Message Queue) — это способ межпроцессного взаимодействия или взаимодействия между разными потоками одного и того же процесса. между процессами или потокамиИнформацияДля связи сообщение может быть возвращено сразу же после его отправки.Система сообщений обеспечивает надежную доставку информации.Издатель сообщения (производитель) просто публикует сообщение в группе сообщений и не заботится о том, кто его потребляет.Потребитель сообщения ( потребитель) Просто получите сообщение из очереди сообщений для дальнейшей обработки, не управляя тем, кто опубликовал сообщение, так что ни издателю, ни потребителю не нужно знать о существовании друг друга.

Информация(Message) относится к данным, передаваемым между приложениями. Сообщения могут быть как простыми, содержащими только текстовые строки, так и сложными, состоящими из встроенных объектов.

Особенности очередей сообщений

путем предоставленияобмен сообщениямиа такжеочередь сообщениймодель, которая может бытьраспределенная средапредоставлено в соответствии сРазделение приложений,Эластичное масштабирование,резервное хранилище,Отсечение трафика,Асинхронная связь,синхронизация данныхи т. д. функция, которая действует какАрхитектура распределенной системыВажный компонент в , имеет центральное положение. Основные особенности очередей сообщений:

  • асинхронность: синхронная операция, занимающая много времени, обрабатывается асинхронно путем отправки сообщения. Сокращено время ожидания синхронизации.
  • Слабая связь: очередь сообщений уменьшает связь между службами.Различные службы могут обмениваться данными через очередь сообщений, не заботясь о деталях реализации друг друга, если формат сообщения определен.
  • распределенный: благодаря горизонтальному расширению потребителей снижается риск блокировки очереди сообщений и вероятность того, что один потребитель создаст единую точку отказа.
  • надежность: Очередь сообщений обычно сохраняет полученное сообщение на локальном жестком диске (после обработки сообщения сохраненная информация может быть удалена в соответствии с различными реализациями очереди сообщений), так что даже если приложение зависает или зависает сама очередь сообщений, Сообщения также можно перезагрузить.

Сценарий приложения очереди сообщений

Асинхронная обработка

Синхронная обработкаЭто означает, что с момента инициирования запроса до завершения окончательной обработки вызывающая сторона запроса была синхронно заблокирована в ожидании завершения обработки вызова.

Асинхронная обработкаОбработка означает, что в процессе инициации запроса код клиента вернулся, и он может продолжать свои последующие операции, не дожидаясь завершения обработки вызова.

Для некоторых операций, занимающих много времени и не требующих немедленного (синхронного) возврата результата операции, процесс обработки может выполняться асинхронно через очередь сообщений. Таким образом, обработка трудоемкой операции может быть отложена, а трудоемкая операция может быть сделана асинхронной без блокировки клиентской программы.Клиентская программа может продолжать выполняться до тех пор, пока не будет получен результат обработки, тем самым повышая производительность обработки. клиентской программы.

Основная цель асинхронной обработки состоит в том, чтобыСократить время ответа на запрос, чтобы добиться асинхронности неосновных процессов и улучшить реакцию системы.

Разделение приложений

Используя очереди сообщений, несколько производителей могут публиковать сообщения, а несколько потребителей могут потреблять сообщения для завершения всей логики бизнес-обработки.Производитель заботится только о том, правильно ли сообщение записано в очередь сообщений, а потребитель заботится только о том, чтобы получить его из очередь сообщений.Сообщения, а затем логика обработки, не требуются прямые интерактивные вызовы между производителями и потребителями, а также отсутствует связывание зависимостей кода.

Чем менее связан программный код, тем легче его поддерживать и расширять.

Отсечение трафика

Обычно широко используется в спайках.

В активности seckill сервер мгновенно получает большое количество запросов из-за чрезмерного количества мгновенных обращений и скачков трафика, в этом случае очень вероятно, что соответствующая система не может обработать запрос или даже аварийно завершает работу. Чтобы решить эту проблему, во внешний интерфейс приложения обычно добавляется очередь сообщений.

  • Запрос сначала записывается в очередь сообщений, а не обрабатывается непосредственно бизнес-системой, и создается буфер, что значительно снижает нагрузку на систему бизнес-обработки.
  • Длина очереди может быть ограничена.Как правило, количество пиковых событий ограничено.Пользователи, которые записывают в очередь позже, не могут получить продукт в течение нескольких секунд.Такой запрос может быть напрямую отклонен, и он может напрямую возвращать, что событие было закончился или товар был распродан.

Используя очереди сообщений, система может продолжать получать запросы, даже если трафик доступа продолжает расти. Хотя сообщение, сгенерированное производителем, быстрее, чем потребление потребителем, оно буферизуется через очередь сообщений.За короткий промежуток времени пропускная способность между производителем и потребителем не повлияет друг на друга, а стабильность система также может быть гарантирована.

Новостная рассылка

Очереди сообщений обычно имеют встроенные эффективные механизмы связи, поэтому их можно использовать только для обмена сообщениями, например, для реализации одноранговых очередей сообщений или чатов.

транслировать

Если очереди сообщений нет, каждый раз, когда в дело вмешивается новая бизнес-сторона, ей необходимо совместно отлаживать интерфейс. С очередью сообщений нужно только определить, доставлено ли сообщение в очередь.Что касается того, кто хочет подписаться, это вопрос ниже по течению, что, несомненно, значительно снижает нагрузку на разработку и совместную отладку.

обработка журнала

Использование очередей сообщений при обработке логов решает проблему большого количества передач логов (например, Kafka).

Режим передачи очереди сообщений

Режим точка-точка

одноранговый режимиспользуется дляпроизводитель сообщенийа такжепотребитель сообщениймеждуточка-точкаКоммуникация. Производитель сообщений отправляет сообщение в определенную очередь, идентифицированную именем (Queue). Прежде чем сообщение будет доставлено потребителю, ономесто храненияв этой очереди.сообщение очередиможно разместить вОЗУтак же может бытьУпорство, чтобы гарантировать, что сообщения все еще могут быть доставлены в случае сбоя службы сообщений.

Особенности однорангового режима:

  • У каждого сообщения есть только один потребитель (Consumer), то есть после того, как сообщение потреблено, оно больше не находится в очереди сообщений.
  • Между производителем и потребителем нет никакой зависимости.После того, как производитель отправит сообщение, независимо от того, работает потребитель или нет, это не повлияет на следующую отправку сообщения производителем.
  • После того, как потребитель успешно получит сообщение, ему необходимо успешно ответить очереди, чтобы очередь сообщений могла удалить текущее полученное сообщение.

Режим публикации/подписки (Publish/Subscribe)

Издатель/подписчикМодель поддерживает определенныйТема сообщенияНовости производства.0 или более подписчиковможно получить отконкретная тема сообщенияинтересующие новости.

В этой модели издатели и подписчики не знают друг о друге. Несколько потребителей могут получить сообщение, вдиктора такжеподписчиксуществует междузависимость от времени. Издателям необходимо создатьподписка(subscription), чтобы потребители могли подписаться.подписчикдолжны держатьтекущая деятельностьа такжеполучить сообщение.

Особенности режима публикации/щелчка:

  • У каждого сообщения может быть несколько подписчиков.
  • Между издателями и подписчиками существует временная зависимость.Для подписчика темы (Topic) он должен создать подписку перед использованием сообщений от издателя.
  • Чтобы получать сообщения, подписчики должны заранее подписаться на тему роли и поддерживать ее работу в сети.

Сравнение промежуточного программного обеспечения централизованного обмена сообщениями

В настоящее время в производственной среде чаще используются следующие очереди сообщений:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQЖдать.


Хорошая рекомендация статьи: