客戶端負載均衡與服務器端負載均衡區別?


服務器端負載均衡:

      例如: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();
    }
}

以上僅供參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM