Обмен технологиями

День 17 из 100 дней фундаментального строительства. Начало работы с очередями сообщений

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

День 17 из 100 дней фундаментального строительства. Начало работы с очередями сообщений

Базовые концепты

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

MQ:Очередь сообщений

Очередь, в которой хранятся сообщения. При использовании сообщений они обрабатываются в порядке (сначала очередь, сначала отправлено).

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

Для чего нужна очередь сообщений?

Три знакомых преимущества

  • Асинхронная обработка. Асинхронная обработка реализуется через очередь сообщений. После отправки соответствующего сообщения в очередь сообщений результат возвращается немедленно, что сокращает время ответа и улучшает взаимодействие с пользователем. Впоследствии система потребляет сообщение.
  • Пиковое ограничение/ограничение тока: сначала сохраняйте сообщения транзакций, сгенерированные высокой степенью параллелизма, в течение короткого периода времени в очереди сообщений, а затем серверная служба будет медленно потреблять эти сообщения в соответствии со своими собственными возможностями, избегая, таким образом, прямого поражения обратной связи. - окончание обслуживания.
  • Уменьшите связанность системы: между модулями нет прямых вызовов, поэтому добавление или изменение модулей мало повлияет на другие модули.

Сценарии корпоративных приложений

  • Реализация распределенных транзакций. Одним из решений для распределенных транзакций являются транзакции MQ, которые поддерживаются большинством MQ.Транзакции позволяют приложениям потоковой передачи событийпотреблять, перерабатывать, производитьВесь процесс сообщения определяется как атомарная операция.
  • Гарантия последовательности: подходит для сценариев со строгими требованиями к порядку данных, поддерживаемых большинством MQ.
  • Обработка задержки/времени: сообщение не будет использовано сразу после отправки, но будет использовано через определенное время.
  • Обработка потоков данных. Для огромных потоков данных, генерируемых распределенными системами, таких как бизнес-журналы, данные мониторинга, поведение пользователей и т. д., очередь сообщений может собирать эти данные в режиме реального времени или в пакетном режиме и импортировать их в механизм обработки больших данных для добиться эффективной обработки данных. Управление потоками и их обработка.

Какие проблемы создает использование очередей сообщений?

Сниженная доступность системы: Доступность системы в некоторой степени снижается. Почему вы так говорите? Прежде чем присоединиться к MQ, вам не придется думать о потере сообщений или зависании MQ и т. д. Однако после внедрения MQ вам нужно об этом подумать!

Повышенная сложность системы: После присоединения к MQ вам необходимо убедиться, что сообщения не используются повторно, обрабатывать потерю сообщений, обеспечивать порядок доставки сообщений и другие вопросы!

Проблемы с согласованностью: Выше я упоминал, что очередь сообщений может обеспечить асинхронную реализацию, а асинхронность, создаваемая очередью сообщений, действительно может улучшить скорость ответа системы. Но что, если реальный потребитель сообщения воспринял сообщение неправильно? Это приведет к несогласованности данных!

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

Кафка

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

Стриминговая платформа имеет три ключевые функции:

  1. очередь сообщений: Публикация потоков сообщений и подписка на них. Эта функция аналогична очереди сообщений, поэтому Kafka также классифицируется как очередь сообщений.
  2. Отказоустойчивое постоянное хранилище записей потоков сообщений: Kafka будет сохранять сообщения на диск, эффективно избегая риска потери сообщений.
  3. Платформа потоковой обработки: Для обработки сообщений при их публикации Kafka предоставляет полную библиотеку потоковой обработки.

RocketMQ

RocketMQ — это облачная платформа обработки данных в реальном времени «сообщений, событий и потоков», исходный код которой разработан Alibaba. Она основана на Kafka и стала проектом Apache верхнего уровня.

Основные функции RocketMQ (взято с официального сайта RocketMQ):

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

RabbitMQ

RocketMQ — это облачная платформа обработки данных в реальном времени «сообщений, событий и потоков», исходный код которой разработан Alibaba. Она основана на Kafka и стала проектом Apache верхнего уровня.

Основные функции RocketMQ (взято с официального сайта RocketMQ):

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

Пульсар

Pulsar — ​​это облачная платформа распределенного потока сообщений нового поколения. Первоначально она была разработана Yahoo и стала проектом Apache верхнего уровня.

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

