Как динамически переключать трафик запросов со старого экземпляра сервера на новый с помощью jhipster-registry?

Я использую jhipster-registry для реестра и управления микросервисом. Он основан на Spring Cloud Netflix Eureka и Spring Cloud Config.

когда я добавляю новый API и публикую следующую версию микросервиса, мне нужно

  1. запустить новый экземпляр службы
  2. переключить трафик запроса со старого экземпляра на новый
  3. удалить/закрыть старый

И я не хочу перезапускать свой шлюз во время этих шагов. На самом деле, я смотрю метод динамической маршрутизации во время выполнения.


person zongwu233    schedule 22.11.2016    source источник


Ответы (2)


На самом деле легко добиться того, чего вы хотите:

  • Разверните две версии службы с разными идентификаторами instanceId, например service-v1 и service-v2. Этого легко добиться, настроив eureka.instance.instanceId.

  • Первоначально ваш Zuul Gateway проксирует запросы к service-v1 со следующими свойствами, присутствующими в файле gateway.yml вашего сервера конфигурации:

zuul:
  routes:
    service:
      path: /service/**
      serviceId: service-v1
  • Измените конфигурацию сервера конфигурации zuul на это:
zuul:
  routes:
    service:
      path: /service/**
      serviceId: service-v2
  • Затем запустите обновление конфигурации шлюза:
curl -X POST http://localhost:8080/management/refresh

(обратите внимание, что эта конечная точка защищена, поэтому вам нужно будет передать ей токен для прохождения)

person Pierre Besson    schedule 22.11.2016

эврика

К сожалению, это не так просто, поскольку Eureka предпочитает доступность, а не согласованность, поэтому бывает так, что обнаружение ваших служб состоит из мертвых служб. Обходной путь, который я предпочитаю использовать с eurka, заключается в том, чтобы установить свойство MaxAutoRetries выше для всех приложений (что легко, поскольку JHipster Registry является сервером конфигурации, поэтому я разделяю это для всех), например

ribbon:
  ConnectTimeout: 3000
  ReadTimeout: 60000
  MaxAutoRetries: 10

так что это, по крайней мере, сделает ваш запрос успешным через некоторое время во время развертывания. Вы столкнетесь с некоторой задержкой, так как первые попытки будут направлены на старую службу, время ожидания которой истекло ... но перезапуски не требуются, и ваши новые службы подключаются к сети примерно через 10 секунд. 3-5 минут после деплоя (это мой опыт...в разных случаях может отличаться)

консул

В качестве альтернативы вы можете рассмотреть возможность перехода на консул Hashicorps вместо eureka, что способствует согласованности, поэтому вы сможете управлять обнаружением службы и синхронизировать ее сразу после развертывания.

В настоящее время JHipster предоставляет только БЕТА-поддержку для консула, потому что невозможно запустить полностью безопасную установку из-за эта ошибка, где я жду обзора исправление

person David Steiman    schedule 22.11.2016
comment
если использовать этот метод в development env, некоторая задержка будет снижена, вы установили enable-self-preservation false в dev env? - person zongwu233; 01.12.2016