Очередь сообщений (MQ) — это метод связи между приложениями. Приложения обмениваются данными, записывая и извлекая данные (сообщения) для конкретных приложений в очереди и из нее, не требуя выделенных соединений для их связывания. Обмен сообщениями относится к связи между программами путем отправки данных в сообщениях, а не путем прямого вызова друг друга, что обычно используется для таких методов, как удаленные вызовы процедур. Очередь относится к приложениям, взаимодействующим через очереди. Использование очередей устраняет требование одновременного выполнения принимающих и отправляющих приложений.
Почему MQ?
сцены, которые будут использоваться
разъединение
асинхронный
отсечение пика
Пример сценария
разъединение
Зависимости задач, управляемые данными
Что такое зависимость задач?Например, интернет-компании часто выполняют некоторые задачи по статистике данных рано утром, и эти задачи имеют определенные зависимости, такие как:
1) задача3 должна использовать вывод задачи2 в качестве ввода
2) задача2 должна использовать вывод задачи1 в качестве ввода
В этом случае существует зависимость задач между задачей1, задачей2 и задачей3, и сначала должна выполняться задача1, затем задача2, а затем задача3.
не используя MQ
Для таких требований обычной реализацией является использование cron для ручного планирования выполнения:
1) задача1, выполняется в 0:00, время выполнения опыта 50 минут
2) задача2, выполняется в 1:00 (зарезервируйте 10-минутный буфер для задачи1), и эмпирическое время выполнения также составляет 50 минут
3) задача3, выполненная в 2:00 (зарезервируйте 10-минутный буфер для задачи2)
Недостатком такого подхода является:
1) Если время выполнения задачи превышает зарезервированное буферное время, вы получите неправильные результаты, потому что пост-задача не знает, успешно ли выполнена предзадача.В это время вам нужно вручную перезапустить задачу, и вам, возможно, придется скорректировать расписание.
2) Время выполнения общей задачи становится больше, а буферов всегда резервируется много.Если предзадача выполнена заранее, постзадача не запустится заранее
3) Если задача зависит от нескольких задач, эта задача будет называться критическим путем, и графику трудно отразить зависимости, и легко сделать ошибки
4) Если нужно скорректировать время выполнения одной задачи, будет скорректировано время выполнения нескольких задач.
Использование MQ
Оптимизационное решение состоит в использовании развязки MQ:
1) задача1 запускается вовремя и по окончании отправляет сообщение "задача1 выполнена"
2) задача2 подписывается на сообщение «задача 1 выполнена», начинает выполнение, как только получает сообщение, и отправляет сообщение «задача 2 выполнена» после окончания
3) То же самое верно для задачи 3
Преимущества использования MQ:
1) Нет необходимости резервировать буфер, после выполнения вышестоящей задачи нижестоящая задача всегда будет выполняться в первый раз.
2) Зависит от нескольких задач и легко обрабатывается несколькими задачами, просто нужно подписаться на соответствующие сообщения
3) Есть изменения во времени выполнения задачи, и подчиненным задачам не нужно корректировать время выполнения
MQ используется только для передачи сообщения о завершении выполнения восходящей задачи и не используется для передачи реальных входных и выходных данных.
асинхронный
Upstream не заботится о результатах выполнения
Upstream обращает внимание на результат выполнения, но время выполнения очень велико
не используя MQ
Восходящий поток напрямую вызывает нисходящий
Недостатки прямого вызова:
1) Восходящему потоку необходимо синхронно ожидать результата выполнения нисходящего потока.
2) Отказ нижестоящей системы делает вышестоящую систему непригодной для использования.
3) Добавление нисходящего потока должно изменить код восходящего потока.
используя MQ
Достигайте асинхронных эффектов и эффектов развязки с помощью MQ
Преимущества использования MQ:
1) Восходящему потоку не нужно ждать завершения выполнения нисходящего потока, что ускоряет ответ восходящего потока.
2) Отказ нижестоящей системы не повлияет на работу вышестоящей системы.
3) Для увеличения даунстрима достаточно подписаться на MQ
отсечение пика
Пиковый период запроса
Например: система A имеет более 100 одновременных запросов в секунду большую часть дня, но количество одновременных запросов в секунду возрастает до более чем 10 000 между 12:00 и 13:00, но максимальное количество запросов, которое система может обработки в секунду Есть только более 1000.
не используя MQ
В это время, если системе будет оказано сильное сопротивление, это приведет к зависанию системы.
используя MQ
При использовании MQ для достижения эффекта ограничения тока запросы, которые не могут быть обработаны системой, будут накапливаться в MQ, и система сможет продолжать потреблять запросы в MQ после пикового периода.
Преимущества использования MQ:
1) Система не будет зависать из-за пикового объема запросов
Проблемы, связанные с внедрением MQ
Внедрение новой методики, которая не принесет новых проблем при решении существующих проблем.
Ограниченная доступность
Чем больше внешних зависимостей вводит система, тем проще ее зависнуть, после того как MQ зависнет, вся система станет недоступна.
повышенная сложность
Повторное потребление, потеря сообщений, порядок сообщений и т. д. — все это необходимо учитывать после внедрения MQ.
Проблемы согласованности
После того, как система А завершила обработку, она сразу возвращает успех, и все думают, что ваш запрос выполнен успешно; но проблема в том, что если в BCD три системы, две системы в BD успешно записывают базу данных, и в результате система C не удается записать базу данных, это приведет к несогласованности данных.