Сервис Openshift недоступен после короткого простоя
У нас есть наш проект, размещенный в OpenShift (если быть точным, OKD, мы принимаем его сами). Установка выглядит следующим образом:
Сервер маршрутизации (Spring Boot 1.5.8 с Zuul). Он принимает весь входящий трафик и направляет его в нужные службы.
Несколько сервисов (все с Spring Boot): здесь вся бизнес-логика
Мы используем SOAP для вызова других сервисов в этом проекте.
В настоящее время, когда мы вызываем приложение, вызов поступает на сервер маршрутизации, который затем направляет его в основной бизнес-сервис.
После непродолжительного простоя, продолжавшегося около часа, наша основная бизнес-услуга недоступна через внешний звонок. Однако пограничный сервер доступен и может вызываться в 100% случаев. Мы получаем исключение 504 Gateway Timeout
из системы, когда мы его вызываем. Мы уже выяснили, что это тайм-аут маршрута в openshift (haproxy.router.openshift.io/timeout
в маршруте).
Основная проблема заключается в том, что OpenShift, по-видимому, переводит основной бизнес-сервис в спящий режим после одного часа бездействия. Однако после 15-минутной задержки звонки находят место назначения и данные обрабатываются правильно.
Как мы можем отключить это поведение?
Изменить 1:
- У нас есть такое же приложение в обычных "старомодных" виртуальных машинах. У нас там нет проблем.
- Мы заметили, что услуги можно "поддерживать в живых", когда мы называем их регулярными. Мы создали небольшой сервис, который называет тему регулярно (каждые 15 минут). Таким образом, это похоже на работу. Но это не готовый к работе обходной путь IMO.
Изменить 2:
Наш pod config (некоторые имена анонимны):
https://gist.github.com/moritzluedtke/6867499b0acbb2d7b5a9a70e49b0d45c
Мы не используем автоскалер.
Изменить 3:
Наши конфигурации развертывания (некоторые имена анонимны):
https://gist.github.com/moritzluedtke/dc7c1078fe9cc7e4aeb737094849fc1b
OpenShift Master: v3.11.0+1c3e643-87
Kubernetes Master: v1.11.0+d4cacc0
OpenShift Web Console: v3.11.0+ea42280
Изменить 4:
Похоже, что это не проблема OpenShift, а наш технический стек. Я обновлю этот вопрос, как только у нас будет решение.