Spring Cloud - Ribbon 负载均衡原理、负载策略、懒加载

这篇具有很好参考价值的文章主要介绍了Spring Cloud - Ribbon 负载均衡原理、负载策略、懒加载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Cloud - Ribbon 负载均衡原理、负载策略、懒加载

目录

​编辑

一、Ribbon 负载均衡原理

1.1、前言

1.2、负载均衡的工作流程

二、负载均衡策略

2.1、策略原理

2.2、负载均衡自定义方式

三、Ribbon 加载方式


一、Ribbon 负载均衡原理


1.1、前言

ps:案例是上一章所讲的 “根据订单id查询订单的同时,把订单所属的用户信息一起返回”  。

上一章我们讲到 order-service(订单服务) 使用 RestTemplate 发送 Http 请求到 user-service(用户服务),同时我们使用 @LoadBalanced 注解增加负载均衡,通过负载均衡算法分配到 user-service 集群,那么中间这个负载均衡到底是什么东西在起作用?负载均衡算法到底是什么?

接下来我们就一起来了解一下吧~

1.2、负载均衡的工作流程

负载均衡的工作流程主要有以下几个过程:

  1. 首先 order-service 使用 RestTemplate 发送的请求会被 Ribbon(负载均衡) 所拦截,并对请求的 url 进行解析;
  2. 拿到服务名称 userservice(user-service 配置文件中服务命名) ,接着 Ribbon 会通过这个服务名称 userservice 去 eureka-server (服务注册中心)拉去服务的服务列表(要访问的主机ip和端口号);
  3. 最后 Ribbon 会通过负载均衡算法从服务列表中挑选出合适的ip+端口号,接着 Ribbon 会通过修改服务名称 userservice 为挑选出的 ip+端口号 刚刚请求到对应的服务。

Spring Cloud - Ribbon 负载均衡原理、负载策略、懒加载

Ribbon 底层源码工作流程如下图:

Spring Cloud - Ribbon 负载均衡原理、负载策略、懒加载

二、负载均衡策略


2.1、策略原理

负载均衡的实现主要有三种算法:轮询(默认方式)、随机、权值分配,其中轮询 ZoneAvoidanceRule 也是 @LoadBalanced 注解默认的分配策略,细节上可以分为以下几种:

内置负载均衡规则类

规则描述

RoundRobinRule

简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。

AvailabilityFilteringRule

对以下两种服务器进行忽略:

 1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。

2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit属性进行配置。

WeightedResponseTimeRule

为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。

ZoneAvoidanceRule(默认)

以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。

BestAvailableRule

忽略那些短路的服务器,并选择并发数较低的服务器。

RandomRule

随机选择一个可用的服务器。

RetryRule

重试机制的选择逻辑

2.2、负载均衡自定义方式

负载均衡的自定义方式主要有以下两种:

  1. 代码实现;
  2. 配置文件。

首先,代码方式,就是在 order-service 中的 OrderApplication 类中,定义一个新的 IRule(Ribbon的负载均衡规则是一个叫做IRule的接口来定义的) ,然后加上 @Bean 注解注入到 spring 中,例如我要定义负载均衡算法为随机算法,如下:

Ps:注意 @LoadBalanced 不能缺少!

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

//@MapperScan 注解的作用相当于在指定包下的所有 mapper 接口上都加上了 @mapper 注解
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 将 RestTemplate 对象注入到 spring 容器中
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    //修改负载均衡算法为随机
    @Bean
    public IRule randomRule() {
        return new RandomRule();
    }

}

这种方法是针对与全局服务的,而以下办法为针对某一个微服务有效

另外,还有一种方式,是使用配置文件的方式,在 order-service 的 application.yml 文件中,添加新的配置规则:

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

三、Ribbon 加载方式


Ribbon 默认是采用懒加载的方式,也就是只有第一次访问时才会去创建 LoadBalanceClient,因此第一次请求的时间会很长~

此外,Ribbon 还有一种加载方式——饥饿加载,就是在项目启动时去创建,降低第一次访问的耗时,需要通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true # 开启饥饿加载 
    clients: userservice # 指定对userservice这个服务饥饿加载

Ps:但是值得注意的是,项目启动之初本身也是需要很大的系统开销的,某些情景下,我们将 Ribbon 修改为饥饿加载,可能会更大的加重系统的开销,所以一定要根据实际情况进行选择~

Spring Cloud - Ribbon 负载均衡原理、负载策略、懒加载文章来源地址https://www.toymoban.com/news/detail-492876.html

到了这里,关于Spring Cloud - Ribbon 负载均衡原理、负载策略、懒加载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务Ribbon-负载均衡策略和饥饿加载

    目录 一、负载均衡策略 1.1 负载均衡策略介绍 1.2 自定义负载均衡策略 二、饥饿加载 (笔记整理自bilibili黑马程序员课程) 1.1 负载均衡策略介绍 负载均衡的规则都定义在IRule接口中,而IRule有很多不同的实现类:  不同规则的含义如下: 内置负载均衡规则类 规则描述 Round

    2024年02月13日
    浏览(28)
  • Spring Cloud Ribbon:负载均衡

    1. 介绍 Spring Cloud Ribbon 1.1 什么是 Spring Cloud Ribbon Spring Cloud Ribbon是Netflix开源的负载均衡器,它为分布式服务提供了客户端负载均衡的功能。Ribbon可以根据一系列的负载均衡算法和配置策略,将客户端的请求动态分发到多个服务实例上,以实现高可用性和性能优化。 1.2 负载均

    2024年02月19日
    浏览(29)
  • 【Spring Cloud 四】Ribbon负载均衡

    【Spring Cloud一】微服务基本知识 【Spring Cloud 三】Eureka服务注册与服务发现 目前公司项目使用的注册中心主要是Spring Cloud Alibaba的Nacos做的注册中心和配置中心。并且Nacos使用了Ribbon作为默认的负载均衡器。但是相当于将Ribbon的负载均衡给透明化了,日常开发明面上是看不到

    2024年02月14日
    浏览(33)
  • Ribbon:Spring Cloud负载均衡与服务调用组件

    负载均衡? Ribbon实现服务调用? Ribbon实现负载均衡? 切换负载均衡策略? 定制负载均衡策略? 负载均衡 负载均衡(Load Balance),将用户的请求平分到多个服务器上运行,以扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的。 服务端负载

    2024年02月03日
    浏览(36)
  • Spring Cloud之负载均衡与服务调用(Ribbon)

    目录 Ribbon 简介 负载均衡 简介 负载均衡方式 服务端负载均衡 工作原理 特点 客户端负载均衡 工作原理 特点 对比 实现 负载均衡策略 切换负载均衡策略 定制负载均衡策略 超时与重试 单个服务配置 全局配置 服务调用 示例         Ribbon 是 Netflix 公司发布的开源组件,其

    2024年02月08日
    浏览(43)
  • Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon

    Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon 目前主流的负载均衡方案有两种,一种是集中式均衡负载,在消费者与服务提供者之间使用独立的代理方式进行负载,比如F5、Nginx等。另一种则是客户端自己做负载均衡,根据自己的请求做负载,Ribbon就属于客户端自己

    2024年02月09日
    浏览(38)
  • 4-Spring cloud之搭建Ribbon负载均衡——服务器上实操(下)

    我们在上篇文章的基础上继续Ribbon的负载均衡,为了更清晰,再放一次架构图,如下: 关于图的更多解释,请看Ribbon负载均衡上篇。 关于上篇请看下面文章,如下: 3-Spring cloud之搭建Ribbon负载均衡——服务器上实操(上). Ribbon负载均衡的规则都定义在IRule接口中,而IRule有

    2024年02月12日
    浏览(37)
  • 【Spring Cloud】深入探索 Nacos 注册中心的原理,服务的注册与发现,服务分层模型,负载均衡策略,微服务的权重设置,环境隔离

    在微服务架构中,服务注册中心是整个体系中的关键组件之一。它负责服务的注册、发现和管理,为微服务之间的通信提供了基础设施。在这方面,Nacos(Namespace Aware Clustered Object Storage)作为一种服务发现和配置管理系统,提供了丰富的功能,旨在简化微服务架构中的服务注

    2024年02月06日
    浏览(33)
  • 云原生微服务 第五章 Spring Cloud Netflix Eureka集成负载均衡组件Ribbon

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具,其主要功能是提供客户端的负载均衡算法和服务

    2024年02月08日
    浏览(32)
  • Spring Cloud Alibaba全家桶(三)——微服务负载均衡器Ribbon与LoadBalancer

    本文为 微服务负载均衡器Ribbon与LoadBalancer 相关知识,下边将对 什么是Ribbon (包括: 客户端的负载均衡 、 服务端的负载均衡 、 常见负载均衡算法 ), Nacos使用Ribbon , Ribbon内核原理 (包括: Ribbon原理 , Ribbon负载均衡策略 , 饥饿加载 ), Spring Cloud LoadBalancer (包括:

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包