负载均衡,Ribbon,负载均衡策略

2. 负载均衡

负载均衡是将请求分散到多个节点上处理,以达到负载均衡和提高系统性能的目的。常见的负载均衡算法有轮询、权重轮询、最小连接数等,其中轮询算法是最简单的一种,即按照节点顺序依次分配请求。

SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的

2.1 Ribbon负载均衡

Ribbon是Netflix开源的一个基于HTTP和TCP的负载均衡器,主要用于在分布式系统中实现客户端负载均衡。Ribbon可以与EurekaConsul等服务发现框架集成,实现动态的负载均衡和故障转移等功能。

使用Ribbon可以使客户端向多个服务器发送请求,并根据一定的策略选择一个可用的服务器进行负载均衡。Ribbon支持多种负载均衡算法,包括轮询、随机、加权轮询、加权随机等算法,还支持自定义负载均衡策略。

Ribbon还具有丰富的配置和管理功能,可以通过配置文件或代码进行灵活的配置和管理。Ribbon也提供了丰富的监控和调试功能,可以帮助开发人员快速定位和解决负载均衡问题。

2.2 负载均衡器

常见的负载均衡器包括以下几种:

  1. 硬件负载均衡器:硬件负载均衡器是一种专门的硬件设备,用于将服务请求分发到多个服务器上。硬件负载均衡器通常具有高性能和可靠性,可以实现多种负载均衡算法和路由策略。

  2. 软件负载均衡器:软件负载均衡器是一种运行在软件平台上的负载均衡器,通常使用反向代理技术实现。软件负载均衡器通常具有灵活的配置和管理方式,可以实现多种负载均衡算法和路由策略。

  3. DNS负载均衡:DNS负载均衡是通过DNS服务器将服务请求分发到多个服务器上。通过将多个服务器的IP地址配置到DNS服务器上,并为其分配不同的权重值,DNS服务器可以根据权重值将请求分发到不同的服务器上。

  4. 会话复制:会话复制是将客户端的会话信息复制到多个服务器上,从而实现会话的共享和负载均衡。通过将客户端的请求分发到不同的服务器上,并复制其会话信息,可以实现会话的无缝切换和负载均衡。

  5. LVS:LVS(Linux Virtual Server)是一种开源的负载均衡软件,可以实现TCP/UDP流量的负载均衡和高可用性。LVS通常运行在Linux系统上,可以通过多种负载均衡算法和路由策略实现负载均衡和故障转移等功能。

  6. Nginx:Nginx是一种开源的高性能反向代理和负载均衡服务器,支持TCP/UDP和HTTP协议。Nginx具有灵活的配置和管理方式,可以实现多种负载均衡算法和路由策略,还支持高可用性和动态扩展等功能。

2.3 负载均衡策略

负载均衡的规则都定义在IRule接口中,而IRule有很多不同的实现类,具体参考SpringCloud官方

不同规则的含义如下:

内置负载均衡规则类规则描述
RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的..ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule随机选择一个可用的服务器。
RetryRule重试机制的选择逻辑

默认的实现就是ZoneAvoidanceRule,是一种轮询方案

2.4 自定义负载均衡策略

通过定义IRule实现可以修改负载均衡规则,有两种方式:

  1. 代码方式:在对应服务的启动类中定义一个新的IRule:
@Bean
public IRule randomRule(){
    return new RandomRule();
}
  1. 配置文件方式:在对应服务的application.yml文件中,添加新的配置也可以修改规则:
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

一般用默认的负载均衡规则,不做修改

2.5 饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true
    clients: userservice
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗯兮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值