Spring Cloud LoadBalancer:实现高效负载均衡的必备工具

Spring Cloud LoadBalancer:实现高效负载均衡的必备工具

今日目标

  • 掌握LoadBalancer

1. Spring Cloud LoadBalancer介绍

在微服务架构中,负载均衡是确保应用程序可靠性和高性能的重要组成部分。而Spring Cloud作为一种广泛应用的微服务框架,提供了丰富的解决方案来简化负载均衡的实现。其中,Spring Cloud LoadBalancer作为新一代的负载均衡解决方案,正以其出色的性能和灵活的特性成为开发者们追捧的爆款工具。

1.1. 什么是Spring Cloud LoadBalancer?

Spring Cloud LoadBalancer是Spring Cloud生态系统中的一个模块,从2020.0.0版本开始引入。它旨在提供一个轻量级、高性能且易于使用的客户端负载均衡解决方案。相较于传统的Ribbon负载均衡库,Spring Cloud LoadBalancer更加注重简化和解耦,同时借助Reactor和异步非阻塞I/O模型,提供了更高的并发处理能力。

思考:为什么学习LoadBalancer?

从Spring Cloud 2020.0.0版本开始,官方推荐使用Spring Cloud LoadBalancer代替Ribbon作为负载均衡的解决方案,Spring Cloud Nacos 2021 移除了 Ribbon.

细心的小伙伴可能已经发现了在介绍的Ribbon负载均衡的时候我们选择的SpringCloud版本是2020.0.0之前的




Spring Cloud LoadBalancer:实现高效负载均衡的必备工具

spring-cloud-starter-netflix-eureka-client依赖中默认使用的负载均衡依赖是ribbon

Spring Cloud LoadBalancer:实现高效负载均衡的必备工具

对比SpringCloud2021版本的使用spring-cloud-starter-netflix-eureka-client依赖中负载均衡依赖已经将Ribbon替换为spring-cloud-loadbalancer

Spring Cloud LoadBalancer:实现高效负载均衡的必备工具

注意,这里就不掩饰如何搭建项目,和之前的项目搭建方式是一样的,就是SpringCloud版本变化成了2021

1.负载均衡策略

LoadBalancer负载均衡策略,没有Ribbon的丰富,只提供了轮询和随机策略,在默认情况下使用的是轮询算法(RoundRobinLoadBalancer)

Spring Cloud LoadBalancer:实现高效负载均衡的必备工具
  • RoundRobinLoadBalancer:基于轮询负载均衡策略
  • RandomLoadBalancer: 基于随机负载均衡策略

2.LoadBalancer自定义负载均衡策略

LoadBalancer自定义的负载均衡切换方式有两种方式

  • 新建类注入负载均衡策略Bean
  • 直接在Spring的配置文件中注入Bean

2.1. 新建类注入负载均衡策略Bean

package com.zbbmeta.order.config;

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;

/**
 * @author springboot葵花宝典
 * @description: TODO
 */

public class CustomLoadBalancerConfiguration {

    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory)
 
{
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new RandomLoadBalancer(loadBalancerClientFactory
                .getLazyProvider(name, ServiceInstanceListSupplier.class),
                name)
;
    }
}


/**
 * @author springboot葵花宝典
 * @description: TODO
 */

@Configuration
@LoadBalancerClients(defaultConfiguration = {CustomLoadBalancerConfiguration.class})
public class OrderConfig 
{

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate;
    }
}



Spring Cloud LoadBalancer:实现高效负载均衡的必备工具

2.2. 直接在Spring的配置文件中注入Bean

@Configuration
@LoadBalancerClients(defaultConfiguration = {OrderConfig.class})
public class OrderConfig 
{

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        RestTemplate restTemplate = new RestTemplate();
        return 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)
;
    }
}

如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!

原创不易,转载请注明出处,感谢支持!如果本文对您有用,欢迎转发分享!


原文始发于微信公众号(springboot葵花宝典):Spring Cloud LoadBalancer:实现高效负载均衡的必备工具

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/183234.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!