Говоря об очереди сообщений и обычном промежуточном программном обеспечении для сообщений

задняя часть база данных Архитектура Безопасность

предисловие

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

В настоящее время используется болееочередь сообщенийимеютRabbitMQ,RocketMQ,ActiveMQ,Kafka,ZeroMQ,MetaMQи т. д., в то время как частьбаза данныхкакRedis,MySQLа такжеphxsqlТакже может быть реализована функция очереди сообщений.

текст

1. Обзор очередей сообщений

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

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

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

2.1. Использование асинхронного режима обработки

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

2.2. Разделение между прикладными системами

В основном это выражается в следующих двух моментах:

  1. Отправитель и получатель не обязаны знать друг друга, толькосообщение подтверждения;

  2. отправитель и получательне обязательно быть в сети одновременно.

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

3. Модель службы доставки очереди сообщений

очередь сообщенийМодель службы доставкиКак показано ниже:

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

4.1 Одноранговая модель

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

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

Функции:

  1. Используйте только одного потребителя для каждого сообщения;
  2. Отправитель и получатель не зависят от времени;
  3. Получатель подтверждает, что сообщение было принято и успешно обработано.

Схема показана ниже:

4.2 Модель публикации/подписки (Pub/Sub)

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

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

В этом случае у абонентакогда не подключен, опубликованное сообщение будетвосстановить соединениеВремяПереиздать,Как показано ниже:

характеристика:

  1. У каждого сообщения может быть несколько подписчиков;
  2. Клиент может получать сообщения только после подписки;
  3. Постоянные и временные подписки.

Уведомление:

  1. Издатели и подписчики зависят от времени: получатели и издатели могут получать сообщения, только если они устанавливают отношения подписки;
  2. Длительная подписка: после установления отношений подписки сообщение не исчезнет, ​​независимо от того, находится ли подписчик в сети или нет;
  3. Недлительные подписки: подписчики всегда должны быть в сети, чтобы получать сообщения. Приблизительно эквивалентно одноранговому режиму, когда есть только один абонент.

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

когда вам нужно использоватьочередь сообщений, сначала нужно рассмотреть его необходимость. Существует множество сценариев использования очередей сообщений.Приложения слабо связаны,Асинхронный режим обработки,Опубликовать и подписаться,возможная согласованность,ступенчатый контроль потокаибуфер журналаЖдать. И наоборот, при необходимостисильная консистенция, обратите внимание на результат обработки бизнес-логики, затем используйтеRPCкажется более подходящим.

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

непрофильныйПроцессАсинхронный, сокращение системыВремя отклика,улучшатьпропускная способность. Например:SMS-уведомление,Нажатие состояния терминала,App толкать,Регистрация пользователяЖдать.

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

Приложения

Регистрация пользователя веб-сайта, после успешной регистрации через некоторое время будет отправлено подтверждение по электронной почте или короткое сообщение.

5.2. Разделение системы

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

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

5.3. Конечная согласованность

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

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

  • Все не гарантировано100% Не теряйте сообщенияОчередь сообщений теоретически невозможно реализоватьвозможная согласованность.

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

5.4. Трансляция

Производитель/Потребительрежиме, нужно только заботиться о том, будет ли сообщениеочередь доставки, что касается тех, кто хочет подписаться и должен потреблять,вниз по течениюЭто, несомненно, значительно уменьшит нагрузку на разработку и совместную отладку.

5.5 Отсечение потока и управление потоком

когдаВосходящие и нисходящие системыКогда есть пробел в вычислительной мощности, используйтеочередь сообщенийсделать общий"воронка",провестиКонтроль ограничения тока. Распространять, когда нисходящий поток способен к обработке.

Например: после того, как пользователь успешно проведет оплату в платежной системе, система заказов отправит пользователю уведомление о вычете через систему SMS.СМС-системавозможно из-заЭффект короткой доски, скорость держитсяшлюзвверх (сотни запросов в секунду), а затемИнтерфейсный параллелизмНе на порядок. Следовательно, это вызываетплатежная системаиСМС-системаразница в вычислительной мощности.

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

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

Приложения

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

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выполнить. Это очень быстро и поддерживаетКлиенты на нескольких языкахипротокол, легко встраивается в среду корпоративных приложений и имеет множество расширенных функций.

