OpenShift занимает 20 секунд после того, как модуль убит, прежде чем балансировать с другим доступным модулем при использовании липких сессий - PullRequest
2 голосов
/ 20 мая 2019

Я столкнулся со странным поведением в маршрутизации OpenShift:

  • Я развернул приложение с 2 экземплярами / модулями. По умолчанию OpenShift использует липкие сеансы для отправки трафика каждого пользователя в один и тот же модуль.

  • Приложение использует внешнее хранилище HTTP-сессии. Идея состоит в том, что, если модуль умирает, а другой вступает во владение, пользовательский сеанс будет доступен с его предыдущим состоянием.

  • Чтобы проверить это, я убиваю модуль, который в данный момент назначен пользователю. Следующий запрос должен быть отправлен на другой доступный модуль. Однако запрос удерживается в течение ~ 20 секунд и, наконец, обрабатывается оставшимся модулем.

Почему маршрутизатору OpenShift требуется так много времени, чтобы понять, что ранее назначенный модуль не работает, и отправить трафик другому?

Может ли это быть изменено, чтобы сделать это быстрее?

UPDATE:

Я проверил состояние конечных точек в соответствии с предложением Грэма Дамплтона:

$> oc get endpoints myapp --watch 
myapp   172.26.23.93:8080,172.26.32.244:8080   361d   //1
myapp   172.26.32.244:8080   361d                     //2
myapp   172.26.32.244:8080   361d                     
...
  • Шаг // 1: перед убийством любого модуля есть две доступные конечные точки
  • Шаг // 2: Сразу после убийства модуля, ~ 1 с, я получаю обновление, показывающее единственную доступную конечную точку.

Так что, хотя конечные точки обновляются сразу же, запросу все еще нужно почти 20 секунд, чтобы завершить. Идеи?

...