SpringCloud-LoadBalancer负载均衡服务调用

Ribbon说明

  • Spring Cloud Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用
  • Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器
  • 目前已经进入停更维护阶段,替代方案为Spring Cloud Loadbalancer

LoadBalancer介绍

  • Spring Cloud LoadBalancer是由SpringCloud官方提供的一个开源的、简单易用的客户端负载均衡器,它包含在SpringCloud-commons中用它来替换了以前的Ribbon组件。
  • 相比较于Ribbon,SpringCloud LoadBalancer不仅能够支持RestTemplate,还支持WebClient(WeClient是Spring Web Flux中提供的功能,可以实现响应式异步请求)

客户端loadbalancer本地负载均衡 VS 服务端Nginx负载均衡区别?

  • Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的
  • loadbalancer本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术
  • 客户端负载均衡适用于微服务架构内部调用,需要低延迟和高动态性的场景。服务器端负载均衡更适合作为系统入口进行全局流量管理,或需要为跨语言服务提供统一代理的场景

负载均衡实现

  • pom依赖
XML 复制代码
<!--loadbalancer-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
  • 使用注解 @LoadBalanced 进行负载均衡
java 复制代码
@Bean
@LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
public RestTemplate restTemplate(){
	return new RestTemplate();
}

负载均衡原理

  1. 两种算法
  • 轮询(默认)
java 复制代码
public class RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer
  • 随机
java 复制代码
public class RandomLoadBalancer implements ReactorServiceInstanceLoadBalance
  1. 算法切换:使用注解@LoadBalancerClient和增加randomLoadBalancer算法组件
java 复制代码
@Configuration
@LoadBalancerClient(
        //下面的value值大小写一定要和consul里面的名字一样,必须一样
        value = "cloud-payment-service",configuration = RestTemplateConfig.class)
public class RestTemplateConfig
{
    @Bean
    @LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);

        return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
    }
}
相关推荐
EatFan6 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
现任明教教主~9 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
卓怡学长13 小时前
w204基于springbo旅行社签证代理服务系统
java·spring boot·spring·intellij-idea
牧瀬クリスだ13 小时前
Spring统一功能处理
java·spring boot·spring·状态模式
nhdh14 小时前
SpringAI与SpringAIAlibaba:标准与生态的完美互补
java·人工智能·spring
温暖小土15 小时前
Spring AI 接入通义千问向量模型
java·人工智能·spring
余槐i15 小时前
rollbackFor 不设置,Checked 异常不回滚:Spring 默认规则与两行修复的取舍
java·spring boot·后端·spring·事务管理
微三云生态系统架构师-彭丹15 小时前
智慧物业工单智能派单算法:技能匹配与位置负载均衡设计
运维·负载均衡·物业管理·调度算法·工单系统·智能派单·智慧物业
❀͜͡傀儡师16 小时前
Spring AI 集成 TypeSafe:用判断模型处理工单分流与链路决策
java·人工智能·spring
子一!!16 小时前
集成Spring家族的Spring论坛实战==一阶段
java·后端·spring