04-微服务客户端负载均衡器Ribbon、LoadBalance实战

news2024/9/28 1:16:36

什么是Ribbon
目前主流的负载方案分为以下两种:

  • 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如F5),也有软件的(比如 Nginx)。
  • 客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。

Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超时,重试等。通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询,随机)去调用这些服务。Ribbon也可以实现我们自己的负载均衡算法。

客户端的负载均衡
例如spring cloud中的ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡;即在客户端就进行负载均衡算法分配。
在这里插入图片描述
服务端的负载均衡
例如Nginx,通过Nginx进行负载均衡,先发送请求,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端再进行负载均衡算法分配。
在这里插入图片描述
常见负载均衡算法

  • 随机,通过随机选择服务进行执行,一般这种方式使用较少;
  • 轮训,负载均衡默认实现方式,请求来之后排队处理;
  • 加权轮训,通过对服务器性能的分型,给高配置,低负载的服务器分配更高的权重,均衡各个服务器的压力;
  • 地址Hash,通过客户端请求的地址的HASH值取模映射进行服务器调度。
  • 最小链接数,即使请求均衡了,压力不一定会均衡,最小连接数法就是根据服务器的情况,比如请求积压数等参数,将请求分配到当前压力最小的服务器上。

Ribbon模块
在这里插入图片描述
Ribbon原理
在这里插入图片描述
@LoadBalanced 注解原理

  • @LoadBalanced利用@Qualifier作为restTemplates注入的筛选条件,筛选出具有负载均衡标识的RestTemplate。
    在这里插入图片描述

  • 被@LoadBalanced注解的restTemplate会被定制,添加LoadBalancerInterceptor拦截器。
    在这里插入图片描述
    Ribbon相关接口
    参考: org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration

  • IClientConfig:Ribbon的客户端配置,默认采用DefaultClientConfigImpl实现。

  • IRule:Ribbon的负载均衡策略,默认采用ZoneAvoidanceRule实现,该策略能够在多区域环境下选出最佳区域的实例进行访问。

  • IPing:Ribbon的实例检查策略,默认采用DummyPing实现,该检查策略是一个特殊的实现,实际上它并不会检查实例是否可用,而是始终返回true,默认认为所有服务实例都是可用的。

  • ServerList:服务实例清单的维护机制,默认采用ConfigurationBasedServerList实现。

  • ServerListFilter:服务实例清单过滤机制,默认采ZonePreferenceServerListFilter,该策略能够优先过滤出与请求方处于同区域的服务实例。

  • ILoadBalancer:负载均衡器,默认采用ZoneAwareLoadBalancer实现,它具备了区域感知的能力。
    在这里插入图片描述
    Ribbon负载均衡策略
    在这里插入图片描述

  1. RandomRule: 随机选择一个Server。
  2. RetryRule: 对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的server。
  3. RoundRobinRule: 轮询选择, 轮询index,选择index对应位置的Server。
  4. AvailabilityFilteringRule: 过滤掉一直连接失败的被标记为circuit tripped的后端Server,并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就是检查status里记录的各个Server的运行状态。
  5. BestAvailableRule: 选择一个最小的并发请求的Server,逐个考察Server,如果Server被tripped了,则跳过。
  6. WeightedResponseTimeRule: 根据响应时间加权,响应时间越长,权重越小,被选中的可能性越低。
  7. ZoneAvoidanceRule: 默认的负载均衡策略,即复合判断Server所在区域的性能和Server的可用性选择Server,在没有区域的环境下,类似于轮询(RandomRule)
  8. NacosRule: 同集群优先调用

什么是Spring Cloud LoadBalancer
Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代Ribbon。

Spring官方提供了两种负载均衡的客户端:

  • RestTemplate

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。默认情况下,RestTemplate默认依赖jdk的HTTP连接工具。

  • WebClient

WebClient是从Spring WebFlux 5.0版本开始提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具。它的响应式编程的基于Reactor的。WebClient中提供了标准Http请求方式对应的get、post、put、delete等方法,可以用来发起相应的请求。

默认情况下,如果同时拥有RibbonLoadBalancerClient和BlockingLoadBalancerClient,为了保持向后兼容性,将使用RibbonLoadBalancerClient。要覆盖它,可以设置spring.cloud.loadbalancer.ribbon.enabled属性为false。

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

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

相关文章

同样是血氧仪方案,价格怎么相差这么多?

有没有发现最近血氧仪、额温枪、壁挂式测温仪又开始火了?并且市场活跃度越来越高。而作为我们血氧仪方案提供商或者生产企业来说,您是不是和优优一样会时常听到客户发出如下反馈: “我刚问了另外一家,和你这个样子差不多的&#…

智云通CRM:如何应对“我们还要再考虑一下”?

在征求决策层对报价问题的反馈信息时,销售经常会遇到的另一种意见(群组决策中最常见的意见)是推迟做出决策。这种情况显然是可以理解的,内部决策层认为有必要先私下讨论一番,然后再对你的报价做出答复。毕竟&#xff0…

P2835 刻录光盘

题目描述 在JSOI2005夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习。组委会觉得这个主意不错!可是组委会一时没有足够的空光盘,没法保证每个人都能拿到刻录上资料的光…

二、入门案例

文章目录二、入门案例1、开发环境2、创建数据库及表2.1 创建表2.2 添加数据3、创建Spring Boot工程3.1 初始化工程3.2 引入依赖3.3 idea中安装lombok插件4、编写代码4.1 配置application.yml4.2 启动类4.3 添加实体4.4 添加mapper4.5 测试4.6 添加日志【尚硅谷】MyBatisPlus教程…

