Как узнать, остановлено ли приложение в настоящее время с помощью CloudFoundry в Swisscom Cloud? Заголовок X-Cf-Routererror надежен?

Мы хотели бы добавить страницу обслуживания в наш внешний интерфейс, которая должна появляться, когда серверная часть в данный момент недоступна (например, остановлена ​​или развернута). Когда приложение не запущено, отображается следующее сообщение вместе с кодом состояния 404:

404 Not Found: Requested route ('name.scapp.io') does not exist.

Кроме того, присутствует заголовок, когда приложение остановлено (и только тогда):

X-Cf-Routererror: unknown_route

Надежно ли добавляется этот заголовок, если приложение не запущено? Если это так, я могу использовать этот флаг для отображения страницы обслуживания.


Кстати: не было бы более разумно предоставить код состояния 5xx, если приложение не запущено/не аварийно завершено, т.е. различать остановленные приложения и неправильные маршруты запросов? Отловить ошибку 503 было бы намного проще, так как она не мешает нашей бизнес-логике (404 используется внутри приложения).


person ssc-hrep3    schedule 26.10.2017    source источник


Ответы (2)


Другой вариант — использовать подстановочный маршрут.

https://docs.cloudfoundry.org/devguide/deploy-apps/routes-domains.html#create-an-http-route-with-wildcard-hostname

Приложение, сопоставленное с подстановочным маршрутом, действует как резервное приложение для запросов маршрута, если запрошенный маршрут не существует.

Таким образом, вы можете сопоставить маршрут с подстановочными знаками статическому приложению, которое отображает страницу обслуживания. Затем, если ваше приложение, сопоставленное с определенным маршрутом, не работает или недоступно, вместо 404 будет отображаться страница обслуживания.

Что касается вашего вопроса...

Кстати: не было бы разумнее предоставить код состояния 5xx, если приложение не запущено/не аварийно завершено, т.е. различать остановленные приложения и неправильные маршруты запросов? Отловить ошибку 503 было бы намного проще, так как она не мешает нашей бизнес-логике (404 используется внутри приложения).

GoRouter поддерживает список маршрутов для сопоставления входящих запросов с приложениями. Если ваше приложение не работает, то в таблице маршрутизации нет маршрута, поэтому вы получаете 404. Если вы думаете об этом с точки зрения GoRouter, это имеет смысл. Маршрута нет, поэтому возвращается ошибка 404 Not Found. Чтобы 503 имело смысл, GoRouter должен знать о приложении и знать, что оно не работает или не отвечает.

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

Надеюсь, это поможет!

person Daniel Mikusa    schedule 29.10.2017
comment
Это действительно звучит как отличное решение. Обратите внимание, что это будет работать только в том случае, если вы предоставите свой собственный домен. Возможно, вы не сможете создать маршрут с подстановочными знаками для доменов сегментов. - person Lafunamor; 30.10.2017

Ошибка 404, которую вы видите, генерируется уровнем маршрутизации CloudFoundry и поддерживается восходящим потоком.

Как правило, если вы не хотите получать такие сообщения об ошибках, вы можете использовать сине-зеленые развертывания. Вот подробное описание этого в документации CF: https://docs.cloudfoundry.org/devguide/deploy-apps/blue-green.html

Другой вариант — добавить службу маршрутизации, которая реализует эту функцию за вас. Для этого посмотрите документацию CF: https://docs.cloudfoundry.org/services/route-services.html

person Lafunamor    schedule 27.10.2017
comment
Спасибо за Ваш ответ! Я, вероятно, выберу решение @DanielMikusa. - person ssc-hrep3; 30.10.2017