Mastering Client‑Side Load Balancing with Spring Cloud Ribbon
This article explains how Spring Cloud Ribbon provides client‑side load balancing, outlines its classification, core mechanisms, common algorithms, and shows step‑by‑step code to replace the default balancing rule in a Spring Boot microservice.
Load Balancing – Ribbon
Basic Introduction
Spring Cloud Ribbon is a client‑side load‑balancing tool built on Netflix Ribbon.
Ribbon mainly provides client load‑balancing algorithms and service invocation.
The client component offers configuration options such as connection timeout and retry.
Ribbon selects a target service based on a rule (e.g., simple round‑robin, random).
Developers can easily use Ribbon’s algorithms to achieve load balancing.
In short: Ribbon = load balancing + RestTemplate calls.
LB (Load Balance) Classification
Centralized LB
Uses an independent load‑balancing facility (hardware like F5 or software like Nginx) placed between consumers and providers to forward requests to providers according to a strategy.
In‑Process LB
The load‑balancing logic is integrated into the consumer; the consumer obtains available service addresses from a registry and selects one. Ribbon belongs to this category—it is a library embedded in the consumer process.
Ribbon Mechanism
Load Balancing Algorithms
BestAvailableRule : Chooses the server with the smallest number of concurrent requests, ignoring tripped servers.
AvailabilityFilteringRule : Filters out servers marked as circuit‑tripped or with active connections exceeding a configured threshold.
WeightedResponseTimeRule : Assigns a weight based on response time; longer response times get lower weight and are less likely to be chosen.
RetryRule : Adds a retry mechanism to the selected load‑balancing rule, repeatedly trying sub‑rules within a time window.
RoundRobinRule (default) : Cycles through servers by index.
RandomRule : Randomly selects a server.
ZoneAvoidanceRule : Considers both server zone performance and availability when selecting a server.
Replace Default Load Balancing Algorithm
Write a configuration class
// Configure your own load‑balancing algorithm
@Configuration
public class RibbonRule {
// Inject the load‑balancing rule
@Bean
public IRule myRibbonRule() {
return new RandomRule(); // choose the Random algorithm
}
}Specify the configuration class in the main application
@EnableEurekaClient
@SpringBootApplication
@EnableDiscoveryClient // enable service discovery
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL", configuration = RibbonRule.class) // specify the LB rule
public class MemberConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(MemberConsumerApplication.class, args);
}
}In earlier notes, the consumer’s remote call uses the combination of load balancing and RestTemplate.
Java Captain
Focused on Java technologies: SSM, the Spring ecosystem, microservices, MySQL, MyCat, clustering, distributed systems, middleware, Linux, networking, multithreading; occasionally covers DevOps tools like Jenkins, Nexus, Docker, ELK; shares practical tech insights and is dedicated to full‑stack Java development.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.