предисловие
очередь сообщенийПостепенно превратился в корпоративную прикладную системувнутренняя связьосновные средства. она имеетнизкое сцепление,надежная доставка,транслировать,управление потоком,возможная согласованностьи другие функции.
В настоящее время используется болееочередь сообщенийимеютRabbitMQ
,RocketMQ
,ActiveMQ
,Kafka
,ZeroMQ
,MetaMQ
и т. д., в то время как частьбаза данныхкакRedis
,MySQL
а такжеphxsql
Также может быть реализована функция очереди сообщений.
текст
1. Обзор очередей сообщений
очередь сообщенийозначает использоватьЭффективный и надежныйизмеханизм передачи сообщенийнезависимая платформаобмен данными, и на основепередача данныхинтегрировать распределенные системы.
предоставляяобмен сообщениямииочередь сообщениймодель, которая может бытьраспределенная средапредоставлено в соответствии сРазделение приложений,Эластичное масштабирование,резервное хранилище,Отсечение трафика,Асинхронная связь,синхронизация данныхи т. д. функция, которая действует какАрхитектура распределенной системыВажный компонент в , имеет центральное положение.
2. Особенности очередей сообщений
2.1. Использование асинхронного режима обработки
отправитель сообщенияСообщение можно отправить, не дожидаясь ответа.отправитель сообщенияотправить сообщение навиртуальный канал(темаилиочередь)начальство,получатель сообщенияноподпискаилимониторканал. Сообщение может быть перенаправлено наодин или большеполучатели сообщений, ни один из которых не долженотправитель сообщениясделатьсинхронный ответ. весь процессАсинхронный.
2.2. Разделение между прикладными системами
В основном это выражается в следующих двух моментах:
-
Отправитель и получатель не обязаны знать друг друга, толькосообщение подтверждения;
-
отправитель и получательне обязательно быть в сети одновременно.
Например, для обеспечения целостности данных в системах онлайн-торговли.в конечном итоге последовательный,существуетплатежная системаПосле того, как обработка завершена,Результат платежаставитьПО промежуточного слоя сообщений, уведомлениесистема заказовИсправлятьСтатус оплаты заказа. Две системы разделены промежуточным программным обеспечением сообщений.
3. Модель службы доставки очереди сообщений
очередь сообщенийМодель службы доставкиКак показано ниже:
4. Режим передачи очереди сообщений
4.1 Одноранговая модель
одноранговая модельиспользуется дляпроизводитель сообщенийипотребитель сообщениймеждуточка-точкаКоммуникация. Производитель сообщений отправляет сообщение конкретному потребителю, указанному по имени. На самом деле это имя для одной из потребляющих услуг.очередь(Queue
), прежде чем сообщение будет доставлено потребителю, ономесто храненияв этой очереди.сообщение очередиможно разместить вОЗУтак же может бытьУпорство, чтобы гарантировать, что сообщения все еще могут быть доставлены в случае сбоя службы сообщений.
Традиционное промежуточное ПО для одноранговых сообщений обычно состоит изслужба очереди сообщений,служба обмена сообщениями,очередь сообщенийиAPI обмена сообщениями API
состав, а его типичная структура показана на рисунке ниже.
Функции:
- Используйте только одного потребителя для каждого сообщения;
- Отправитель и получатель не зависят от времени;
- Получатель подтверждает, что сообщение было принято и успешно обработано.
Схема показана ниже:
4.2 Модель публикации/подписки (Pub/Sub)
Издатель/подписчикМодель поддерживает определенныйТема сообщенияНовости производства.0
илинесколько подписчиковможно получить отконкретная тема сообщенияинтересующие новости.
В этой модели издатели и подписчики не знают друг друга, как анонимная доска объявлений. Этот шаблон резюмируется следующим образом: несколько потребителей могут получить сообщение вдикториподписчиксуществует междузависимость от времени. Издателям необходимо создатьподписка(subscription
), чтобы потребители могли подписаться.подписчикдолжны держатьтекущая деятельностьиполучить сообщение.
В этом случае у абонентакогда не подключен, опубликованное сообщение будетвосстановить соединениеВремяПереиздать,Как показано ниже:
характеристика:
- У каждого сообщения может быть несколько подписчиков;
- Клиент может получать сообщения только после подписки;
- Постоянные и временные подписки.
Уведомление:
- Издатели и подписчики зависят от времени: получатели и издатели могут получать сообщения, только если они устанавливают отношения подписки;
- Длительная подписка: после установления отношений подписки сообщение не исчезнет, независимо от того, находится ли подписчик в сети или нет;
- Недлительные подписки: подписчики всегда должны быть в сети, чтобы получать сообщения. Приблизительно эквивалентно одноранговому режиму, когда есть только один абонент.
5. Сценарий приложения очереди сообщений
когда вам нужно использоватьочередь сообщений, сначала нужно рассмотреть его необходимость. Существует множество сценариев использования очередей сообщений.Приложения слабо связаны,Асинхронный режим обработки,Опубликовать и подписаться,возможная согласованность,ступенчатый контроль потокаибуфер журналаЖдать. И наоборот, при необходимостисильная консистенция, обратите внимание на результат обработки бизнес-логики, затем используйтеRPC
кажется более подходящим.
5.1 Асинхронная обработка
непрофильныйПроцессАсинхронный, сокращение системыВремя отклика,улучшатьпропускная способность. Например:SMS-уведомление,Нажатие состояния терминала,App
толкать,Регистрация пользователяЖдать.
очередь сообщенийОбычно встроенный вЭффективный механизм коммуникации, так что его также можно использовать для чистой передачи сообщений, например, для реализацииочередь сообщений точка-точкаиличатЖдать.
Приложения
Регистрация пользователя веб-сайта, после успешной регистрации через некоторое время будет отправлено подтверждение по электронной почте или короткое сообщение.
5.2. Разделение системы
-
не между системамисильно связанный,получатель сообщенияМожет быть добавлен по желанию без измененийкод отправителя сообщения.отправитель сообщенияуспех не зависит отполучатель сообщения(Например: некоторые интерфейсы банка нестабильны, но звонящему не нужно полагаться на эти интерфейсы).
-
Не сильно зависитДля непрофильных процессов этой системы, длянеосновной процесс, который можно поместить в очередь сообщений дляпотребитель сообщенийпотреблять по требованию, в то время какНе влияет на основной основной процесс.
5.3. Конечная согласованность
возможная согласованностьнеточередь сообщенийобязательные функции, но на них действительно можно положитьсяочередь сообщенийсделатьвозможная согласованностьвещь.
-
Сначала напишите сообщение, а затем работайте, убедитесь, что операция завершена, прежде чем изменять статус сообщения.Механизм компенсации задач на времявнедрить сообщениеНадежная отправка и получение, надежное выполнение деловых операций, обратите внимание наповтор сообщенияиИдемпотентный дизайн.
-
Все не гарантировано
100%
Не теряйте сообщенияОчередь сообщений теоретически невозможно реализоватьвозможная согласованность.
рисунок
Kafka
Тип дизайна, на уровне дизайна, естьпотерянное сообщениеможно (напримерЧистка по времени, сообщение будет потеряно при отключении питания). Даже если потеряна только одна тысячная часть сообщения, бизнес должен использовать другие средства для обеспечения правильного результата.
5.4. Трансляция
Производитель/Потребительрежиме, нужно только заботиться о том, будет ли сообщениеочередь доставки, что касается тех, кто хочет подписаться и должен потреблять,вниз по течениюЭто, несомненно, значительно уменьшит нагрузку на разработку и совместную отладку.
5.5 Отсечение потока и управление потоком
когдаВосходящие и нисходящие системыКогда есть пробел в вычислительной мощности, используйтеочередь сообщенийсделать общий"воронка",провестиКонтроль ограничения тока. Распространять, когда нисходящий поток способен к обработке.
Например: после того, как пользователь успешно проведет оплату в платежной системе, система заказов отправит пользователю уведомление о вычете через систему SMS.СМС-системавозможно из-заЭффект короткой доски, скорость держитсяшлюзвверх (сотни запросов в секунду), а затемИнтерфейсный параллелизмНе на порядок. Следовательно, это вызываетплатежная системаиСМС-системаразница в вычислительной мощности.
Однако, если пользователь получает текстовое сообщение примерно через полминуты ночью, это, как правило, не является большой проблемой. Если очереди сообщений нет, две системы проходятвести переговоры,раздвижное окноЭто не означает, что такие сложные решения не могут быть реализованы. носложность системыЭкспоненциальный рост неизбежновверх по течениюиливниз по течениюДелатьместо хранения, и обработатьвыбор времени,скоплениеи ряд вопросов. и всякий раз, когда естьЕсть разница в вычислительной мощностикогда ты нуждаешьсяв одиночествеРазработайте набор логики для поддержания этого набора логики.
Следовательно, это относительно распространенный способ использования промежуточной системы для создания дампа коммуникационного содержимого двух систем и последующей обработки этих сообщений, когда нижестоящая система способна обрабатывать эти сообщения.
Приложения
- Рассматривайте очереди сообщений как надежныеместо подготовки сообщения, в некоторой степенисообщения накапливаются;
- Регулярная доставка сообщений, например имитацияПользователь убиваетпосещать, проводитьСтресс-тест производительности системы.
5.6. Обработка журнала
использовать очередь сообщенийобработка журналав, напримерKafka
приложение, решитьМассивное бревноПроблемы с передачей и буферизацией.
Приложения
Централизованный сбор журналов для вычисленийPV
,Анализ поведения пользователейи Т. Д.
5.7. Обмен сообщениями
Очереди сообщений обычно встроеныЭффективный механизм коммуникации, поэтому также может использоваться для простыхНовостная рассылка, такие как реализацияочередь сообщений точка-точкаиличатЖдать.
6. Двухтактная модель очереди сообщений
6.1 Модель push-сообщений
производитель сообщенийотправить сообщениеочередь сообщений,очередь сообщенийотправить сообщение напотребитель сообщений.
6.2. Модель сообщения по запросу
потребительпроситьочередь сообщенийпринять сообщение,производитель сообщенийоточередь сообщенийвытащить сообщение.
6.3 Разница между двумя типами
7. Сравнение технологий очередей сообщений
В этом разделе в основном представлены четыре часто используемые очереди сообщений (ActiveMQ
/ RabbitMQ
/ RocketMQ
/ Kafka
) основные черты, преимущества и недостатки.
7.1. ActiveMQ
ActiveMQ
ОтApache
произведено,ActiveMQ
полностью поддерживаетсяJMS1.1
иJ2EE 1.4
нормативныйJMS Provider
выполнить. Это очень быстро и поддерживаетКлиенты на нескольких языкахипротокол, легко встраивается в среду корпоративных приложений и имеет множество расширенных функций.
а) Основные характеристики
-
Соответствовать спецификации JMS:
JMS
Спецификация обеспечивает хорошие стандарты и гарантии, в том числе:Синхронизироватьилиасинхронныйрассылка сообщений, одноразовая и разовая рассылка сообщений,прием сообщенийиподпискаи Т. Д. следитьJMS
Преимущество спецификации в том, что независимо от того, чтоJMS
Реализуйте поставщиков, эти основные функции доступны; -
Гибкость подключения:
ActiveMQ
предоставляет широкий спектрдоговор о подключении, поддерживаемые протоколы:HTTP/S
,IP
многоадресная рассылка,SSL
,TCP
,UDP
и Т. Д. Поддержка множества протоколов позволяетActiveMQ
Иметь хорошую гибкость; -
Широкий выбор поддерживаемых протоколов:
OpenWire
,STOMP
,REST
,XMPP
,AMQP
; -
Плагины сохраняемости и плагины безопасности:
ActiveMQ
при условиимногократное сохранениевыберите. и,ActiveMQ
Безопасность также может быть полностью основана на потребностях пользователя.пользовательская аутентификацияиРазрешить; -
Широкий выбор поддерживаемых языков клиента:Кроме
Java
Кроме того, есть:C/C++
,.NET
,Perl
,PHP
,Python
,Ruby
; -
прокси-кластер: несколько
ActiveMQ
играет рольможет сформироватькластероказывать услуги; -
Исключительно простое управление:
ActiveMQ
Он был разработан с учетом интересов разработчиков. Таким образом, он не требует специального администратора, так как предоставляет простые и удобные функции управления. Есть много способовмониторActiveMQ
данные разного уровня, в том числе используемые вJConsole
или вActiveMQ
изWeb Console
используется вJMX
. путем обработкиJMX
предупреждающее сообщение, используяскрипт командной строки, даже путем мониторинга различных типовбревно.
(б) Среда развертывания
ActiveMQ
может работать наJava
на платформе, поддерживаемой языком. использоватьActiveMQ
необходимость:
Java JDK
-
ActiveMQ
Инсталляционный пакет
(с) Преимущества
-
Кроссплатформенность (
JAVA
Написание не зависит от платформы,ActiveMQ
может работать практически на любомJVM
начальство); -
Можно использовать
JDBC
:можетсохранение данныхв базу данных. Хотя с помощьюJDBC
уменьшитсяActiveMQ
производительность, но самым привычным для разработчиков носителем информации всегда была база данных; -
служба поддержки
JMS
Спецификация: ПоддержкаJMS
Предоставленная спецификацияЕдиный интерфейс; -
служба поддержкиавтоматическое переподключениеиМеханизм повтора ошибки;
-
С механизмом безопасности: поддержка на основе
shiro
,jaas
и Т. Д.Механизм настройки безопасностиВозможноQueue/Topic
провестиАутентификация и авторизация; -
Идеальный мониторинг: идеальныймонитор,включают
Web Console
,JMX
,Shell
Командная строка,Jolokia
изRESTful API
; -
Дружественный интерфейс: есть
Web Console
Удовлетворяет большинству случаев и многим другимсторонние компонентыможно использовать, например.hawtio
;
(г) Недостатки
-
Сообщество не так активно
RabbitMQ
высокий; -
Согласно другим отзывам пользователей, будут необъяснимые проблемы,потерянное сообщение;
-
В настоящее время сосредоточьтесь на
activemq 6.0
продуктApollo
,правильно5.x
меньше обслуживания; -
не подходит дляТысячи очередейсценарии применения;
7.2. RabbitMQ
RabbitMQ
В2007
выпущенный в 2009 году, являетсяAMQP
(Расширенный протокол очереди сообщений), многоразовая корпоративная система сообщений является в настоящее время одним из самых популярных промежуточных программ для обмена сообщениями.
а) Основные характеристики
-
надежность: предоставляет множество методов, позволяющихпредставлениеинадежностьмеждукомпромисс. Эти методы включаютмеханизм сохранения,Подтверждение доставки,Издатель подтверждениМеханизм высокой доступности;
-
гибкая маршрутизация: сообщение проходит до попадания в очередьвыключательпровестимаршрутизацияиз.
RabbitMQ
Обеспечивает типичную логику маршрутизацииРазличные встроенные переключателитип. Если у вас есть более сложные потребности в маршрутизации, вы можете комбинировать эти коммутаторы и даже реализовать свой собственный тип коммутатора и использовать его в качествеRabbitMQ
изплагиниспользовать; -
кластер сообщений: несколько в одной локальной сети
RabbitMQ
Сервер можетполимеризациявместе используются как независимый логический агент; -
Высокая доступность очереди: очередь может быть на машине в кластерезеркало, чтобы убедиться, что гарантия такжебезопасность сообщений;
-
Поддерживает несколько протоколов:служба поддержкиНесколько протоколов очереди сообщений;
-
Поддерживает несколько языков:использовать
Erlang
Написано на языке, поддержите, сколько сможете придуматьВсе языки программирования; -
интерфейс управления:
RabbitMQ
иметь простой в использованииПользовательский интерфейс, чтобы пользователи моглимониториуправлятьИнформацияBroker
многие аспекты; -
следящий механизм:еслиисключение сообщения,
RabbitMQ
Обеспечить механизм отслеживания сообщений, пользователи могут узнать, что произошло; -
Механизм плагина: предоставляет множествоплагин, который можно расширять многими способами, а также вы можете писать свои собственные плагины.
(б) Среда развертывания
RabbitMQ
может работать наErlang
На поддерживаемых языком платформах, включаяSolaris
,BSD
,Linux
,MacOSX
,TRU64
,Windows
Ждать. использоватьRabbitMQ
необходимость:
-
ErLang
языковой пакет -
RabbitMQ
Инсталляционный пакет
(с) Преимущества
-
так как
Erlang
Особенности языка, производительность очереди сообщений лучше, поддержкаВысокий параллелизм; -
Надежный, стабильный, простой в использовании,Кроссплатформенность,служба поддержкимногоязычный, полная документация;
-
У вас есть новостиМеханизм подтвержденияимеханизм сохранения, высокая надежность;
-
Широкие возможности настройкимаршрутизация;
-
интерфейс управленияОн относительно богат, а также широко применяется в интернет-компаниях, а сообщество очень активно.
(г) Недостатки
-
Хотя в сочетании
Erlang
Преимущество параллелизма самого языка, производительность лучше, но это не способствуетВторичная разработка и обслуживание; -
ДостигнутоАрхитектура агентства, что означает, что сообщение может бытьцентральный узелрасстановка. Эта особенность делает
RabbitMQ
прост в использовании и развертывании, но делает егоработает медленнее, так как центральный узелдобавлена задержка,После инкапсуляции сообщениятакже крупнее; -
нужно учитьсядовольно сложныйизИнтерфейсы и протоколы, затраты на обучение и обслуживание высоки.
7.3. RocketMQ
RocketMQ
отАлипродукты с открытым исходным кодом, сJava
Реализация языка, на которую ссылаются во время разработкиKafka
, и сделал некоторые собственные улучшения,надежность сообщенияСравниватьKafka
лучше.RocketMQ
Он широко используется в АлиЗаказ,торговля,перезарядка,потоковые вычисления,сообщение,Потоковая передача журнала,binglog
распределениесцена.
а) Основные характеристики
-
на основемодель очереди:имеютвысокая производительность,Высокая надежность,Высокий режим реального времени,распределенныйФункции;
-
Producer
,Consumer
,очередьоба поддерживаютраспределенный; -
Producer
отправлять сообщения в некоторые очереди по очереди,сбор очерединазываетсяTopic
.Consumer
если сделатьшироковещательное потребление, затемConsumer
экземпляр потребляет этоTopic
соответствующийвсе очереди; если сделатьПотребление кластера,нонесколькоConsumer
примерсредний расходэтоTopic
соответствующий набор очередей; -
может гарантироватьСтрогий порядок сообщений;
-
обеспечить богатыхрежим извлечения сообщений;
-
Эффективный подписчикГоризонтальное расширениеспособность;
-
в реальном времениизмеханизм подписки на сообщения;
-
миллиардысообщения накапливаютсяспособность;
-
Меньше внешних зависимостей.
(б) Среда развертывания
RocketMQ
может работать наJava
на платформе, поддерживаемой языком. использоватьRocketMQ
необходимость:
Java JDK
- Установить
git
,Maven
-
RocketMQ
Инсталляционный пакет
(с) Преимущества
-
автономныйслужба поддержки
1
более десяти тысячпостоянная очередь; -
RocketMQ
Все сообщениянастойчивый, сначала напишите в системуPAGECACHE
,Потомщетка, можно гарантироватьОЗУидискиметь часть данных идоступкогда прямочитать по памяти. -
Модель проста и интерфейс удобен (
JMS
Во многих случаях интерфейс не очень удобен); -
очень хорошая производительность, может позволитьКуча сообщенийсуществует
Broker
середина; -
служба поддержкиМножественные модели потребления,включаютПотребление кластера,широковещательное потреблениеЖдать;
-
Каждая ссылкаПроект распределенного расширения,служба поддержкиМастер-рабиВысокая доступность;
-
Степень разработки более активна, а обновление версии происходит очень быстро.
(г) Недостатки
-
поддерживаетсяязык клиентаВ настоящее время не так много
Java
иC++
,вC++
незрелый -
RocketMQ
Внимание и зрелость сообщества не так хороши, как первые два; -
нет
Web
интерфейс управления, обеспечивающийCLI
(Интерфейс командной строки) Admin Tool приноситЗапрос,управлятьиДиагностика различных проблем; -
не здесь
MQ
реализован в ядреJMS
интерфейс и т.д.;
7.4. Kafka
Apache Kafka
ЯвляетсяОпубликовать распределенное сообщение и подписатьсясистема. это было изначальноLinkedIn
Компания основана на уникальном дизайне, реализованном какРаспределенная система отправки логов (a distributed commit log
), затем становитсяApache
часть проекта.Kafka
Эффективная производительность,Хорошо масштабируемыйиНастойчивый. этоХарактеристики перегородки,ВоспроизводимыйиотказоустойчивойВсе приятные черты.
а) Основные характеристики
-
быстрая настойчивость: допустимо
O(1)
под накладными расходами системысохранение сообщения; -
высокая пропускная способность: может быть достигнуто на общем сервере
10W/s
изпропускная способность; -
полностью распределенная система:
Broker
,Producer
иConsumer
Оба изначально поддерживаются автоматическираспределенный, который автоматически реализуетсябалансировки нагрузки; -
служба поддержкиСинхронизироватьиасинхронныйкопировать дваМеханизм высокой доступности;
-
служба поддержкиОтправка данных пакетамииВытащить;
-
Технология нулевого копирования (zero-copy):уменьшать
IO
шаги по улучшениюПропускная способность системы; -
перенос данных,Расширениепрозрачный для пользователей;
-
Без простоевМашина может быть расширена;
-
Другие особенности: обильныймодель вытягивания сообщений, эффективныйГоризонтальное масштабирование подписчика, в реальном времениПодписка на новости, миллиардвозможность стекирования сообщений, Механизм периодического удаления;
(б) Среда развертывания
использоватьKafka
необходимость:
Java JDK
-
Kafka
Инсталляционный пакет
(с) Преимущества
-
Богатый клиентский язык:служба поддержки
Java
,.Net
,PHP
,Ruby
,Python
,Go
и другие языки; -
высокая производительность: автономная запись
TPS
о100
10 000/сек, размер сообщения10
байты; -
поставкаПолностью распределенная архитектура, И
replica
механизм, имеет более высокуюДоступностьинадежность, что теоретически поддерживаетСообщения накапливаются бесконечно; -
Поддержка пакетных операций;
-
потребительиспользовать
Pull
способ получить сообщение.порядок сообщений,контролируяВозможность гарантировать, что все сообщения потребляются и потребляются толькооднажды; -
Есть отличные третьи стороны
Kafka Web
интерфейс управленияKafka-Manager
; -
существуетполе журналаОн относительно зрелый и используется многими компаниями и многими проектами с открытым исходным кодом.
(г) Недостатки
-
Kafka
Одна машина превышает64
Кусокочередь/разделчас,Load
Будет заметный скачок.очередьболее,нагрузкавыше, отправить сообщениеболее длительное время отклика; -
использоватькороткий метод опроса,в реальном временив зависимости отинтервал опроса;
-
Ошибка потребленияПовтор не поддерживается;
-
служба поддержкипорядок сообщений,ноАгент не работаетПосле этого будет производитьсясообщение не по порядку;
-
Сообщения обновляются медленно.
7.5 Сравнение нескольких очередей сообщений
Вот сравнение различий между вышеупомянутыми четырьмя очередями сообщений:
Kafka
лежит вРаспределенная архитектура,RabbitMQ
на основеAMQP
протоколреализовать,RocketMQ
Идея исходит изKafka
, изменился наструктура ведущий-ведомый,существуеттранзакционныйинадежностьаспекты были оптимизированы. Говоря в широком смысле,Электронная коммерция,финансыЭквивалентТранзакционная согласованностьОчень требовательный, можно считатьRabbitMQ
иRocketMQ
,правильновысокие требования к производительностиможно считатьKafka
.
резюме
В этой статье представлены характеристики очередей сообщений,Модель службы доставки, Новостиспособ передачи, НовостиДвухтактный режим. затем представилActiveMQ
,RabbitMQ
,RocketMQ
иKafka
Несколько общих очередей сообщений, разработанныхразличные очереди сообщенийизГлавная особенностьиПреимущества и недостатки. Я полагаю, что благодаря этой статье вы получите более глубокое понимание и понимание очереди сообщений и выбора связанных технологий. Больше деталей и принципов нужно видеть на практике!
Добро пожаловать в технический публичный аккаунт: Zero One Technology Stack
Эта учетная запись будет продолжать делиться сухими товарами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.