负载均衡原理及算法

负载均衡指把用户请求分摊到不同服务器处理,提高系统的并发性和可靠性。

可由专门的软件(更便宜)和硬件(性能好)实现。

负载均衡分为服务端负载均衡和客户端负载均衡。

服务端负载均衡 主要应用在 系统外部请求网关层 之间,可以使用 软件 或者 硬件 实现。

客户端负载均衡 应用于系统内部的不同的服务之间。客户端自己维护服务器地址列表,发送请求前,根据负载均衡算法选择某一台服务器处理请求。

客户端负载均衡器和服务运行在同一个Java 程序里,无需额外的网络开销。但其实现受到编程语言的限制,如 Spring Cloud Load Balancer 只能用于 Java 语言。

 Dubbo、Spring Cloud 均内置开箱即用的客户端负载均衡实现。Dubbo:默认自带,Spring Cloud: 通过组件实现,属于可选项,较常用的是 Spring Cloud Load Balancer(官方,推荐) 和 Ribbon(Netflix,已被启用)。

负载均衡常见算法

随机法:

未配置权重,所有的服务器被访问的概率相同。配置权重,权重越高被访问概率越大。

未加权重的随机算法适合服务器性能相近的集群,每个服务器承载相同的负载。加权随机算法适合服务器性能不等的集群,权重使请求分配更合理。

缺陷:部分机器在一段时间之内无法被随机到。

轮询法

挨个轮询服务器处理,也可设置权重。

未配置权重,每个请求按时间顺序逐一分配到不同的服务器处理。配置权重,权重越高的服务器被访问的次数就越多。

平滑的加权轮训算法:

平滑的加权轮训算法最早是在 Nginx 中被实现,可以参考这个 commit:Upstream: smooth weighted round-robin balancing. · phusion/nginx@27e9498 · GitHub

两次随机:

两次随机法:随机法的基础上多加一次随机,多选一个服务器。根据两台服务器的负载情况,选出最合适的服务器。

好处:可动态地调节后端节点的负载,使其更加均衡。如只使用一次随机,可能会导致某些服务器过载,而某些服务器空闲

哈希法:

将请求的参数信息通过哈希函数转换成哈希值,根据哈希值决定使用哪一台服务器。

服务器数量不变时,相同参数的请求总被同一台服务器处理,如同个 IP 的请求、同一个用户的请求。

一致哈希法:

服务器数量变化时,常规哈希的哈希值会重新落在不同的服务器。而一致性哈希是将数据和节点映射到一个哈希环上,然后根据哈希值的顺序来确定数据属于哪个节点。当服务器增加或删除时,只影响该服务器的哈希,不会导致整个服务集群的哈希值重排。

最小链接法:

遍历服务器列表,选连接数最小的服务器来响应当前请求。相同连接时,可进行加权随机。

最少活跃法:

最少活跃法以活动连接数(可理解为当前正在处理的请求数)为标准。活跃数越低,说明处理能力越强,使处理能力强的服务器处理更多请求。相同活跃数时,进行加权随机

最快相应时间法:

客户端维持每个服务器的响应时间,每次请求挑响应时间最短的。

常用负载均衡解决方案

DNS 解析:在 DNS 服务器中为同一个主机配置多个 服务器IP 地址。用户请求域名时,DNS 服务器采用轮询返回 IP 地址。现在的 DNS 解析几乎都支持 IP 地址的权重配置,使性能不等的服务器处理请求更合理。如:阿里云 DNS 支持权重配置

反向代理:客户端将请求发到反向代理服务器,由其选择目标服务器,获取数据后再返回给客户端。对外暴露的是反向代理服务器地址,隐藏了真实服务器 IP 。

最常用的反向代理服务器:Nginx 。

客户端负载均衡组件

Netflix RibbonSpring Cloud Load Balancer 是目前 Java 最流行的两个负载均衡组件。

Ribbon :老牌负载均衡组件,由Netflix 开发,功能比较全面,支持负载均衡策略多。 Spring Cloud Load Balancer:  Spring 官方为取代 Ribbon 开发,功能相对更简单一些,支持的负载均衡少。

