Я столкнулся со странным поведением в маршрутизации 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 секунд, чтобы завершить. Идеи?