а) Основные характеристики

  1. Соответствовать спецификации JMS:JMSСпецификация обеспечивает хорошие стандарты и гарантии, в том числе:Синхронизироватьилиасинхронныйрассылка сообщений, одноразовая и разовая рассылка сообщений,прием сообщенийиподпискаи Т. Д. следитьJMSПреимущество спецификации в том, что независимо от того, чтоJMSРеализуйте поставщиков, эти основные функции доступны;

  2. Гибкость подключения:ActiveMQпредоставляет широкий спектрдоговор о подключении, поддерживаемые протоколы:HTTP/S,IP многоадресная рассылка,SSL,TCP,UDPи Т. Д. Поддержка множества протоколов позволяетActiveMQИметь хорошую гибкость;

  3. Широкий выбор поддерживаемых протоколов:OpenWire,STOMP,REST,XMPP,AMQP;

  4. Плагины сохраняемости и плагины безопасности:ActiveMQпри условиимногократное сохранениевыберите. и,ActiveMQБезопасность также может быть полностью основана на потребностях пользователя.пользовательская аутентификацияиРазрешить;

  5. Широкий выбор поддерживаемых языков клиента:КромеJavaКроме того, есть:C/C++,.NET,Perl,PHP,Python,Ruby;

  6. прокси-кластер: несколькоActiveMQ играет рольможет сформироватькластероказывать услуги;

  7. Исключительно простое управление:ActiveMQОн был разработан с учетом интересов разработчиков. Таким образом, он не требует специального администратора, так как предоставляет простые и удобные функции управления. Есть много способовмонитор ActiveMQданные разного уровня, в том числе используемые вJConsoleили вActiveMQизWeb Consoleиспользуется вJMX. путем обработкиJMXпредупреждающее сообщение, используяскрипт командной строки, даже путем мониторинга различных типовбревно.

(б) Среда развертывания

ActiveMQможет работать наJavaна платформе, поддерживаемой языком. использоватьActiveMQнеобходимость:

  • Java JDK
  • ActiveMQИнсталляционный пакет

(с) Преимущества

  1. Кроссплатформенность (JAVAНаписание не зависит от платформы,ActiveMQможет работать практически на любомJVMначальство);

  2. Можно использоватьJDBC:можетсохранение данныхв базу данных. Хотя с помощьюJDBCуменьшитсяActiveMQпроизводительность, но самым привычным для разработчиков носителем информации всегда была база данных;

  3. служба поддержкиJMSСпецификация: ПоддержкаJMSПредоставленная спецификацияЕдиный интерфейс;

  4. служба поддержкиавтоматическое переподключениеиМеханизм повтора ошибки;

  5. С механизмом безопасности: поддержка на основеshiro,jaasи Т. Д.Механизм настройки безопасностиВозможноQueue/TopicпровестиАутентификация и авторизация;

  6. Идеальный мониторинг: идеальныймонитор,включаютWeb Console,JMX,ShellКомандная строка,JolokiaизRESTful API;

  7. Дружественный интерфейс: естьWeb ConsoleУдовлетворяет большинству случаев и многим другимсторонние компонентыможно использовать, например.hawtio;

(г) Недостатки

  1. Сообщество не так активноRabbitMQвысокий;

  2. Согласно другим отзывам пользователей, будут необъяснимые проблемы,потерянное сообщение;

  3. В настоящее время сосредоточьтесь наactivemq 6.0продуктApollo,правильно5.xменьше обслуживания;

  4. не подходит дляТысячи очередейсценарии применения;

7.2. RabbitMQ

RabbitMQВ2007выпущенный в 2009 году, являетсяAMQP (Расширенный протокол очереди сообщений), многоразовая корпоративная система сообщений является в настоящее время одним из самых популярных промежуточных программ для обмена сообщениями.

а) Основные характеристики

  1. надежность: предоставляет множество методов, позволяющихпредставлениеинадежностьмеждукомпромисс. Эти методы включаютмеханизм сохранения,Подтверждение доставки,Издатель подтверждениМеханизм высокой доступности;

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

  3. кластер сообщений: несколько в одной локальной сетиRabbitMQСервер можетполимеризациявместе используются как независимый логический агент;

  4. Высокая доступность очереди: очередь может быть на машине в кластерезеркало, чтобы убедиться, что гарантия такжебезопасность сообщений;

  5. Поддерживает несколько протоколов:служба поддержкиНесколько протоколов очереди сообщений;

  6. Поддерживает несколько языков:использоватьErlangНаписано на языке, поддержите, сколько сможете придуматьВсе языки программирования;

  7. интерфейс управления:RabbitMQиметь простой в использованииПользовательский интерфейс, чтобы пользователи моглимониториуправлятьИнформацияBrokerмногие аспекты;

  8. следящий механизм:еслиисключение сообщения,RabbitMQОбеспечить механизм отслеживания сообщений, пользователи могут узнать, что произошло;

  9. Механизм плагина: предоставляет множествоплагин, который можно расширять многими способами, а также вы можете писать свои собственные плагины.

