У меня в настоящее время проблема при использовании Netflix Eureka и Zuul в среде Spring Cloud с использованием Docker.Весеннее облако с Zuul и Eureka не может обрабатывать экземпляры сервисов, идущих вниз
Моя текущая настройка выглядит следующим образом: 3 Docker контейнеры:
- сервер Eureka
- Zuul сервер, который использует Eureka на карте маршрутов к услугам и балансировка нагрузки между несколькими контейнерами той же службы.
- сервис (в настоящее время только возвращение простой строки)
Эта установка работает нормально, но проблемы начинаются тогда, когда я начинаю играть с масштабированием службы. Когда я увеличиваю масштаб, Zuul забирает новые серверы через 30 секунд. Это прекрасно. Однако, когда я снимаю контейнеры для сервисов, вызовы Zuul могут завершиться неудачно (с кодом ошибки HTTP 200!), Поскольку Zuul все еще думает, что серверы находятся в активном пуле.
Я использую Spring бутсу 1.3.6 и Spring Cloud 1.1.2
Мои вопросы:
- Может Zuul быть настроен для повтора вызовов?
- Есть ли способ заставить Зуула выполнить пинг на всех серверах с помощью вызова REST? Насколько я могу судить, для этого нет конечной точки Spring Cloud. Проводка в/маршруты не делает то, что я хочу.
- Если это невозможно, может ли Zuul быть настроен на отправку чего-то еще, кроме 200, когда сервер не отвечает вовремя?
Пара вопросов ... Что именно вы средние вызовы Zuul не с кодом ошибки 200? Можете ли вы предоставить пример ответа? Также, когда вы добавляете экземпляры вверх/вниз, для Zuul (или других клиентов Eureka) потребуется некоторое время, так как клиентам нужно будет обновлять данные с сервера Eureka. Неужели Зууль в конечном итоге выясняет, что примеры больше не обновляются после того, как он обновляет данные от Eureka? –
Когда я снимаю контейнеры, звонки в Zuul, которые перенаправляются на сервер, которые теперь недоступны, возвращают пустую страницу с кодом ответа HTTP 200.Таким образом, клиент не может знать, что ему может потребоваться повторить попытку. Я бы ожидал 504 или 503. Zuul действительно выясняет после интервала ping (что составляет 30 секунд), что некоторые серверы больше недоступны и удаляют их из LB. Но за эти 30 секунд вызовы возвращают пустые страницы, что не имеет смысла. –
На стороне примечания, Eureka знает, когда сервер удален из регистра, поэтому мне интересно, есть ли способ связать это событие с Zuul, чтобы, если сервер не зарегистрирован, Zuul получает сигнал, что ему нужно обновить его список серверов. Это не проблема, если новые серверы не доступны сразу в LB, но это проблема, если вы уменьшаете основные сервисы, и для LB требуется 30 секунд, особенно если есть система, которая это знает (Эврика). –