Я использую ленту в качестве балансировщика нагрузки на шлюзе API и сервере eureka. Когда клиентский запрос поступает на мой API-шлюз, он каждый раз запрашивает реестр служб, чтобы получить доступные экземпляры службы, или Ribbon сохраняет доступные экземпляры в своем кеше?
Как лента получает список доступных экземпляров службы
Ответы (2)
Spring Cloud Ribbon обращается к клиенту обнаружения для получения информации о запущенных экземплярах данной службы. Клиент Discovery хранит в памяти кэш регистраций eureka, чтобы ускорить поиск.
Вы можете ознакомиться с документацией Spring Cloud Netflix для получения дополнительной информации:
https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-eureka-server.html
Сервер Eureka не имеет внутреннего хранилища, но все экземпляры службы в реестре должны отправлять тактовые импульсы, чтобы поддерживать свои регистрации в актуальном состоянии (чтобы это можно было сделать в памяти). У клиентов также есть кеш-память регистраций Eureka (поэтому им не нужно обращаться к реестру для каждого запроса к службе).
Кроме того, для ленты с Eureka: https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html#_using_ribbon_with_eureka
Когда Eureka используется в сочетании с Ribbon (то есть оба находятся в пути к классам), ленточкаServerList переопределяется расширением DiscoveryEnabledNIWSServerList, которое заполняет список серверов из Eureka.
Клиенты из любой зоны могут просматривать информацию реестра (происходит каждые 30 секунд), чтобы найти свои службы (которые могут находиться в любой зоне) и совершать удаленные вызовы. Для получения дополнительной информации посетите официальную документацию Netflix Eureka.
Я знаю, что на ленте есть запланированная задача для каждой службы, и задача будет получать новый список серверов из реестра.
вы можете поискать это:ScheduledThreadPoolExecutor
интервал по умолчанию для запуска задачи составляет 30 секунд, и вы можете изменить его с помощью конфигурации:
your-service-name:
ribbon:
ServerListRefreshInterval: 200(the time you want to set in ms)