Фон
У нас есть группа экземпляров диспетчера, которая получает около 700 запросов в секунду на активную виртуальную машину.Этот диспетчер находится за балансировщиком нагрузки, который автоматически масштабируется.Пока что все наши виртуальные машины являются обычными виртуальными машинами, однако мы изучали возможность сделать их упреждающими.
Проблема с упреждающими экземплярами
В соответствии с документацией GCP может завершить приоритетный экземпляр в в любое время .
Предположим, что у каждой диспетчерской виртуальной машины нет состояния.Он получает запрос, обрабатывает его и отправляет HTTP-запрос на другой компьютер.
В любой момент времени каждая виртуальная машина будет обрабатывать около 700 запросов одновременно, получая данные от балансировщика нагрузки.
Вопрос
Что произойдет, если моя приоритетная виртуальная машина обрабатывает700 запросов, получает сигнал на прекращение?
Ну, теоретически у нас должен быть скрипт завершения работы , который гарантирует, что обработка этих запросов завершается, а затем убивает приложение (чистый выход).Это приводит нас к большому вопросу:
- Но знает ли балансировщик нагрузки, что моя виртуальная машина выключается?Будет ли он продолжать отправлять запросы на завершающую ВМ?
Соображения
Если да, то это означает, что некоторые запросы завершатся с ошибкой , поскольку после закрытия приложениямашина все еще работает, а балансировщик нагрузки продолжает отправлять запросы на машину, не зная, что приложение уже выключено.
В идеале эти запросы должны возвращаться как сбойные запросы к балансировщику нагрузки и отправлять запросы на другой компьютер.Однако балансировщики нагрузки GCP недостаточно умны, чтобы делать это, и поэтому не делают этого.
Если каким-то образом балансировщик нагрузки знает, что эта виртуальная машина была выбрана для преждевременного завершения, то ничего особенного делать не нужно.
Какой это?