Spring Load Balancing
Spring Cloud Ribbon
Spring Cloud Ribbon - это библиотека из экосистемы Spring Cloud, которая используется для клиентской
балансировки нагрузки (client-side load balancing).
Клиентская балансировка нагрузки
Обычно балансировка нагрузки делается на сервере через отдельный балансировщик (например, Nginx, HAProxy
или AWS ELB). В таком случае клиент всегда обращается к балансировщику, а он уже решает, к какому
экземпляру сервиса отправить запрос.
Ribbon реализует другой подход:
- сам клиент (приложение) знает обо всех доступных экземплярах сервиса,
- и самостоятельно выбирает, к какому из них обратиться (например, случайным образом, по кругу — round
robin, с учётом задержки и т. д.).
Как Ribbon работает в Spring Cloud?
- Ribbon встроен в Spring Cloud Netflix.
- Вместе с Eureka (или другим сервисным реестром) он может автоматически узнавать, какие экземпляры
сервиса доступны.
- Когда ваш сервис вызывает другой сервис по его имени, Ribbon под капотом выбирает конкретный хост/порт
для запроса.
Пример:
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
Здесь @LoadBalanced говорит Spring использовать Ribbon для выбора экземпляра сервиса.
Особенности
- Поддерживает разные алгоритмы балансировки: round robin, random, weighted response time и т. д.
- Работает на стороне клиента → нет необходимости в отдельном балансировщике.
- Часто используется вместе с Feign (декларативный HTTP-клиент в Spring Cloud).
Важно
Сейчас Ribbon считается устаревшим (deprecated). Его больше не развивают. Spring Cloud рекомендует
использовать Spring Cloud LoadBalancer как замену.
Spring Cloud LoadBalancer
Что это такое?
Spring Cloud LoadBalancer — это библиотека для клиентской балансировки нагрузки (client-side load balancing)
в Spring Cloud.
- Проще в настройке
- Не зависит от Netflix OSS (который больше не поддерживается)
- Лучше интегрируется с современным стеком Spring (WebClient, RestTemplate, Feign)
Как работает?
- Приложение вызывает сервис по имени (например, http://user-service).
- LoadBalancer находит список доступных инстансов (через Service Discovery, например Eureka, Consul или статический список в application.yml).
- Применяет стратегию выбора (по умолчанию — Round Robin).
- Подставляет реальный адрес (host:port) в запрос.