SpringCloud之负载均衡Ribbon

朴灿烈づ我的快乐病毒、 2022-03-24 15:40 434阅读 0赞

1.什么是负载均衡

Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。像nginx可以使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡等等,很多地方都使用到了负载均衡。

2.负载均衡的好处

  1. 当集群里的1台或者多台服务器down的时候,剩余的没有down的服务器可以保证服务的继续使用
  2. 使用了更多的机器保证了机器的良性使用,不会由于某一高峰时刻导致系统cpu急剧上升

3.负载均衡的策略

  1. 随机 (Random)
  2. 轮询 (RoundRobin)
  3. 一致性哈希 (ConsistentHash)
  4. 哈希 (Hash)
  5. 加权(Weighted)

4.什么是Ribbon

2019012214023582.png

4.1ribbon在eureka下使用的架构图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29sZHNoYXVp_size_16_color_FFFFFF_t_70

5.创建一个ribbon的eureka client

5.1.pom文件

  1. <dependencies>
  2. <dependency>
  3. <groupId>junit</groupId>
  4. <artifactId>junit</artifactId>
  5. <version>3.8.1</version>
  6. <scope>test</scope>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.cloud</groupId>
  14. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  15. <version>1.4.3.RELEASE</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-actuator</artifactId>
  20. </dependency>
  21. </dependencies>

5.2 application.yml

  1. server:
  2. port: 8003
  3. spring:
  4. application:
  5. name: consumer-ribbon
  6. eureka:
  7. client:
  8. service-url:
  9. defaultZone: http://user:123@localhost:10000/eureka
  10. instance:
  11. prefer-ip-address: true
  12. ip-address: 127.0.0.1

5.3 启动类

  1. import cn.carry.TestConfig;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  5. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  6. import org.springframework.cloud.netflix.ribbon.RibbonClient;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.web.client.RestTemplate;
  9. @SpringBootApplication
  10. @EnableEurekaClient
  11. @RibbonClient(name = "SPRINGCLOUD-PRIVIDER",configuration = TestConfig.class)
  12. public class RibbonApplication {
  13. public static void main(String[] args) {
  14. SpringApplication.run(RibbonApplication.class,args);
  15. }
  16. //注册一个restTemp
  17. @Bean
  18. @LoadBalanced
  19. public RestTemplate restTemplate(){
  20. return new RestTemplate();
  21. }
  22. }

5.4controller

  1. @GetMapping("/getUser")
  2. public User getUser(){
  3. // String url = eurekaClient.getNextServerFromEureka("springcloud-privider", false).getHomePageUrl();
  4. // System.out.println("url:"+url+"getUserById");
  5. return restTemplate.getForObject("http://SPRINGCLOUD-PRIVIDER/getUserById",User.class);
  6. }

6.测试

2019012214131951.png

7.自定义负载均衡的方式

通过上一个实例我们可以知道,默认ribbon的负载均衡算法是轮询方式,我们可以通过自定义来实现不同的负载均衡算法

7.1创建一个重写负载均衡算法的类

注意:在非@componentScan或者@SpringBootApplication能扫描到的位置下创建该类,也就是不能和启动类在同一个目录和子目录

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29sZHNoYXVp_size_16_color_FFFFFF_t_70 1

2.修改启动类

  1. import cn.carry.TestConfig;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  5. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  6. import org.springframework.cloud.netflix.ribbon.RibbonClient;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.web.client.RestTemplate;
  9. @SpringBootApplication
  10. @EnableEurekaClient
  11. @RibbonClient(name = "SPRINGCLOUD-PRIVIDER",configuration = TestConfig.class)
  12. public class RibbonApplication {
  13. public static void main(String[] args) {
  14. SpringApplication.run(RibbonApplication.class,args);
  15. }
  16. //注册一个restTemp
  17. @Bean
  18. @LoadBalanced
  19. public RestTemplate restTemplate(){
  20. return new RestTemplate();
  21. }
  22. }

5.springcloud的别的组件

eureka:https://blog.csdn.net/oldshaui/article/details/86589606

发表评论

表情:
评论列表 (有 0 条评论,434人围观)

还没有评论,来说两句吧...

相关阅读