Ribbon 支持的 7 种负载均衡策略:

  • RandomRule:随机策略。
  • RoundRobinRule(默认):轮询策略
  • WeightedResponseTimeRule:权重(根据响应时间决定权重)策略
  • BestAvailableRule:最小连接数策略
  • RetryRule:重试策略(按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null)
  • AvailabilityFilteringRule:可用敏感性策略(先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例)
  • ZoneAvoidanceRule:区域敏感性策略(根据服务所在区域的性能和服务的可用性来选择服务实例)

Spring Cloud Load Balancer 支持的 2 种负载均衡策略:

  • RandomLoadBalancer:随机策略
  • RoundRobinLoadBalancer(默认):轮询策略

 

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

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

相关文章

【网络取证箱】网络取证在线分析工具箱

【网络取证箱】网络取证在线分析工具箱 在线网站查询工具箱,没什么介绍的,所见即所得,在本文档里补充了其它一些网络安全资源,请忽用于非法活动,仅供学习研究—【蘇小沐】 (一)Whois查询 主要…

docker 进入容器内部命令

docker容器运行了,怎么进入容器内部查看内部的文件情况呢? 答:可以通过docker exec 的命令查看。 docker exec --help 可以查看命令介绍 : docker exec -it XXX /bin/bash XX为容器ID 进入容器内部 /bin/bash是需要添加的 不…

Java NIO和IO之间的区别

前言 NIO(New IO),这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出…

Python笔记|列表

Python 支持多种复合数据类型,可将不同值组合在一起。最常用的是列表——用方括号标注,逗号分隔的一组值。列表可以包含不同类型的元素,一般情况下,各个元素的类型相同: >>> squares [1, 4, 9, 16, 25] &g…

Vue3中基本数据类型为什么需要.value,,,引用类型不需要.value

1、在v3中使用基本数据类型(如数字、字符串、布尔值)时,如果你希望响应式地更新数据并触发视图更新,需要使用ref包裹基本数据类型,然后将基本数据类型转化为响应式对象;- - - 因此当你使用ref包裹基本数据类型时,实际上得到的是一个包含.valu…

【DFS+贪心】第十四届蓝桥杯省赛C++ B组《飞机降落》(C++)

【题目描述】 有 N 架飞机准备降落到某个只有一条跑道的机场。 其中第 i 架飞机在 Ti 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di 个单位时间,即它最早可以于 Ti 时刻开始降落,最晚可以于 TiDi 时刻开始降落。 降落过程需要 L…

B002-springcloud alibaba 微服务环境搭建

目录 创建父工程创建基础模块创建用户微服务创建商品微服务创建订单微服务微服务调用 创建父工程 新建项目springcloud-alibaba&#xff0c;本工程不需要写代码&#xff0c;删除src 导包 <parent><groupId>org.springframework.boot</groupId><artifact…

Linux上Mysql安装和部署(图文结合超详细)

1、首先将虚拟机装成功&#xff08;这里不做演示&#xff09; 2、df-h 查看光盘是否挂载&#xff0c;已挂载进行下一步&#xff0c;未挂载手动挂载 2.1、手动挂载 mount -o ro /dev/sr0 /media3、进入etc/yum.repos.d目录查看仓是否配置&#xff0c;若配置进行下一一步&#…

360企业安全浏览器兼容模式显示异常某个内容不显示 偶发现象 本地无法复现情况js

360企业安全浏览器兼容模式显示异常 &#xff0c;现象测试环境频发 &#xff0c;本地连测试无法复现&#xff0c;线上反馈问题。 出现问题的电脑为windows且使用360企业安全浏览器打开兼容模式可复现 复现过程&#xff1a; 不直接点击超链接跳转页面 &#xff0c;登录后直接通…

C++ 侯捷 程序设计(Ⅱ)兼谈对象模型 笔记

Conversion function 转换函数 侯捷老师使用分数 Fraction举例&#xff0c;分数理应可以被看作是小数 提供了Fraction类对象一个转换为double的方法&#xff0c;当碰到需要转换为double的情况下&#xff0c;会调用该方法。 黄色的就是转换函数&#xff0c;没有return type&am…

