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
相关推荐
一路向北·重庆分伦7 小时前
03:流量控制与熔断降级Sentinel+Hystrix
spring cloud
小江的记录本9 小时前
【Bean】JavaBean(原生规范)/ Spring Bean 【重点】/ 企业级Bean(EJB/Jakarta Bean)
java·数据库·spring boot·后端·spring·spring cloud·mybatis
中国胖子风清扬9 小时前
Camunda 8 概念详解:梳理新一代工作流引擎的核心概念与组件
java·spring boot·后端·spring cloud·ai·云原生·spring webflux
殷紫川10 小时前
吃透 Spring Boot 3 + Spring Cloud 云原生新特性
spring boot·spring cloud·架构
heimeiyingwang10 小时前
【架构实战】Spring Cloud微服务实战入门
spring cloud·微服务·架构
桌面运维家13 小时前
Nginx+Keepalived:Linux高可用负载均衡配置实战
linux·nginx·负载均衡
梵得儿SHI14 小时前
SpringCloud 微服务实战:支付全链路生产级落地(接口对接 + 异步通知 + 订单状态闭环)
spring·spring cloud·微服务·微信支付·支付模块·支付集成·支付系统架构设计
爱吃烤鸡翅的酸菜鱼14 小时前
Spring Cloud Eureka 服务注册与发现实战详解:从原理到高可用集群搭建
java·spring·spring cloud·eureka
FJW02081416 小时前
LVS+Keepalived+HAProxy双主高可用负载均衡集群
运维·负载均衡·lvs·高可用
一路向北·重庆分伦1 天前
01:服务注册与发现+配置中心-Nacos+Eureka
spring cloud