【SpringCloud系列】Ribbon负载均衡

负载均衡

在分布式系统中,同一个服务可能会部署在多台服务器上,而这些服务器的性能可能会存在差异,当有请求进来时,为了最大化的利用服务器资源,就需要有一个中间件来将请求发送到合适的服务器,这就是负载均衡

负载均衡算法

  • 轮询法
    轮询法,就是将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。这种算法比较简单,他具有绝对均衡的优点,但是也正是因为绝对均衡它必须付出很大的代价,例如它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。
  • 随机法
    随机法,是随机选择一台服务器来分配任务。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的不需要维持上次的选择状态和均衡因子[5]。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询算法的部分缺点。
  • 最小连接法
    最小连接法,将任务分配给此时具有最小连接数的节点,因此它是动态负载均衡算法。一个节点收到一个任务后连接数就会加1,当节点故障时就将节点权值设置为0,不再给节点分配任务。
    最小连接法适用于各个节点处理的性能相似时。任务分发单元会将任务平滑分配给服务器。但当服务器性能差距较大时,就无法达到预期的效果。因为此时连接数并不能准确表明处理能力,连接数小而自身性能很差的服务器可能不及连接数大而自身性能极好的服务器。所以在这个时候就会导致任务无法准确的分配到剩余处理能力强的机器上。

常用负载均衡中间件

常用的负载均衡中间件有Ribbon、Nginx等
虽然Zuul、Feign、Eureka也能实现负载均衡,但核心算法还是Ribbon

Ribbon

Ribbon默认使用的是轮循算法
如果想要更改Ribbon的负载均衡算法,可以在增加如下配置类

@Configuration
public class MySelfRule { 
	@Bean
	public IRule muRule() {
		// 自带负载均衡算法
		// return new RandomRule(); // 随机算法
		// return new WeightedResponseTimeRule(); // 加权算法
		return new RetryRule(); // 重试算法
	}
}

更多自带的负载均衡算法可以查看IRule接口的实现类
在这里插入图片描述

自定义负载均衡算法

如果自带的算法不能够满足需求,可以使用自定义的负载均衡算法
1、新增一个类,继承抽象类AbstractLoadBalancerRule并重写initWithNiwsConfig方法与choose方法

public class MyBalance extends AbstractLoadBalancerRule {

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }

    @Override
    public Server choose(Object o) {
        return null;
    }
}

重写choose方法体,然后在配置类中返回MyBalance 即可
注意,自定义负载均衡的类需要与启动类的包同级,不可以与启动类同级或下级


👍 欢迎前往博客主页查看更多内容

👍 如果觉得不错,期待您的点赞、收藏、评论、关注

👍 ​ 如有错误欢迎指正!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值