Ribbon-负载均衡

本文详细介绍了Ribbon在负载均衡中的作用位置,工作流程,特别是IRule接口的使用,以及如何自定义负载均衡策略和启用饥饿加载,同时提到了与Eureka注册中心的配合。
摘要由CSDN通过智能技术生成

目录

一、负载均衡的作用位置

二、Ribbon负载均衡的工作流程

三、IRule接口

        负载均衡的策略:

        修改负载均衡策略(即修改使用的IRule接口的实现类):

四、饥饿加载

五、总结


       前置知识:Eureka注册中心

        不熟悉Eureka的可以先看一下前一个文章(上面链接)。

一、负载均衡的作用位置

        我们最开始学习的时候,用浏览器来访问的时候都是直接输入ip地址+端口号,而在上面这次请求中,我们只是用了服务的名称就能找到相应的服务,那是因为我们配置了Eureka,帮我们进行了转换,如果我们未配置Eureka,直接用之前那种localhost:userservice/test当然是不能直接成功的。

        Ribbon的作用就是当我们得到一个服务列表,有多个匹配的服务时,ribbon就是做这种选择的,帮助我们选择其中的一个服务执行。当然Ribbon也是有不同的策略来选择服务的。

二、Ribbon负载均衡的工作流程

        当我们发起一个请求,如http://userservice/user/1这个请求,他会被RibbonLoadBanlancerClient拦截,并且会获取到主机名:userservice然后再将该值传给DynamicSercerListLoadBalancer,然后通过这个类来向Eureka服务中心通过userservice拉取服务列表,如localhost:8081,localhost:8082等传回DynamicSercerListLoadBalancer的实例对象,再通过Rule对象,其实现IRule的接口,来完成服务负载均衡选择出一个服务,最终返回RibbonLoadBanlancerClient的对象,再修改原先的URL,重新发出请求,请求到真正的URL。

三、IRule接口

        Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则:

        负载均衡的策略:

        修改负载均衡策略(即修改使用的IRule接口的实现类):

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

                1.代码方式:再配置类中定义一个新的IRule(全局配置,调用的所有服务都采用这种方式):

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

                2.配置文件方式:在配置文件中添加新的配置也可以修改规则,只能针对某个微服务而言(userservice):

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netfix.loadbalancer.RandomRule #负载均衡规则

四、饥饿加载

        Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

五、总结

        1.Ribbon负载均衡规则
                规则接口是IRule
                默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
        2.负载均衡自定义方式
                代码方式:配置灵活,但修改时需要重新打包发布
                配置方式:直观,方便,无需重新打包发布但是无法做全局配置
        3.饥饿加载
                开启饥饿加载
                指定饥饿加载的微服务名称

  • 49
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Ribbon的自定义负载均衡,你可以通过以下步骤进行操作: 1. 添加Ribbon依赖:在你的项目中添加Ribbon的依赖,例如使用Maven管理项目依赖的话,在`pom.xml`文件中添加如下依赖: ```xml <dependencies> ... <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> ... </dependencies> ``` 2. 创建一个自定义的负载均衡器:可以实现`IRule`接口来定制自己的负载均衡策略。例如,你可以创建一个名为`CustomRule`的类来实现自己的负载均衡算法,继承自`AbstractLoadBalancerRule`。 ```java import com.netflix.loadbalancer.AbstractLoadBalancerRule; import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; public class CustomRule extends AbstractLoadBalancerRule { @Override public Server choose(Object key) { // 自定义负载均衡算法逻辑 // 返回一个Server对象作为选择结果 // 可以根据自己的需求进行算法实现 ... } } ``` 3. 配置自定义负载均衡器:在应用的配置文件中,指定使用自定义的负载均衡器。例如,在`application.properties`或`application.yml`文件中添加如下配置: ``` spring: cloud: loadbalancer: ribbon: rule: com.example.CustomRule ``` 4. 启用Ribbon负载均衡:确保在应用的启动类上添加`@EnableDiscoveryClient`注解,以启用Ribbon负载均衡功能。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 通过以上步骤,你就可以自定义Ribbon的负载均衡策略了。注意,这里只是简单的介绍了一种实现方式,你可以根据自己的需求进行更详细的定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值