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
相关推荐
郑泰科技16 小时前
mstsc 频繁断开是由svchost 策略引起的吗?
windows·笔记·负载均衡
遇见火星17 小时前
Redis主从复制深度解析:数据高可用与负载均衡的核心方案
数据库·redis·缓存·负载均衡
Coder_Boy_1 天前
基于SpringAI企业级智能教学考试平台视频辅助学习模块全业务闭环方案
人工智能·spring cloud
终端行者1 天前
Nginx 反向代理与负载均衡配置 反向代理与负载均衡配置参数
运维·nginx·负载均衡
十月南城1 天前
Spring Cloud生态地图——注册、配置、网关、负载均衡与可观测的组合拳
spring·spring cloud·负载均衡
mr_orange_klj2 天前
关于负载均衡的负载均衡的AI问答(豆包)
运维·负载均衡
用户91743965392 天前
基于SqlSugar开发框架的基础上快速开发H5端的移动应用
前端·负载均衡
lbb 小魔仙2 天前
【Java】Spring Boot 与 Spring Cloud 整合:微服务架构入门实战
java·spring boot·spring cloud·架构
Roye_ack2 天前
【微服务 Day3】SpringCloud实战开发(网关路由 + 网关登录校验 + 自定义过滤器 + 配置共享 + 配置热更新 + 动态路由)
网关·spring cloud·微服务·架构·过滤器·拦截器·配置管理
蜀中孤鹰2 天前
从秒级到毫秒级:一次Redis限流脚本的深度优化实战
redis·spring cloud·lua