【微服务-Ribbon】什么是负载均衡?微服务中负载均衡有哪些策略呢?

前面几篇文章,我们了解了一下Nacos的单机部署、集群部署以及微服务接入Nacos的步骤。从本篇开始,我们来看一下微服务第二个通用组件-负载均衡(Ribbon)。

1、Ribbon负载均衡器

负载均衡顾名思义,是指通过软件或者硬件措施。将来自客户端的请求按照某种策略分配到集群的每一个节点上,保证提供服务的这些节点 CPU、内存等设备负载情况大致在一条水平线,避免由于某个节点负载过高产生宕机,再将这些处理压力传递到其他节点上产生系统性崩溃。

例如:我们有个微服务是做数据推送的,一共部署了3个节点,如果没有负载均衡策略来分摊推送请求,那么就会逮住一台服务器拼命推送,如果请求量巨大,把第一台服务器搞宕机了,那么海量的请求就会去第二台服务器,把第二台服务器也整宕机了,请求继续去嚯嚯第三台服务器,第三台也毫无疑问的就义了。那么我们数据推送功能就彻底废了。。。数据推送下游服务就没事儿可干了,但业务也就中断了,P1级别的事故就此产生。。。大概就这么个道理。

微服务宕机示意图

由此可见,微服务间的负载均衡在海量请求时,发挥的作用还是非常大的。那么负载均衡在实现方式上分类,可以分为服务端负载均衡客户端负载均衡

(1)服务端负载均衡

服务端负载均衡,就是指在架构中搭建专门的负载均衡器,由负载均衡器持有后端服务节点的信息,客户端发送来的请求会由负载均衡器分发给后端服务的某个节点,进而实现服务的负载均衡。目前常用的负载均衡软硬件有:F5、Nginx、Haproxy。

(2)客户端负载均衡

客户端负载均衡,是指在架构中不再部署额外的负载均衡器,在每个服务消费者内部持有客户端负载均衡器,由内置的负载均衡策略决定向哪个服务提供者发起请求。

说到这,我们的主角登场了,Netfilx Ribbon 是 Netflix 公司开源的一个负载均衡组件,是属于客户端负载均衡器。目前Ribbon 已被 Spring Cloud 官方技术生态整合,运行时以 SDK 形式内嵌到每一个微服务实例中,为微服务间通信提供负载均衡与高可用支持。

例如:我们有个订单服务在查询订单时需要附带对应商品详情,这就意味着订单服务依赖于商品服务,两者必然产生服务间通信,执行过程如下图所示:

1、订单服务与商品服务实例在启动时会向Nacos注册信息。

2、订单服务向商品服务发起查询前,Ribbon会向Nacos查询商品服务的可用实例列表。

3、Ribbon根据设置的负载均衡策略从商品服务列表中选择一个实例。

4、订单服务根据Ribbon选择的实例发起请求,完成RESTful通信。

负载均衡的作用大概说完了,那么我们上面一直有提到一个叫负载策略的东西,它到底是啥呢? 具体有哪些策略呢? 我们接着看!

2、负载均衡策略

Ribbon中内置有以下几种策略:

(1)RoundRobinRule(轮询)

这是Ribbon的默认策略。默认超过10次获取到的服务(server)都不可用,会返回一个空的server。

(2)RandomRule(随机)

如果随机到的server为null或不可用,会不停的循环选取。

(3)RetryRule(重试)

⼀定时限内循环重试。默认继承 RoundRobinRule,也⽀持自定义注⼊,RetryRule 会在每次选取之后,对选取的 server 进⾏判断,是否为 null,是否 alive,并且在 500ms 内会不停地选取判断。而 RoundRobinRule 失效的策略是超过 10 次,RandomRule 没有失效时间的概念,只要 serverList 没都挂。

(4)BestAvailableRule(最小连接数)

Ribbon通过遍历 serverList,选取出可⽤的且连接数最小的⼀个 server。那么会调用 RoundRobinRule 重新选取。