盘点ERP系统应具备的10个核心功能

ERP系统在数据管理解决方案中名列前茅。对于许多企业来说,ERP是数据分析、自动化和全面基础设施整合的理想解决方案。还不知道如何选择正确的ERP系统解决方案?别担心,本文盘点了ERP系统应具备的10个核心功能。 1. 集成 该ERP功能是该解决方…

怎么录屏幕视频,不要错过这4种简单的电脑录屏方法

屏幕截图和屏幕录制是我们日常生活中常用的一种手段。比如把自己感兴趣的视频录下来和朋友们分享,或者录制操作视频教程让大家知道怎么做。那怎么录屏幕视频,今天在这里小编为大家推荐4种简单的电脑录屏方法,有需要的小伙伴可以往下看看。电脑…

如何学习批判性思维?——以是什么、为什么、怎么样为视角

写这篇文章有两个目的: 希望对研究者做课题有所帮助。希望整个社会能更多地去思考别人的观点到底成不成立。这点是我们很缺乏的。我会列出国内常见的一些逻辑谬论来加以阐述。 (图:批判一个观点的统一框架) 一、逻辑陈述划分 …

第五届字节青训营笔试后端编程练习题解

文章目录前言T1.36进制加法(模拟)题面思路代码T2.电影院选座(DFS)题面思路代码T3.IP地址(DFS)题面思路代码前言 前段时间🐏了,今天简单写了一下,不知道如何提交代码进行…

新年新玩法,数组“招婿”:老许,你要老婆不要?

文章目录前言一、电梯“招婿”启示风波1.1、寻找“一位又高又帅的 IT 同行人员”1.2、数组“招婿”核心代码1.3、代码全是错误,水平不高二、Java 声明、创建、初始化数组2.1、数组声明存在的语法错误2.2、数组声明、创建、初始化的正确方式三、Java 中对于不同数据类…

尚医通-医院详情-科室接口-显示科室前端整合(二十四)

目录: (1)医院详情-功能 实现 (2)医院排班-需求分析 (3)医院排班-科室接口开发 (4)医院排班-显示科室前端整合 (1)医院详情-功能 实现 在Ho…

基于KT6368A芯片开发SOP8蓝牙自拍杆方案记录总结

一、简介给客户开发一款蓝牙自拍杆的方案芯片,使用KT6368A单芯片解决。两种实现逻辑1、由客户的遥控MCU来控制蓝牙芯片的开启和关闭 2、由KT6368A蓝牙芯片自己完成所有的事情,分两个按键,一个按键短按开机,短按关机。第二个按键实…

【SPI实验--数码管】

SPI实验--数码管一、SPI概念二、SPI硬件连接三、SPI总线通信协议四、SPI四种通信模式五、代码实现数码管一、SPI概念 1.SPI总线是Motorola首先提出的全双工三线制/四线制同步串行总线 2.采用主从模式(Master Slave)架构,支持多slave模式应用…

预测2023年Web3的9大发展趋势

Crypto 和 DeFi 在 2022 年深陷熊市,但 Web3 方面的需求刚刚才开始获得关注。在过去的 12 个月里,Web3 相关的搜索与 2021 年底的峰值相比,一直保持在 30% 以内,下一个上升趋势可能正在到来。下面我列出了目前势头正旺的 9 个 Web…

PIPE接口基本描述

信号名方向描述TxDataIN并行数据输入总线TxDataValidIN1:表示cycle数据有效;0:表示cycle数据无效RxDataOUT并行数据输出总线RxValidOUT1:表示符号锁及当RxDataValid有效时,数据有效 PHY MODEINPHY STATUSOUT SerDesA…

java swing电子商务系统

一、项目简介 本项目是一套基于java swing的电子商务系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,ec…

opencv案例实战——银行卡模式匹配识别

系列文章目录 1.图像读取及其通道与灰度 2.图像填充与图像融合 3.图像滤波 4.图像阈值 5.腐蚀与膨胀 6.图像梯度 7.边缘检测 8.轮廓与轮廓特征 银行卡模式匹配识别系列文章目录前言案例介绍划分模板1.思路2.获取边缘3.获取外接矩形图像预处理切割礼帽操作分割数字块sobel算子膨…

LeetCode题解 二叉树(十):654 最大二叉树;617合并二叉树

654 最大二叉树 medium 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构…

RHCEansible 编写playbook---yaml

YAML 语言特性 YAML的可读性好 YAML和脚本语言的交互性好 YAML使用实现语言的数据类型 YAML有一个一致的信息模型 YAML易于实现 YAML可以基于流来处理 YAML表达能力强,扩展性好YAML的三种数据结构 对象: 键值对的集合,又称为映射、哈希、字典…

Map数据结构详解

Map Object本质上是键值对的集合(Hash结构),但Object只能将字符串当做键,这就给Object带来了很大的限制。 let data {} let s {name : 东方不败} data[s] 西方求败// 如果键传入非字符串的值,会自动为字符串 cons…

思科路由器DHCPv6服务配置

配置如下 Router>ena Router#conf t Router(config)#host R1 R1(config)#ipv6 unicast-routing R1(config)#int g0/0 R1(config-if)#ipv6 add 2001:1::1/64 R1(config-if)#no sh R1(config-if)#exit R1(config)#service dhcp R1(config)#ipv6 local pool v6pool …