Python+appium自动化测试之如何控制App的启动和退出

由于本人使用的是Android设备做自动化测试&#xff0c;所以以下内容均基于Android系统做出的整理 一、启动app 启动app需要设置Capability参数&#xff0c;而Capability参数放在Desired Capalibity中&#xff0c;Desired Capalibity告诉Appium想要的自动化平台和应用程序&…

Flutter与Xamarin跨平台APP开发框架的区别

嘿&#xff0c;各位亲爱的朋友们&#xff01;大家好&#xff0c;我是咕噜铁蛋&#xff01;今天我们要探讨的话题是&#xff1a;Flutter与Xamarin这两款热门的跨平台APP开发框架。我深知选择合适的开发工具对于开发者来说有多么重要。那么&#xff0c;当我们需要开发跨平台应用时…

【机器学习】基于正余弦搜索算法优化的BP神经网络分类预测(SCA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】正余弦优化算法&#xff08;SCA&#xff09;原理及实现 2.设计与实现 数据集&#xff1a; 多输入多输出&#xff1a;样本特征24&#xff0c;标签类…

高德地图——轨迹回放和电子围栏

功能点 地图的初始化显示电子围栏&#xff08;先初始化在调接口显示电子围栏&#xff09;显示定位显示轨迹轨迹回放 &#xff08;回放速度无法控制是因为高德地图的版本问题&#xff0c;不要设置版本&#xff0c;使用默认的即可生效&#xff09;获取当前城市及天气情况设置地图…

【漏洞复现】金和OA IncentivePlanFulfill.aspx SQL注入漏洞

0x01 产品简介 金和OA协同办公管理系统C6软件&#xff08;简称金和OA&#xff09;&#xff0c;本着简单、适用、高效的原则&#xff0c;贴合企事业单位的实际需求&#xff0c;实行通用化、标准化、智能化、人性化的产品设计&#xff0c;充分体现企事业单位规范管理、提高办公效…

黑马现有java课程框架及其功能梳理

目录 高并发相关提高通信效率Netty作用&#xff1a;哪些框架使用它&#xff1a; ChannelChannelHandler 和 ChannelPipelineEventLoop 和 EventLoopGroup**涉及的名词解释&#xff1a;**NIOSocketNginx 高并发相关 主要用来解决IO密集型程序&#xff08;大量文件读写&#xff…

盲盒小程序有什么优势?如何运营获客?

盲盒作为当下的热门行业&#xff0c;已经在国内外成功站稳脚步&#xff0c;市场规模庞大。 线上盲盒小程序也是互联网电商下的新模式&#xff0c;将传统的盲盒模式与线上电商模式相结合&#xff0c;为消费者提供一种新颖额盲盒购买体验&#xff0c;玩家在手机上就可以体验到抽…

C#实现FPGA自动烧录(Vivado)

需要提前安装Vivado Lab 打开控制面板 /// <summary>/// 进程初始化&#xff0c;并打开进程/// </summary>public static void InitAndStart(){process new Process();process.StartInfo.FileName "cmd.exe";process.StartInfo.UseShellExecute fals…

HBase Shell的应用案例

电商( eshop)平台具有海量数据、高并发访问、高速读写等特征&#xff0c;适合使用HBase分布式数据库进行数据存储。本节通过一个 HBase在电商平台的应用案例&#xff0c;熟练掌握并综合运用HBase Shell命令行终端提供的各种操作命令。 一、电商(eshop)平台的逻辑数据模型 在H…

【医疗-单位计算】

医疗-单位计算 ■ 体重模式下单位计算■ 剂量&#xff08;mg/kg&#xff09;■ 剂量速度&#xff08;mg/kg/h&#xff09;■ 溶度&#xff08;mg/ml&#xff09;■ 运行速度&#xff08;ml/h&#xff09; ■ 体重模式下单位计算 ■ 剂量&#xff08;mg/kg&#xff09; ■ 剂量…