【SpringCloud入门】-- Ribbon入门

news2024/11/16 3:28:02

1.什么是Ribbon?

Ribbon就是netflix公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项,如连接超时,重试等等。Ribbon作为服务消费者的负载均衡器,有两种使用方式,一是和RestTemplate结合,二是和Open Feign结合。OpenFeign默认集成Ribbon。

2.什么是负载均衡?

负载均衡是一种在计算机网络和服务器系统中使用的技术,旨在平衡系统中的工作负载,确保资源能够以均衡的方式分配给各个请求。简单来说,负载均衡就像是一个智能调度器,它将用户请求分配到多个服务器上,以避免任何一个服务器过载或不工作。

举个例子来说明,假设你经营一家餐厅,每天会有很多客人到来点餐。如果只有一个服务员负责接待所有客人,那么可能会出现排队等待的情况,有些客人可能会感到不满。为了解决这个问题,你决定雇佣更多的服务员,并将客人均匀地分配给他们。这样,每个服务员只需处理一部分客人,服务效率更高,客人也不需要长时间等待。这就是负载均衡的概念。

负载均衡可以通过多种算法来实现,常见的有轮询算法、最小连接数算法、最短响应时间算法等。它们根据不同的策略和条件来确定应该将请求发送到哪个服务器上,以实现负载的均衡。

3.Ribbon负载均衡的算法和实现

ribbon中核心的接口IRule

Ribbon是一个开源的负载均衡器,常用于基于Java的微服务架构中。它提供了多种负载均衡算法和实现方式,下面是其中几种常见的算法和实现:

  1. 轮询(Round Robin):这是最简单的负载均衡算法,Ribbon会将请求按照顺序分配给后端服务器。每个请求依次发送到不同的服务器,实现了请求的均衡分发。

  2. 权重轮询(Weighted Round Robin):在轮询的基础上,每个服务器都可以设置一个权重值,表示其处理能力。Ribbon会根据权重值来分配请求,处理能力越强的服务器获得更多的请求。

  3. 随机(Random):Ribbon会随机选择一个后端服务器来处理请求。每个服务器被选中的概率是相等的,适用于无需考虑服务器性能差异的场景。

  4. 最少连接(Least Connections):Ribbon会选择当前连接数最少的服务器来处理请求。通过动态监测服务器的连接数,将请求发送到连接数最少的服务器上,实现了请求的均衡分配。

  5. 响应时间加权(Response Time Weighted):根据服务器的平均响应时间来进行权重分配。平均响应时间较短的服务器获得更高的权重,从而获得更多的请求。

  6. Hash散列(Hashing):根据请求的特定属性(如请求URL、请求IP等)进行哈希计算,然后将哈希值映射到后端服务器。相同哈希值的请求总是会被分配到同一个服务器上,保证了相同请求的一致性处理。

除了以上的算法,Ribbon还支持自定义负载均衡策略。你可以基于自己的业务需求和场景特点,实现适合自己的负载均衡算法。

需要注意的是,Ribbon在最新版本的Spring Cloud中已经进入维护模式,推荐使用Spring Cloud LoadBalancer替代,它提供了更强大、灵活的负载均衡能力。

4.Ribbon调用前要做什么事?

通过“http://” + serviceId + "/info" ,思考ribbon需要做什么?

restTemplate.getForObject("http://provider/info",String.class);

1. 拦截该请求。

2. 获取该请求的url地址。

3. 截取url地址的provider。

4. 从服务列表找到key为provider的服务实例集合。

5. 根据负载均衡算法选出符合的实例。

6. 拿到该实例的host和port,重构url中的provider。

