zoukankan      html  css  js  c++  java
  • 负载均衡—Ribbon

    一、简单介绍

    Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具。负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,分摊服务器压力。我们知道,Eureka的服务实例可以进行集群集群部署,每个实例都均衡处理服务请求,那么这些请求是如何被分摊到各个服务实例中的呢?Ribbon就是帮我们解决这个问题的关键。

    Ribbon默认提供了很多负载均衡算法,如:轮询、随机等,也可以实现自定义的负载均衡算法。

    二、上手

    1. 项目结构

    我在写eureka的demo的时候创建了eureka-client-8762eureka-client-8763两个服务提供者,本次demo需要用到他们。先看看项目结构:

    springcloud-collection

    2 . ribbon-8764 项目创建

    我们就创建上面的ribbon-8764

    pom.xml 配置和eureka-client-8762eureka-client-8763 的依赖一样,只是比其多 一个ribbon的依赖:

    <dependencies>
        <!--springboot-starter-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    
        <!-- eureka-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--ribbon-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
    </dependencies>
    

    application.yml

    server:
      port: 8764
    
    spring:
      application:
        name: ribbon-8764
    
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
    

    EurekaRibbon8764 启动类 :

    @SpringBootApplication
    @EnableEurekaClient     // 客户端注册
    public class EurekaRibbon8764 {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaRibbon8764.class,args) ;
        }
    }
    

    启动类同级目录下 创建 config文件夹,并在此下创建 RestTemplateConfigure类,用来配置ribbon的负载均衡配置。

    package com.dzbiao.config;
    
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    @Configuration
    public class RestTemplateConfigure {
    
    
        @Bean
        @LoadBalanced       // Ribbon 负载均衡配置
        RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
    }
    

    8761、8762、8763、8764 全部启动,我们可以看到,ribbon-8764已经被注册成功。

    ribbo-eureka

    此时我们将ribbon-8764当做消费者,我们期许 通过访问ribbon提供的路径,http://localhost:8764/user ,通过RestTemplate去远程调用service服务。

    ribbon-controller

    至于上面的 http://service/user 中的service 是8762和8763两个服务在注册中心注册的名称,user 是该服务控制层中的方法路径。

    我们通过访问 http://localhost:8764/user 可以看到 返回的带有端口的字符串,多次刷新,返回的字符串会在 8762和8763交替出现。

    ribbonn-response-8762ribbon-response-8763

    由此我们可以看到,ribbon-8764 通过轮询算法交替调用 8762 和8763 两个服务。通过交替调用,实现负载均衡,减轻服务压力。

  • 相关阅读:
    python起航
    【Git】rebase 用法小结
    使用AutoJs编写UI的踩坑记录
    cpu性能消耗分析
    python自动安装依赖模块_python模块管理:如何自动生成和安装requirements.txt依赖...
    Office Tools Plus
    Git 仓库基础操作
    jmeter-阶梯式压测
    JMeter ServerAgent服务器资源监控插件
    Fastjson 从JSON字符串中取值 操作示例
  • 原文地址:https://www.cnblogs.com/duanxiaobiao/p/14543947.html
Copyright © 2011-2022 走看看