Ribbon负载均衡

1.什么是负载均衡

        负载均衡其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

2.Ribbon负载均衡

        Ribbon 是一个基于 HTTP TCP 客户端负载均衡工具,它是基于 Netflix Ribbon 实现的。

        它不像 Spring Cloud 服务注册中心、配置中心、API 网关那样独立部署,它几乎 存在于每个 Spring Cloud 微服务中。包括 Feign 提供的声明式服务调用也是基于该 Ribbon 实现的。

Ribbon 默认提供很多种负载均衡算法,例如轮询、随机等等。甚至包含自定义 的负载均衡算法

Ribbon 提供了一套微服务的负载均衡解决方案。

2.1 Ribbon 负载均衡策略

(1)轮询策略(默认)

        策略对应类名: RoundRobinRule   

        实现原理:轮询策略表示每次都顺序取下一个 provider,比如一共有 5 个 provider,第 1 次取第 1 个,第 2 次取第 2 个,第 3 次取第 3 个,以此类推。

(2)权重轮询策略

        策略对应类名: WeightedResponseTimeRule

        实现原理: 

  •         根据每个 provider 的响应时间分配一个权重,响应时间越长,权重越小,被选 中的可能性越低。
  •         原理:一开始为轮询策略,并开启一个计时器,每 30 秒收集一次每个 provider 的平均响应时间,当信息足够时,给每个 provider 附上一个权重,并按权重随机选择 provider,高权越重的 provider 会被高概率选中

(3)随机策略

        策略对应类名: RandomRule   

        实现原理:从 provider 列表中随机选择一个。

(4)最少并发数策略

        策略对应类名: BestAvailableRule

        实现原理:选择正在请求中的并发数最小的provider,除非这个provider在熔断中。

(5)重试策略

        策略对应类名: RetryRule

        实现原理:其实就是轮询策略的增强版,轮询策略服务不可用时不做处理,重 试策略服务不可用时会重新尝试集群中的其他节点。

(6)可用性敏感策略

        策略对应类名: AvailabilityFilteringRule

        实现原理:过滤性能差的 provider

  • 第一种:过滤掉在 Eureka 中处于一直连接失败的 provider。
  • 第二种:过滤掉高并发(繁忙)的 provider。

(7)区域敏感性策略

        策略对应类名:ZoneAvoidanceRule

3.负载均衡不同方案的区别

       目前业界主流的负载均衡方案可以分成两类:

        (1)集中式负载均衡(服务器负载均衡),即在 consumer 和 provider 之间使用独立 的负载均衡设施,由该设施负责 把访问请求通过某种策略转发至 provider;

         (2)进程内负载均衡(客户端负载均衡),将负载均衡逻辑集成到 consumer, consumer 从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择 出一个合适的 provider。Ribbon 属于后者,它只是一个类库,集成于 consumer 进程,consumer 通过它来获取 provider 的地址。

4.Ribbon负载均衡策略设置

4.1 全局设置

        在启动类或配置类中注入负载均衡策略对象。所有服务请求均使用该策略。

@Bean
public RandomRule randomRule() {
return new RandomRule();
}

4.2局部设置

        修改配置文件指定服务的负载均衡策略。

# 负载均衡策略
# service-provider 为调用的服务的名称
service-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

5.Ribbon 点对点直连

        点对点直连是指绕过注册中心,直接连接服务提供者获取服务,一般在测试阶 段使用比较多。

5.1 添加依赖

        在调用方 pom 文件中引入 ribbon 依赖,需要注意的是如果 pom 中有 Eureka 的依赖,则需要去除 Eureka 的依赖。

<!-- netflix ribbon 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

5.2 配置文件

        配置文件中关闭 Eureka,添加直连的服务地址。如果不设置负载均衡策略默认 使用轮询策略。

# 负载均衡策略
# service-provider 为调用的服务的名称
service-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    # 点对点直连模式,指定具体的 Provider 服务列表,多个用逗号隔开
    listOfServers: http://localhost:7070,http://localhost:7071
# 关闭 Eureka 实现 Ribbon 点对点直连
ribbon:
  eureka:
    enabled: false # false:关闭,true:开启

5.3 访问

        关闭 Eureka 注册中心,服务提供者由于无法连接至注册中心所以会报连接异 常。但是服务是可以正常可消费的,所以目前使用的是点对点的方式来进行调用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值