(б) Среда развертывания

RabbitMQможет работать наErlangНа поддерживаемых языком платформах, включаяSolaris,BSD,Linux,MacOSX,TRU64,WindowsЖдать. использоватьRabbitMQнеобходимость:

  • ErLangязыковой пакет
  • RabbitMQИнсталляционный пакет

(с) Преимущества

  1. так какErlangОсобенности языка, производительность очереди сообщений лучше, поддержкаВысокий параллелизм;

  2. Надежный, стабильный, простой в использовании,Кроссплатформенность,служба поддержкимногоязычный, полная документация;

  3. У вас есть новостиМеханизм подтвержденияимеханизм сохранения, высокая надежность;

  4. Широкие возможности настройкимаршрутизация;

  5. интерфейс управленияОн относительно богат, а также широко применяется в интернет-компаниях, а сообщество очень активно.

(г) Недостатки

  1. Хотя в сочетанииErlangПреимущество параллелизма самого языка, производительность лучше, но это не способствуетВторичная разработка и обслуживание;

  2. ДостигнутоАрхитектура агентства, что означает, что сообщение может бытьцентральный узелрасстановка. Эта особенность делаетRabbitMQпрост в использовании и развертывании, но делает егоработает медленнее, так как центральный узелдобавлена ​​задержка,После инкапсуляции сообщениятакже крупнее;

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

7.3. RocketMQ

RocketMQотАлипродукты с открытым исходным кодом, сJavaРеализация языка, на которую ссылаются во время разработкиKafka, и сделал некоторые собственные улучшения,надежность сообщенияСравниватьKafkaлучше.RocketMQОн широко используется в АлиЗаказ,торговля,перезарядка,потоковые вычисления,сообщение,Потоковая передача журнала,binglog распределениесцена.

а) Основные характеристики

  1. на основемодель очереди:имеютвысокая производительность,Высокая надежность,Высокий режим реального времени,распределенныйФункции;

  2. Producer,Consumer,очередьоба поддерживаютраспределенный;

  3. Producerотправлять сообщения в некоторые очереди по очереди,сбор очерединазываетсяTopic.Consumerесли сделатьшироковещательное потребление, затемConsumerэкземпляр потребляет этоTopicсоответствующийвсе очереди; если сделатьПотребление кластера,нонесколько Consumerпримерсредний расходэтоTopicсоответствующий набор очередей;

  4. может гарантироватьСтрогий порядок сообщений;

  5. обеспечить богатыхрежим извлечения сообщений;

  6. Эффективный подписчикГоризонтальное расширениеспособность;

  7. в реальном времениизмеханизм подписки на сообщения;

  8. миллиардысообщения накапливаютсяспособность;

  9. Меньше внешних зависимостей.

(б) Среда развертывания

RocketMQможет работать наJavaна платформе, поддерживаемой языком. использоватьRocketMQнеобходимость:

  • Java JDK
  • Установитьgit,Maven
  • RocketMQИнсталляционный пакет

(с) Преимущества

  1. автономныйслужба поддержки1более десяти тысячпостоянная очередь;

  2. RocketMQВсе сообщениянастойчивый, сначала напишите в системуPAGECACHE,Потомщетка, можно гарантироватьОЗУидискиметь часть данных идоступкогда прямочитать по памяти.

  3. Модель проста и интерфейс удобен (JMSВо многих случаях интерфейс не очень удобен);

  4. очень хорошая производительность, может позволитьКуча сообщенийсуществуетBrokerсередина;

  5. служба поддержкиМножественные модели потребления,включаютПотребление кластера,широковещательное потреблениеЖдать;

  6. Каждая ссылкаПроект распределенного расширения,служба поддержкиМастер-рабиВысокая доступность;

  7. Степень разработки более активна, а обновление версии происходит очень быстро.

(г) Недостатки

  1. поддерживаетсяязык клиентаВ настоящее время не так многоJavaиC++C++незрелый

  2. RocketMQВнимание и зрелость сообщества не так хороши, как первые два;

  3. нетWebинтерфейс управления, обеспечивающийCLI(Интерфейс командной строки) Admin Tool приноситЗапрос,управлятьиДиагностика различных проблем;

  4. не здесьMQреализован в ядреJMSинтерфейс и т.д.;

