参考:<<重新定义springcloud>>

  各个视频

什么是ribbon?它解决了什么问题

  • Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,他是基于Netflix Ribbon实现的。
  • 它不像spring cloud服务注册中心,配置中心,API网关那样独立部署,但是它几乎在每一个spring cloud微服务中,包括feign提供的声明式服务调用也是基于Ribbon实现的。
  • ribbon提供了很多种负载均衡算法,例如 轮询、随机 等等。甚至是包含自定义的负载均衡算法。
  • 他解决了微服务的负载均衡的问题

负载均衡解决方案的分类

目前业界主流的负载均衡方案课分为俩类:

1、集中式负载均衡,就是在consumer和provider之间使用独立的负载均衡设施(可以是硬件,如F5,也可以是软件 ,nginx)由这些设施 负责把访问请求 通过 某种策略转发至provider

2、进程内负载均衡,将负载均衡逻辑集成到consumer,consumer从注册中心获取有哪些服务地址,从中通过某种策略挑选出一个provider

Ribbon 就是属于后者,他只是一个类库,集成于consumer进程,consumer通过他来获取到provider的地址

他们的区别架构图

Spring Cloud 之 ribbon

 Ribbon的负载均衡算法策略

id 命名 策略类 描述
1 轮询算法 RoundRibbonRule 按顺序循环选择server
2 随机算法 randomRule 随机选择server
3 重试策略 retryRule 在一个配置时间内当选择的server不成功,则一直尝试选择一个可用的server
4 最低并发策略 BestAvailableRule 逐个考擦server,如果server断路器打开,则忽略,选择请求中并发最小的server,
 5  可用过滤策略  availabilityFilteringRule  过滤掉一直连接失败并被标记为ciruruit tripped的server,过滤掉哪些高并发连接的server(active connections超过配置的阈值)
 响应时间加权策略  responseTimeWeightRule  根据server的响应时间分配权重,响应时间越长,权重越低,响应时间越短,权重越高,被选中的概率就越高,这个策略很贴切,综合了。网络 磁盘 IO等因素
 7  区域权衡策略  zoneavoidanceRule  

 综合判断server所在区域的性能和server的可用性轮询选择server,判断一个区域是否可用,如果不可用直接将这个区域的sever都丢弃

如:多机房情况

使用RIbbon实现的入门实例:

1.先创建一个父工程:只有pom文件 hello-springcloud

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xiaodao</groupId>
    <artifactId>hello-springcloud</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>eureka_server</module>
        <module>client-a</module>
        <module>client-a</module>
        <module>ribbon-client</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
    </parent>
    <!--  利用传递依赖,公共部分  -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- springboot web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- 管理依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
View Code

相关文章: