Потерянные запросы при развертывании новых версий моего приложения

#node.js #heroku

#node.js #heroku

Вопрос:

У меня есть два приложения nodejs, размещенные на heroku, которые обмениваются данными через http-запросы.

Мое приложение 1 отправляет сообщения в мое приложение 2. Как приложение для обмена сообщениями в реальном времени.

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

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

Мой вопрос в том, что вы предлагаете, чтобы избежать этой проблемы в будущем? есть ли в heroku что-то вроде системы повторных попыток?

Ответ №1:

Идеальным решением для чего-то подобного в больших масштабах был бы посредник сообщений, такой как Apache Kafka или Rabbit MQ. Но это полноценные системы, и они могут быть слишком тяжелыми для реализации в вашем случае использования, где мы сталкиваемся с блоками Heroku.

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

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

Комментарии:

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