7. 发送restTemplate.getForObject(“http://ip:port/info”,String.class)。

5.如何修改Ribbon默认的负载均衡算法

修改yml文件,指定某个服务用什么算法

provider :
# 提供者的服务名称 , 那么访问该服务的时候就会按照自定义的负载均衡算法
        ribbon :
                NFLoadBalancerRuleClassName : com.netflix.loadbalancer.RandomRule
# 几种算法的全限定类名

6.Ribbon底层实现原理

Ribbon的底层实现原理主要包括两个核心部分:服务发现和负载均衡算法。

  1. 服务发现: Ribbon通过与服务注册中心进行交互,获取可用的服务实例列表。服务注册中心(如Eureka、Consul)是一个用于服务治理的组件,它能够帮助服务提供者将自身的信息注册到其中,消费者可以从注册中心获取可用的服务实例。Ribbon会定期从注册中心拉取最新的服务列表,并缓存起来供后续使用。这样就保证了Ribbon始终具备最新的可用服务列表。同时,当有新的服务实例加入或从注册中心下线时,Ribbon也能及时感知并更新服务列表。

  2. 负载均衡算法: Ribbon提供了多种负载均衡算法,用于决定将请求发送到哪个服务实例上。常见的负载均衡算法包括轮询(Round Robin)、权重轮询(Weighted Round Robin)、随机(Random)、最少连接(Least Connections)、响应时间加权(Response Time Weighted)等。Ribbon根据选择的负载均衡算法,在服务列表中选择一个合适的服务实例,并将请求发送到该实例上。这样可以实现请求的均衡分发,提高系统的可用性和性能。

 Ribbon通过服务发现获取可用的服务列表,并借助负载均衡算法实现请求的合理分配。这样可以使得客户端能够有效地与后端服务进行通信,提高系统的负载均衡能力和整体性能。需要注意的是,最新版的Spring Cloud已经将Ribbon进入维护模式,推荐使用Spring Cloud LoadBalancer等替代方案来实现负载均衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/657101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 2481. Minimum Cuts to Divide a Circle【数学,几何】简单

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

AMD——CPU微架构分析

一、SoC架构 1.1 整体架构 Zeppelin 参考链接:wikichip: Zeppelin 通过infinity fabric总线将单die分成多die的SoC架构,每个Die包含两个CPU核(CCX)、2各DDR通道、USB、低功耗IO以及多个IFOP和IFIS serdes接口。 如下所述中&…

【Python 随练】三数字排序

题目: 输入三个整数 x, y, z,请按照从小到大的顺序输出这三个数。 简介: 在本篇博客中,我们将使用Python代码解决一个简单的排序问题:如何将输入的三个整数按照从小到大的顺序进行排序并输出。我们将提供问题的解析…

力扣动态规划专题(三)完全背包 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯 322. 零钱兑换 279.完全平方数 139.单词拆分 步骤及C++实现

文章目录 完全背包一维dp数组 滚动数组 518.零钱兑换II377. 组合总和 Ⅳ70. 爬楼梯322. 零钱兑换279.完全平方数139.单词拆分 完全背包 完全背包的物品数量是无限的,01背包的物品数量只有一个 完全背包和01背包分许步骤一样,唯一不同就是体现在遍历顺序上…

JVM内存分析:Aviator低版本内存泄漏问题分析

目录 1.频繁FullGC告警 2.堆转储操作生成dump文件 3.利用MAT工具分析dump文件 3.1 大对象视图分析内存泄漏原因 3.2 Aviator框架中什么地方用到ThreadLocal? 3.3 fnLocal为什么存在内存泄漏? 3.4 LambdaFunctionBootstrap为什么没有释放&#xff…

002mavenSettings配置

Maven –Settings 官网说明https://maven.apache.org/guides/mini/guide-mirror-settings.html 官网说明 模板 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"htt…

【Redis】持久化机制

一、三种持久化机制 RDF快照&#xff1a;通过某一时刻的快照&#xff0c;将数据以二进制形式永久存储在磁盘中。AOF&#xff1a;将每个修改命令通过write函数追加到文件中。混合持久化&#xff1a;AOF重写时&#xff0c;将重写这一刻之前的内存做RDB快照存储&#xff0c;并将此…

前端vue上拉加载下拉刷新组件,支持列表分页 本地分页

前端vue上拉加载下拉刷新组件,支持列表分页 本地分页, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id12942 喜欢我的前端组件分享文章的&#xff0c;帮忙加个关注&#xff0c;非常感谢&#x1f64f;&#x1f64f; 效果图如下: #### 使用方法…

StarRocks 文章收集

StarRocks在58的实践 StarRocks在58的实践 - 墨天轮StarRocks在58的实践 --2022-06-08https://www.modb.pro/db/639611 StarRocks之系统架构 StarRocks之系统架构 - 墨天轮https://www.modb.pro/db/610300 StarRocks小规模集群部署最佳实践(1/2) 0016.S StarRocks小规模集…

JDBC 2023年最新学习笔记!

课程笔记说明 我的笔记是来源于尚硅谷的赵伟风老师的2023年最新版jdbc的课程 视频链接&#xff1a; 尚硅谷JDBC实战教程&#xff08;2023最新版jdbc&#xff0c;JDK17MySQL8&#xff09;_哔哩哔哩_bilibili 课程资料&#xff1a; 关注“尚硅谷教育”&#xff0c;后台回复J…

中年“难”人

对于每个打工人而言&#xff0c;人生无外乎两种状态&#xff0c;要么已是中年人&#xff0c;要么走在成为中年人的路上&#xff0c;可是当下横空出世的中产作死三件套&#xff0c;让每个打工人都不寒而栗 - 房贷近千万&#xff1b; 配偶不上班&#xff1b; 两娃上国际。 这个…

走在时代前沿:宝洁的柔性供应链战略及其对全球快消品市场的影响

01 先进的供应链计划不断推动宝洁引领全球快速消费品市场 宝洁公司&#xff08;Procter & Gamble&#xff09;成立于1837年&#xff0c;是全球知名的消费品公司&#xff0c;公司拥有多个知名品牌&#xff0c;如宝洁、海飞丝、汰渍、奥妙、潘婷、威露士等&#xff0c;这些产…

程序员必须掌握的消息中间件-RabbitMQ

一、Rabbit 概述 RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用来通过普通协议在完全不同的应用中间共享数据&#xff0c;RabbitMQ 是使用 Erlang 语言来编写的&#xff0c;并且 RabbitMQ 是基于 AMQP 协议的。 特点&#xff1a; 开源、性能优秀 Erlang 语言最初用…

【ChatGPT+XMind超级详细的保姆级思维导图教程】

&#x1f680; AI &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN…

Spring Boot 异常报告器解析

基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建Spring Boot 框架整体启动流程详解Spring Boot 系统初始化器详解Spring Boot 监听器详解Spring Boot banner详解Spring Boot 属性配置解析Spring Boot 属性加载原理解析Spring Boot 异常报告器解析 创建自定…

怎么查投票人画展投票链接怎么做微信链接投票

近些年来&#xff0c;第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放&#xff0c;更多人选择微信投票小程序平台&#xff0c;因为它有非常大的优势。 1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…

C语言入门万字笔记

C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言&#xff0c;所以说学习C语言是进入编程世界的必修…

机器学习、计算机视觉和深度学习

机器学习、计算机视觉和深度学习 1 什么是机器学习&#xff1f;2 机器学习的类型3 什么是计算机视觉&#xff1f;4 计算机视觉的机器学习应用5 总结参考 这篇博客将简要介绍&#xff1a;机器学习和用于计算机视觉的机器学习。 想象一下&#xff1a;你可以使用人脸检测算法在图…

【后端】SSM框架下REST风格代码注释详解

前言 最近学习了一下SSM&#xff0c;不得不说&#xff0c;spring不用注解真的是天打雷劈&#xff0c;就那个bean真的就是折磨人。 下面是我总结的spring注解。 Value 此注解可以用来获取导入的jdbc.properties文件的值。 Value("${jdbc.driver}")private String…

【C++】C++11新特性重点:可变参数+lambda

C11新特性第二篇重点 文章目录 上一篇的补充一、可变参数模板二、lambda函数总结 前言 上一篇我们重点讲解了右值引用移动语义&#xff0c;关于移动构造和移动赋值还有一些需要补充的知识&#xff1a; 如果你没有自己实现移动构造函数&#xff0c;且没有实现析构函数 、拷贝构…