7.4. Kafka

Apache KafkaЯвляетсяОпубликовать распределенное сообщение и подписатьсясистема. это было изначальноLinkedInКомпания основана на уникальном дизайне, реализованном какРаспределенная система отправки логов (a distributed commit log), затем становитсяApacheчасть проекта.Kafka Эффективная производительность,Хорошо масштабируемыйиНастойчивый. этоХарактеристики перегородки,ВоспроизводимыйиотказоустойчивойВсе приятные черты.

а) Основные характеристики

  1. быстрая настойчивость: допустимоO(1)под накладными расходами системысохранение сообщения;

  2. высокая пропускная способность: может быть достигнуто на общем сервере10W/sизпропускная способность;

  3. полностью распределенная система:Broker,ProducerиConsumerОба изначально поддерживаются автоматическираспределенный, который автоматически реализуетсябалансировки нагрузки;

  4. служба поддержкиСинхронизироватьиасинхронныйкопировать дваМеханизм высокой доступности;

  5. служба поддержкиОтправка данных пакетамииВытащить;

  6. Технология нулевого копирования (zero-copy):уменьшатьIOшаги по улучшениюПропускная способность системы;

  7. перенос данных,Расширениепрозрачный для пользователей;

  8. Без простоевМашина может быть расширена;

  9. Другие особенности: обильныймодель вытягивания сообщений, эффективныйГоризонтальное масштабирование подписчика, в реальном времениПодписка на новости, миллиардвозможность стекирования сообщений, Механизм периодического удаления;

(б) Среда развертывания

использоватьKafkaнеобходимость:

  • Java JDK
  • KafkaИнсталляционный пакет

(с) Преимущества

  1. Богатый клиентский язык:служба поддержкиJava,.Net,PHP,Ruby,Python,Goи другие языки;

  2. высокая производительность: автономная записьTPSо10010 000/сек, размер сообщения10байты;

  3. поставкаПолностью распределенная архитектура, Иreplicaмеханизм, имеет более высокуюДоступностьинадежность, что теоретически поддерживаетСообщения накапливаются бесконечно;

  4. Поддержка пакетных операций;

  5. потребительиспользоватьPullспособ получить сообщение.порядок сообщений,контролируяВозможность гарантировать, что все сообщения потребляются и потребляются толькооднажды;

  6. Есть отличные третьи стороныKafka Webинтерфейс управленияKafka-Manager;

  7. существуетполе журналаОн относительно зрелый и используется многими компаниями и многими проектами с открытым исходным кодом.

(г) Недостатки

  1. KafkaОдна машина превышает64Кусокочередь/разделчас,LoadБудет заметный скачок.очередьболее,нагрузкавыше, отправить сообщениеболее длительное время отклика;

  2. использоватькороткий метод опроса,в реальном временив зависимости отинтервал опроса;

  3. Ошибка потребленияПовтор не поддерживается;

  4. служба поддержкипорядок сообщений,ноАгент не работаетПосле этого будет производитьсясообщение не по порядку;

  5. Сообщения обновляются медленно.

7.5 Сравнение нескольких очередей сообщений

Вот сравнение различий между вышеупомянутыми четырьмя очередями сообщений:

Kafkaлежит вРаспределенная архитектура,RabbitMQна основеAMQP протоколреализовать,RocketMQИдея исходит изKafka, изменился наструктура ведущий-ведомый,существуеттранзакционныйинадежностьаспекты были оптимизированы. Говоря в широком смысле,Электронная коммерция,финансыЭквивалентТранзакционная согласованностьОчень требовательный, можно считатьRabbitMQиRocketMQ,правильновысокие требования к производительностиможно считатьKafka.

резюме

В этой статье представлены характеристики очередей сообщений,Модель службы доставки, Новостиспособ передачи, НовостиДвухтактный режим. затем представилActiveMQ,RabbitMQ,RocketMQиKafkaНесколько общих очередей сообщений, разработанныхразличные очереди сообщенийизГлавная особенностьиПреимущества и недостатки. Я полагаю, что благодаря этой статье вы получите более глубокое понимание и понимание очереди сообщений и выбора связанных технологий. Больше деталей и принципов нужно видеть на практике!


Добро пожаловать в технический публичный аккаунт: Zero One Technology Stack

零壹技术栈

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