(5)AvailabilityFilteringRule(可用过滤)

可用过滤策略,扩展了轮询策略,会先通过默认的轮询选取⼀个 server,再去判断该 server 是否超时可用、当前连接数是否超限,都成功再返回。

(6)ZoneAvoidanceRule(区域权衡)

区域权衡策略。扩展了轮询策略,除了过滤超时和链接数过多的 server,还会过滤掉不符合要求的 zone 区域⾥⾯的所有节点,始终保证在⼀个区域/机房内的服务实例进行轮询。

3、如何在微服务中更改负载均衡策略

要更改微服务通信时采用的负载均衡策略也很简单,在 application.yml 中采用下面格式书写即可。

provider-service: #服务提供者的微服务idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置对应的负载均衡类

具体的负载均衡类可以在 com.netflix.loadbalancer 包下找到:

Ribbon介绍到这里就结束了,下一篇我们来看一下如何使用Ribbon和RestTemplate实现服务间的高可用。欢迎继续关注。

欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发

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

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

相关文章

电能质量分析仪是什么

TH-6500电能质量分析仪是一种用于记录和分析现场电能质量参数的设备。它能够检测并记录电力系统的电压波动、频率偏差、谐波、三相不平衡等参数,帮助用户了解电力系统的运行状态,及时发现并解决潜在的电能质量问题。 该设备具备多种测量功能&#xff0c…

供应LF1608-LR83KDAT 芯片

长期供应各品牌芯片: LF1608-LR83KDAT IMX290LQR-G STM32F103C8T6TR STM32F103C8T6TR STM32F103CBT7TR TPS3823-33DBVR IMX326 NM1482KSLAXCL-3B EM6AB160TSE-5G W25Q128JVSIQ FMN1ET1TCJ-25IG PN614G6D2TE-B8BE0 GD25Q128ESIG FM6BD1G1GMB-2.5BLCGE…

正则表达式=》判断中文字

判断中文字 //Name Classification string input = "Eng中"; string patternZh = @"^\(*([\u4E00-\u9FFF_\s\.\,\-]{1,98})?\)*$"; Match match = Regex.Match(input, patternZh); Console

AI系列:大语言模型的function calling(下)- 使用LangChain

目录 前言LangChain Tool/Function calling1. Tool/function加强功能LangChain的tool装饰器其他方式: Pydantic 2. 绑定tools/functions3. 调用大模型(LLM)4. function calling处理流程 LangChain版代码与原生LLM调用的比较参考 前言 在AI系列:大语言模型的functio…

嵌入式工程师有哪些必备技能,和电子爱好者有很大区别!

要掌握的技能实际上是非常多的。在这里,我来结合自己亲身经历,从技术、思维、项目管理等方面来谈一下我认为嵌入式开发需要掌握的技能。 技术方面 C语言和汇编语言能力 C语言是嵌入式开发最核心的编程语言。在我的初学阶段,我花费了很多时间…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(4)——架构分析 - 核心操作提示词构造

4.4.4.核心操作与提示词构造 (1)感知 0.根据vision_r参数,获取NPC周边(2*vision_r 1) **2个tile 1.将这些空间信息存储在NPC的空间记忆字典树 2.基于0的范围,获取当前NPC所在arena的所有事件,计算事件源距离NPC的…

替换Excel偶数行为上下平均值

169个直接转换上下两行转换实现代码 import openpyxl# 打开Excel文件 input_file (10s)result03-1.xlsx output_file new-34.xlsx wb openpyxl.load_workbook(input_file) output_wb openpyxl.Workbook()# 处理每个工作表 for sheet_name in wb.sheetnames:sheet wb[shee…

我用AI帮我画刘亦菲写真,绘画写真某一天是否可以取代照相馆?

我用AI帮我画刘亦菲写真,绘画写真某一天是否可以取代照相馆? 最近我试了用FaceChain人物写真生成来测试帮我绘图,为了不翻车,我在网上随便找了刘亦菲的日常照片10多张左右作为训练原图。 真随便找的 生成效果有多种选择 下面…