Ключевые особенности Pulsar следующие (взято с официального сайта):

  • Это следующее поколение облачной платформы распределенного потока сообщений.
  • Один экземпляр Pulsar изначально поддерживает несколько кластеров и может беспрепятственно выполнять репликацию сообщений между кластерами в компьютерных залах.
  • Чрезвычайно низкая задержка выпуска и сквозная задержка.
  • Плавно расширяется до более чем 1 миллиона тем.
  • Простой клиентский API, поддерживающий Java, Go, Python и C++.
  • Несколько режимов подписки для тем (эксклюзивный, общий и аварийный).
  • Доставка сообщений гарантируется с помощью механизма постоянного хранения сообщений, предоставляемого Apache BookKeeper.
  • Облегченная платформа бессерверных вычислений Pulsar Functions реализует потоковую обработку данных.
  • Pulsar IO, бессерверная платформа коннекторов, основанная на функциях Pulsar, упрощает перемещение данных в Apache Pulsar и из него.
  • Многоуровневое хранилище может выгружать данные из горячего хранилища в холодное/долговременное хранилище (например, S3, GCS), когда данные устаревают.

Сравнение приведенного выше MQ:

Контрастное направлениекраткое содержание
Пропускная способностьПропускная способность ActiveMQ и RabbitMQ на 10 000 уровней (у ActiveMQ худшая производительность) на порядок ниже, чем у RocketMQ и Kafka на 100 000 или даже на миллионе уровней.
Доступность Все могут достичь высокой доступности. ActiveMQ и RabbitMQ основаны на архитектуре «главный-подчиненный» для достижения высокой доступности. RocketMQ основан на распределенной архитектуре. Kafka также распространяется с несколькими копиями одних данных. Если несколько компьютеров выйдут из строя, потери или недоступности данных не произойдет.
СвоевременностьRabbitMQ разработан на основе Erlang, поэтому он обладает сильными возможностями параллелизма, чрезвычайно хорошей производительностью, очень низкой задержкой, достигающей уровня микросекунд, а другие находятся на уровне мс.
Поддержка функцийPulsar имеет более комплексные функции и поддерживает мультитенантность, несколько моделей потребления и режимы персистентности. Это облачная платформа распределенного потока сообщений нового поколения.
Сообщение потеряноActiveMQ и RabbitMQ имеют очень низкую вероятность потерь, а Kafka, RocketMQ и Pulsar теоретически могут достичь нулевой потери.

Подведем итог:

  • Хотя RabbitMQ немного уступает Kafka, RocketMQ и Pulsar с точки зрения пропускной способности, поскольку он разработан на основе Erlang, он обладает сильными возможностями параллелизма, чрезвычайно хорошей производительностью и очень низкой задержкой, достигающей уровня микросекунд. Однако, поскольку RabbitMQ разработан на основе Erlang, немногие отечественные компании имеют возможность проводить исследования и настройку на уровне исходного кода Erlang. Если бизнес-сценарий не имеет слишком высоких требований к параллелизму (100 000 или один миллион уровней), то RabbitMQ может быть вашим первым выбором среди этих очередей сообщений.
  • RocketMQ и Pulsar поддерживают строгую согласованность и могут использоваться в сценариях с высокими требованиями к согласованности сообщений.
  • RocketMQ производится Alibaba и представляет собой проект Java с открытым исходным кодом. Мы можем напрямую прочитать исходный код, а затем настроить MQ нашей собственной компании, который был протестирован в реальных бизнес-сценариях Alibaba.
  • Характеристики Kafka на самом деле очень очевидны, то есть он лишь предоставляет меньше основных функций, но обеспечивает сверхвысокую пропускную способность, задержку на уровне мс, чрезвычайно высокую доступность и надежность, а распространение можно произвольно расширять. В то же время для Kafka лучше всего поддерживать меньшее количество тем, чтобы обеспечить сверхвысокую пропускную способность. Единственным недостатком Kafka является то, что сообщения могут использоваться повторно, что очень незначительно влияет на точность данных. В области больших данных и сбора журналов это небольшое влияние можно игнорировать. Эта функция, естественно, подходит для реальных больших данных. -время вычислений и журналов сбора. Если это вычисления в реальном времени, сбор логов и другие сценарии в области больших данных, то использование Kafka является отраслевым стандартом, и здесь нет абсолютно никаких проблем. Сообщество очень активное и уж точно не будет порнографическим, не говоря уже о том. это почти стандарт де-факто в этой области во всем мире.

Простой опрос по самостоятельно разработанному MQ на уровне предприятия.

Самостоятельная разработка Alibaba: RocketMQ, RabbitMQ.

Tencent самостоятельно разработала: TDMQ, CMQ

Самоисследование Baidu: предстоит расследование

Байтовое самоисследование: BMQ

Самостоятельная разработка Meituan: Mafma

Самостоятельная разработка Qunar.com: QMQ

JD.com собственная разработка: JMQ

Остальные подлежат расследованию. .