欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 【spring-cloud负载均衡策略实现】

【spring-cloud负载均衡策略实现】

2025/11/10 16:44:01 来源:https://blog.csdn.net/weixin_47068446/article/details/146070774  浏览:    关键词:【spring-cloud负载均衡策略实现】

文章目录

  • 什么是负载均衡
  • 为什么要负载均衡
  • 实现负载均衡
    • 配置负载均衡策略
    • 自定义的策略算法
    • 使用 @LoadBalancerClient 指定策略

什么是负载均衡

负载均衡(Load Balancing)是一种将流量分配到多个服务器的技术,旨在提高系统的可用性、性能和可靠性。它的核心目标是确保所有服务器负载均匀,避免某个服务器过载而影响系统运行。

为什么要负载均衡

1.某个服务器压力过大,容易宕机,假设所有请求都发送到 同一台服务器,如果请求量太大,这台服务器可能会崩溃。
2.资源利用不均,一些服务器可能空闲,而其他服务器却超载,导致整体效率低下。
3.单点故障,如果只有一个服务器,一旦故障,整个系统就不可用。
扩展性差,不能随着业务增长动态增加服务器,系统性能受限。

实现负载均衡

配置负载均衡策略

导包,注意spring cloud在2020+版本之后就舍弃了ribbon,全部都使用了loadBalancer负载均衡。

   <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

在我们的yaml文件中配置上我们调用的服务,以及需要的负载均衡策略算法,轮询。

spring:cloud:loadbalancer:clients:my-service:  # 这里的 "my-service" 是你的服务名称hint: round_robin

负载均衡测策略算法,根绝我们的业务场景选择不同的策略算法。
round_robin 轮询(默认策略,每次请求按顺序选择不同实例)
random 随机(每次请求随机选择一个实例)
weighted 权重(基于实例权重分配请求,需要额外配置)
response_time 响应时间(选择响应时间较短的实例)

自定义的策略算法

创建我们自定义的ReactorLoadBalancer,自定义一个类,继承ReactorServiceInstanceLoadBalancer,自定义的实现choose方法

public class MyCustomLoadBalancer extends ReactorServiceInstanceLoadBalancer {private final LoadBalancerClientFactory clientFactory;private final String serviceId;public MyCustomLoadBalancer(LoadBalancerClientFactory clientFactory, String serviceId) {this.clientFactory = clientFactory;this.serviceId = serviceId;}//如何选择我们的实例@Overridepublic Mono<Response<ServiceInstance>> choose(Request request) {List<ServiceInstance> instances = clientFactory.getInstances(serviceId);if (instances.isEmpty()) {return Mono.empty();}// 选择第一个实例(自定义逻辑)return Mono.just(new DefaultResponse(instances.get(0)));}
}

配置 ReactorLoadBalancer Bean

@Configuration
public class LoadBalancerConfig {@Beanpublic ReactorLoadBalancer<ServiceInstance> customLoadBalancer(LoadBalancerClientFactory clientFactory) {return new MyCustomLoadBalancer(clientFactory, "my-service");//这里应该指定我们所调用服务的服务名称}
}

这样,Spring Cloud LoadBalancer 在调用 “my-service” 时,就会使用你的 MyCustomLoadBalancer 逻辑。

使用 @LoadBalancerClient 指定策略

@LoadBalancerClient(name = "order-service", configuration = CustomLoadBalancerConfig.class)
public class OrderServiceClient {
}

其中 CustomLoadBalancerConfig.class 定义了 负载均衡策略:

@Configuration
public class CustomLoadBalancerConfig {@Beanpublic ReactorLoadBalancer<ServiceInstance> roundRobinLoadBalancer(LoadBalancerClientFactory clientFactory) {return new RoundRobinLoadBalancer(clientFactory, "order-service");}
}

loadBalance的加载流程
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词