Экстремальные экземпляры Google Cloud: прекращать прием запросов после сигнала отключения ACPI - PullRequest
1 голос
/ 05 марта 2019

У меня есть служба, которую я хочу запускать на приоритетных экземплярах в Google Cloud Platform. Экземпляры будут жить за балансировщиком нагрузки. Для обработки большинства запросов требуется <10 секунд. </p>

Я не могу изменить саму службу, но на том же образе, который находится перед службой, есть экземпляр nginx, который я могу настроить.

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

Я мог бы создать скрипт завершения работы , который перенастраивает nginx, чтобы прекратить пересылку проверок работоспособности в службу, и вместо этого отвечал большими пальцами вниз, но это кажется немного странным, и я чувствую, что должен быть лучший путь. (Также немного ошибочно говорить, что служба не здорова - она ​​просто хочет, чтобы ее вынули из пула.)

Каким будет правильный способ подсказать балансировщику нагрузки, чтобы он прекратил отправлять запросы этому экземпляру, чтобы он (надеюсь) выполнял свои текущие запросы и затем завершал работу, не получая новых запросов за это время?

                             ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
                           ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─  │
                         ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─  │
                          Preemptible instance                  │   │
                         │                                        │
                                                                │   │
                         │                                        │
                                                                │   │
        ┌─────────┐      │   ┌─────────┐           ┌─────────┐    │
        │  Load   │          │         │  /health  │  some   │  │   │
   ────▶│balancer │──────┼──▶│  nginx  │──────────▶│ service │    │
        │         │          │         │   /api/…  │         │  │   │
        └─────────┘      │   └─────────┘           └─────────┘    │
                                                                │   │
                         │                                        │
                                                                │   │
                         │                                        │─
                                                                │─
                         └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

1 Ответ

0 голосов
/ 05 марта 2019

Этот ответ в большей степени "что я хотел бы", чем "это лучшее решение", но он работает, если проверка состояния действительно быстро отвечает.

Я понимаю, откуда вы пришли сИдея обрезать запрос до его остановки, таким образом, у вас не будет текущего запроса, посередине и ответа с тайм-аутом.Это уже реализовано с постепенной остановкой служб.

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

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

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