Разрыв соединения с балансировщиком нагрузки AWS в сочетании с событиями, отправленными сервером - PullRequest
0 голосов
/ 07 июня 2018

Мы используем События, отправленные сервером (SSE) в сервисе Node.js, который работает в AWS Elastic Beanstalk за классическим балансировщиком нагрузки.В балансировщике нагрузки мы включили разгрузку соединения с тайм-аутом в 15 минут, чтобы при выходе экземпляра из строя длительные запросы в полете имели возможность завершиться.Однако, поскольку любое соединение SSE также будет рассматриваться как запрос в полете и не будет автоматически завершаться из-за характера SSE, это означает, что экземпляру всегда потребуется полные 15 минут для выхода из строя.

Чтобы решить эту проблему, мы рассмотрели следующие варианты:

  • Уменьшение времени ожидания истечения соединения с риском отмены некоторых запросов в полете, которые занимают больше времени, чем время ожидания,
  • Закрытие соединений SSE через X минут (где X <15), так что время опустошения соединения будет ограничено этим временем для соединений SSE.Недостатком этого подхода является то, что мы все еще ждем макс.X минут, что означает, что вы хотели бы сделать X как можно более низким, но слишком сильно понижая X, мы практически используем длинный опрос вместо SSE. </li>

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

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

Редактировать: Задача состоит в том, чтобы определить, когда балансировщик нагрузки выводит экземпляр из строя, поэтому мызатем можно закрыть соединения SSE из этого экземпляра.

Редактировать 2: Мы решили проблему, просмотрев входящие запросы.Как только служба не обнаруживает никаких входящих запросов в течение определенного периода времени (например, 60 секунд), она знает, что существует высокая вероятность того, что она будет выведена из эксплуатации, поэтому она закрывает все соединения SSE.В худшем случае он все еще работает, но, поскольку отключенные клиенты SSE будут автоматически подключаться, это не имеет большого значения.

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