Ribbon-负载均衡

目录

一、负载均衡的作用位置

二、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(全局配置,调用的所有服务都采用这种方式):

java 复制代码
@Bean
public IRule randomRule(){
    return new RandomRule();
}

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

java 复制代码
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netfix.loadbalancer.RandomRule #负载均衡规则

四、饥饿加载

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

五、总结

1.Ribbon负载均衡规则

规则接口是IRule

默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询

2.负载均衡自定义方式

代码方式:配置灵活,但修改时需要重新打包发布

配置方式:直观,方便,无需重新打包发布但是无法做全局配置

3.饥饿加载

开启饥饿加载

指定饥饿加载的微服务名称

相关推荐
阿里云云原生1 小时前
阿里云发布 Alibaba Cloud AI Agent Handbook,阐述“智能面积”
云原生
Wang's Blog3 小时前
Java框架 SpringCloud 快速入门: Nacos 配置热更新
java·spring·spring cloud
天空鸟_时光不老5 小时前
06-给AI流程加一道人工闸门
java·人工智能·spring boot·后端·spring·spring cloud·架构
Wang's Blog5 小时前
Java框架 SpringCloud 快速入门: Nacos 配置管理之添加配置与 dataId 命名规范
java·开发语言·spring cloud
天空鸟_时光不老5 小时前
01-我不转Python把AI塞进Java里
java·人工智能·spring boot·后端·spring·spring cloud·架构
Zhu7585 小时前
在k8s环境中,离线部署与使用Topograph
云原生·容器·kubernetes
2501_933923256 小时前
SpringCloud:通过订单服务认识什么是微服务
spring boot·后端·spring cloud
天空鸟_时光不老6 小时前
07-检查点与状态持久化
java·人工智能·spring boot·spring·spring cloud·kafka·maven
天空鸟_时光不老7 小时前
09-RAG问答系统落地:从默认分割器的坑到Milvus召回调优
java·人工智能·spring boot·spring·spring cloud·maven·mybatis
A.说学逗唱的Coke7 小时前
【人工智能专题】PolarDB 深度解析:存算分离到 AI Lakebase,云原生数据库的架构演进与实战指南
数据库·人工智能·云原生