Канарские релизы с использованием Zuul Gateway, Eureka, Ribbon и Feign
Фон
Я хочу развернуть две версии одного и того же приложения и направить запросы к этим приложениям на основе их версий, другими словами, выпусков Canary. Обе версии приложения будут зарегистрированы в Eureka с одинаковым именем приложения.
Среда состоит из шлюза Zuul, обнаружения служб Eureka, ленты для балансировки нагрузки и Feign для внутренней связи между приложениями. Помимо этого есть два других приложения, App1 и App2. Когда App1 получает запрос, он звонит в App2 с помощью Feign.
Это изображение показывает тот поток, который я пытаюсь выполнить.
Мои мысли
Eureka имеет карту метаданных, в которой можно установить пары ключ / значение. Когда Canary-релиз либо App1, либо App2 развернут, на этой карте может быть установлено "canary = true".
После этого пиара. Запрос будет отправлен на шлюз Zuul, где предварительный фильтр проверяет, X-Canary-Test
заголовок установлен или нет. Затем, пользовательская Ribbon IRule будет выбирать подмножество экземпляров из Eureka на основе того, был ли сделан запрос на выпуск Canary или нет.
Я также не уверен, как это будет работать с Feign. Если исходный запрос предназначен для релиза Canary, то я бы хотел, чтобы все последующие вызовы были сделаны для релизов Canary, если они существуют.
Вопрос
- Будет ли это наилучшим способом выполнить маршрутизацию через Zuul Gateway, и если да, то как бы вы получили подмножество серверов / экземпляров от Eureka?
- Как это можно применить к клиентам Feign и гарантировать, что релизы Canary пытаются вызвать другие развернутые релизы Canary?