Ribbon负载均衡

文章目录

1. Ribbon
  • Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。
  • Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡器,当我们将 Ribbon 和 Eureka 一起使用时,Ribbon 会从 Eureka Server(服务注册中心)中获取服务端列表,然后通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。
2.负载均衡原理
  • 将用户的请求平摊分配到多个服务器上运行,以达到扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的。
  • 常见的负载均衡方式有两种:服务端负载均衡、客户端负载均衡
1.服务端负载均衡
  • 当客户端发送请求时,该请求发送到负载均衡服务器,由负载均衡服务器按照某种算法(例如轮询、随机等),从其维护的可用服务清单中选择一个服务端,然后进行转发。
  • 服务端负载均衡的特点:
    • 需要建立一个独立的负载均衡服务器。
    • 负载均衡是在客户端发送请求后进行的,客户端并不知道是哪个服务端提供的服务。
    • 可用服务端清单存储在负载均衡服务器上。
2.客户端负载均衡
  • 客户端负载均衡是将负载均衡逻辑以代码的形式封装到客户端上。客户端通过服务注册中心获取到一份服务端提供的可用服务清单。负载均衡器会在客户端发送请求前通过负载均衡算法选择一个服务端实例再进行访问,以达到负载均衡的目的;
  • 客户端负载均衡的特点:
    • 负载均衡器位于客户端,不需要单独搭建一个负载均衡服务器。
    • 负载均衡是在客户端发送请求前进行的,因此客户端清楚地知道是哪个服务端提供的服务。
    • 客户端都维护了一份可用服务清单,而这份清单都是从服务注册中心获取的。
3.负载均衡流程
4.负载均衡策略
内置负载均衡规则类 规则描述
RoundRobinRule 简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则
AvailabilityFilteringRule 对以下两种服务器进行忽略: (1)在"短路"状态服务器(2)并发数过高的服务器。
WeightedResponseTimeRule 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。而后再对Zone内的多个服务做轮询,默认的实现就是ZoneAvoidanceRule,是一种轮询方案
BestAvailableRule 忽略那些短路的服务器,并选择并发数较低的服务器
RandomRule 随机选择一个可用的服务器
RetryRule 重试机制的选择逻辑
5.自定义负载均衡策略

通过定义IRule实现可以修改负载均衡规则,有两种方式:代码方式、配置文件方式

1.代码方式
  • 在order-service中的OrderApplication类中,定义一个新的IRule
java 复制代码
    /**
     * 创建 RestTemplate 并注入 Spring 容器
     * @return
     */
    @Bean
    @LoadBalanced
    public IRule restTemplate(){
        return new RandomRule();
    }
2.配置文件方式
  • 在order-service的application.yml文件中,添加新的配置也可以修改规则
yml 复制代码
user-service: # 给某个微服务配置负载均衡规则
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

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

6.饥饿加载
  • Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时

  • 在order-service的application.yml文件中,添加新的配置也可以修改规则,开启饥饿加载

yml 复制代码
ribbon:
  eager-load:
    enabled: true
    clients: user-service
相关推荐
你知道“铁甲小宝”吗丶15 小时前
【第37章】Spring Cloud之Spring Cloud Stream分布式消息队列
spring cloud
曾经的三心草16 小时前
springCloud二-SkyWalking3-性能剖析-⽇志上传-告警管理-接入飞书
后端·spring·spring cloud
不够优雅1 天前
【Concept Plugin 3】轻量级插件化解决方案|动态类加载
java·spring boot·spring cloud
半梦半醒*1 天前
k8s——services资源+pod详解1
linux·运维·docker·kubernetes·centos·负载均衡
Justin_192 天前
LVS负载均衡集群理论
java·负载均衡·lvs
pccai-vip2 天前
架构论文《论负载均衡的设计与应用》
运维·架构·负载均衡
壹佰大多2 天前
【Redisson分布式锁源码分析-3】
数据结构·分布式·mysql·spring·spring cloud·wpf·lua
唐僧洗头爱飘柔95272 天前
【SpringCloud(8)】SpringCloud Stream消息驱动;Stream思想;生产者、消费者搭建
后端·spring·spring cloud·设计思想·stream消息驱动·重复消费问题
天***88962 天前
驱动精灵、驱动人生、NVIDIA专业显卡驱动、360驱动大师、联想乐驱动,电脑驱动修复工具大全
网络·电脑·负载均衡
代码AI弗森2 天前
Vultr × Caddy 多站点反向代理 + 负载均衡网关系统实战
运维·负载均衡