客户端负载均衡与服务器端负载均衡区别?

服务器端负载均衡:

      例如:Nginx,通过Nginx进行负载均衡,先发送请求,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端再进行负载均衡算法分配。

客户端负载均衡:

      例如:spring cloud中的ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡;即在客户端就进行负载均衡算法分配。

      ribbon的默认负载均衡(轮询),当多次访问Eureka(注册中心)中同一个服务时(该服务有多个服务提供者),采用轮询方式,也可自定义配置。

      自定义配置:

              1、配置类置于启动类包扫描不到的位置。

                                                

              

/**
 * 
 * 如果这个配置文件是一个全局的配置文件, 那么就把这个类放到SpringBootApplication或者是Compentscan能扫描到的包里面
 * 如果是一个单独的配置, 把这个文件放到不能被上面两个注解扫描到的包,也就是当前类所在的包层级要比他们高,然后单独配置给每一个需要这个配置的负载均衡客户端即可
 * 
 */

@Configuration
public class RibbonConfig {
    @Bean
    public IRule iRule() {
        return  new RandomRule(); //随机
    }
}

  

              2、排除包扫描,(自定义注解,排除扫描该类)

                                               

/**接口
 * 
 * 我们当前的注解本身没有任何含义,就是一个特征标记
 * 
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Abcfdsfdsfdsfds {
}
//配置类

@Configuration @Abcfdsfdsfdsfds public class RibbonConfig { @Bean public IRule iRule() { return new RandomRule(); } }
//启动类

@SpringBootApplication @EnableDiscoveryClient //如果给多个服务开启负载均衡,通过下面的注解实现 @RibbonClients({@RibbonClient(name = "04PROVIDER-EUREKA", configuration = RibbonConfig.class),@RibbonClient(name = "04PROVIDER-EUREKA1")}) @ComponentScan(excludeFilters={@ComponentScan.Filter({Abcfdsfdsfdsfds.class})}) public class ConsumerStartApp { public static void main (String[] args){ SpringApplication.run(ConsumerStartApp.class,args); } @Bean @LoadBalanced//告诉template 注意有一些服务需要开启负载均衡,通过服务的名字可以访问 public RestTemplate template() { return new RestTemplate(); } }

  

              3、通过配置文件 application.yml

server:
  port: 10100
spring:
  application:
    name: 09consumer-eureka-riibon-config-properties
eureka:
  client:
    service-url:
      defaultZone: http://localhost:12000/eureka
#给 04PROVIDER-EUREKA配置负载均衡的规则为 com.netflix.loadbalancer.RandomRule
04PROVIDER-EUREKA:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
@SpringBootApplication
@EnableDiscoveryClient
//@RibbonClient(name = "04PROVIDER-EUREKA",configuration = RibbonConfig.class)//给04PROVIDER-EUREKA服务开启负载均衡
//如果给多个服务开启负载均衡,通过下面的注解实现
@RibbonClients({@RibbonClient(name = "04PROVIDER-EUREKA"),@RibbonClient(name = "04PROVIDER-EUREKA1")})
public class ConsumerStartApp {
    public static void main (String[] args){
        SpringApplication.run(ConsumerStartApp.class,args);
    }

    @Bean
    @LoadBalanced//告诉template 注意有一些服务需要开启负载均衡,通过服务的名字可以访问
    public RestTemplate template() {
        return new RestTemplate();
    }
}

以上仅供参考。

原文地址:https://www.cnblogs.com/Z-wen/p/11688657.html