【问题处理】银河麒麟操作系统实例分享,服务器操作系统VNC远程问题分析

1.服务器环境以及配置 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 0518-server 2.问题现象描述 服务器通过vncserver:1.service服务启动的vnc服务后,普通用户用vnc连接时,锁屏后,然后输入登陆密码会报密码错误&…

Python Selenium 的基本使用方法

文章目录 1. 概述2. 安装Chrome及ChromeDriver2.1 安装Chrome2.2 安装ChromeDriver 3. 安装Selenium4. 常见用法4.1 启动4.2 查找元素4.3 等待页面加载元素 1. 概述 Selenium 是一个用于自动化 web 浏览器的工具,它提供了一套用于测试 web 应用程序的工具和库。Sel…

备考2024年小学生古诗文大会:吃透历年真题和知识点(持续讲题)

对上海小学生的小升初和各种评优争章来说,语文、数学、英语的含金量较高的证书还是很有价值和帮助的。对于语文类的竞赛,小学生古诗文大会和汉字小达人通常是必不可少的,因为这两个针对性强,而且具有很强的上海本地特色。 根据往…

【nnUNetv2进阶】六、nnUNetv2 魔改网络-小试牛刀-加入注意力机制CBAM

nnUNet是一个自适应的深度学习框架,专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点: 自适应框架:nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等,从而避免了繁琐的手工调参过程。 自动化流程&a…

Shopee虾皮批量上传全球产品指南

当shopee虾皮需要大量上架新产品时,批量工具可以更好的提升效率。通过本指南,你将了解如何批量上传全球商品,本指南适用于所有站点。 一、什么是批量上传? 您可以通过【中国卖家中心>>全球商品>>批量上传】功能&…

PHP实现阿里OSS对象存储

一:阿里OSS文档地址 官方文档:https://help.aliyun.com/zh/oss/ github地址:https://github.com/aliyun/aliyun-oss-php-sdk 二:安装阿里OSS拓展 composer require aliyuncs/oss-sdk-php 三:阿里OSS使用教程 1&a…

一文教您理解Playwright是如何实现动态等待的

使用过Playwright的同学都会有这样的感受,Playwright对UI页面中元素的识别非常稳定,这离不开其强大的动态等待机制!简单的解释就是,Playwright在对UI页面中的任何元素操作之前,都需要做出一些列的校验工作来确保能够稳…

GaussDB数据库SQL系列-聚合函数

背景 在这篇文章中,我们将深入探讨GaussDB数据库中聚合函数的使用和优化。聚合函数是数据库查询中非常重要的工具,它们可以对一组值执行计算并返回单个值。例如,聚合函数可以用来计算平均值、总和、最大值和最小值。 这些功能在数据分析和报…

【Linux】网络与守护进程

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:进程状态、类型、优先级、命令行参数概念、环境变量(重要)、程序地址空间 目录 👉🏻守护…

面试八股——集合——List

主要问题 数组 如果数组索引从0开始时,数组的寻址方式为: 如果数组索引从1开始时,数组的寻址方式为: 此时对于CPU来说增加了一个减法指令,降低寻址效率。 ArrayList⭐ ArrayList构造函数 尤其说一下第三个构造函数流…

【复习笔记】FreeRTOS(五)时间片调度

本文是FreeRTOS复习笔记的第五节,时间片调度。 上一篇文章: 【复习笔记】reeRTOS(四) 列表项的插入和删除 文章目录 1.时间片调度简介1.1. 运行过程 二、实验设计三、测试例程四、实验效果 1.时间片调度简介 FreeRTOS支持多个任务同时拥有一个优先级&am…

设计千万级并发系统架构需要考虑的各方面因素

设计千万级并发系统架构需要考虑多方面因素,包括系统的可伸缩性、高可用性、性能、安全性等。 1、分布式架构: 使用微服务架构:将系统拆分成多个独立的服务,每个服务都可以独立部署和扩展。 使用分布式服务框架:如S…