#node.js #heroku
#node.js #heroku
Вопрос:
У меня есть два приложения nodejs, размещенные на heroku, которые обмениваются данными через http-запросы.
Мое приложение 1 отправляет сообщения в мое приложение 2. Как приложение для обмена сообщениями в реальном времени.
Однако я заметил, что при развертывании новых сборок обоих приложений некоторые запросы, которые запускаются во время развертывания целевых приложений, завершаются с ошибкой. Например, если они были потеряны, поскольку их целевое приложение обновляется в это время.
Это очень раздражает, и последствия явно плохие для приложения для обмена сообщениями, поскольку некоторые сообщения не доставляются из-за обновления сборок.
Мой вопрос в том, что вы предлагаете, чтобы избежать этой проблемы в будущем? есть ли в heroku что-то вроде системы повторных попыток?
Ответ №1:
Идеальным решением для чего-то подобного в больших масштабах был бы посредник сообщений, такой как Apache Kafka или Rabbit MQ. Но это полноценные системы, и они могут быть слишком тяжелыми для реализации в вашем случае использования, где мы сталкиваемся с блоками Heroku.
Простой обходной путь — заставить сервер-получатель отправлять ответ при получении сообщения. Ответ не должен содержать никаких данных, но также работают только коды состояния и пустые тела. Это позволит вам отслеживать, какие запросы были успешно отправлены, а какие не смогли, потому что машина спала или обновлялась. Сохраните их в локальной очереди и продолжайте пытаться каждую n секунду, чтобы узнать, начал ли получатель отвечать. Если этого не произойдет, отправьте сообщения в очереди.
Таким образом, у вас есть способ гарантировать, что все отправляемые сообщения доставляются. С помощью некоторых вспомогательных функций вы можете получить показатели времени простоя, нагрузки и т. Д., Но это совершенно необязательно.
Комментарии:
1. Спасибо. Я думаю, что это хорошая идея. Я думал, что, возможно, в heroku есть собственное решение для повторных попыток, чтобы справиться с этой ситуацией, но это тоже хороший способ справиться с этим.