当前位置: 首页 > news >正文

负载均衡详解

概述

负载均衡建立在现有的网络结构之上,提供了廉价、有效、透明的方式来扩展网络设备和服务器的带宽,增加了吞吐量,加强了网络数据的处理能力,提高了网络的灵活性和可用性。项目中常用的负载均衡有四层负载均衡和七层负载均衡。


四层负载均衡与七层负载均衡的对比

四层负载均衡基于 IP 地址和端口的方式实现网络的负载均衡,具体实现为对外提供一个虚拟 IP 地址和端口接收所有用户的请求,然后根据负载均衡配置和负载均衡策略请求发送给真实服务器

七层负载均衡基于 URL 等资源来实现应用层基于内容的负载均衡,具体实现为通过虚拟的 URL 或主机名接收所有用户的请求,然后将请求发送给真实的服务器

四层负载均衡和七层负载均衡的最大区别是:四层负载均衡只能针对 IP 地址和端口上的数据做统一的分发,而七层负载均衡能根据消息的内容做更加详细的有针对性的负载均衡。我们通常使用 LVS 等技术实现基于 Socket 的四层负载均衡,使用 Nginx 等技术实现基于内容分发的七层负载均衡,比如将以 user/*** 开头的 URL 请求负载到单点登录服务器,而将以 /business/*** 开头的 URL 请求负载到具体的业务服务器


负载均衡算法

1. 轮询均衡(Round Robin)

轮询均衡指将客户端的请求轮流分配到 1 至 N 台服务器上,每台服务器均被均等地分配一定数量的客户端请求。轮询均衡算法适用于集群中所有服务器都有相同的软硬件配置和服务能力的情况

2. 权重轮询均衡(Weighted Round Robin)

权重轮询均衡指根据每台服务器的不同配置及服务能力,为每台服务器都设置不同的权重值,然后按照设置的权重值轮询地将请求分配到不同的服务器上。例如,服务器 A 的权重值被设计成 3,服务器 B 的权重值被设计成3,服务器 C 的权重值被设计成 4,则服务器 A、B、C 将分别承担 30%、30%、40% 的客户端请求。权重轮询均衡算法主要用于服务器配置不均等的情况

3. 随机均衡(Random)

随机均衡指将来自网络的请求随机分配给内部的多台服务器,不考服务器的配置负载情况

4. 权重随机均衡(Weighted Random)

权重随机均衡算法类似于权重轮询算法,只是在分配请求时不再轮询发送,面是选择某个权重的服务器发送

5. 响应速度均衡(Response Time)

响应速度均衡指根据服务器设备响应速度的不同将客户端请求发送到响应速度最快的服务器上。对响应速度的获取是通过负载均衡设备定时为每台服务器都发出一个探测请求(例如 Ping)实现的。响应速度均衡能够为当前的每台服务器都根据其不同的负载情况分配不同的客户端请求,这有效避免了某台服务器单点负载过高的情况。但需要注意是这里探测到的响应速度是负载均衡设备到各台服务器之间的响应速度,并不完全代表客户端到服务器的响应速度,因此存在一定偏差

6. 最少连接数均衡(Least Connection)

最少连接数均衡指在负载均衡器内部记录当前每台服务器正在处理的连接数量,在有新的请求时,将该请求分配给连接数最少的服务器。这种均衡算法适用于网络连接和带宽有限、CPU 处理任务简单的请求服务,例如 FTP

7. 处理能力均衡

处理能力均衡算法将服务请求分配给内部负荷最轻的服务器,负荷是据服务器 CPU 型号、CPU 数量、内存大小及当前连接数等换算而成的。处理能力均衡算法由于考虑到了内部服务器的处理能力及当前网络的运行状况,所以相对来说更加精确

8. DNS 响应均衡

DNS 响应均衡算法指在分布在不同中心机房的负载均衡设备都收到同一个客户编的域名解析请求时,所有负载均衡设备均解析此域名并将解析后的服务器 IP 地址返回给客户端,客户端向收到第一个域名解析后的 IP 地址发起请求服务,而忽略其他负载均衡设备的响应

9. 哈希算法与衡

哈希算法均衡指通过一致性哈希算法和虚拟节点技术令相同参数的请求总是发送会同一台服务器,该服务器将长期、稳定地为某些客户端提供服务。在某台服务器被移除或异常宕机后,该服务器的请求基于虚拟节点技术均衡到其他服务器,而不会影响集群整售的稳定性

10. IP 地址哈希

IP 地址哈希指在负载均衡器内部维护了不同链接上客户端和服务器的 IP 地址对应关系表,将来自同一客户端的请求统一转发给相同的服务器。该算法能够以会话为单位,保证同一客户端的请求能够一直在同一台服务器上处理,主要适用于客户端和服务器需要保持长连接的场景,比如基于 TCP 长连接的应用

11. URL 哈希

URL 哈希指通过管理客户端请求 URL 信息的哈希表,将有相同 URL 的请求转发给同一台服务器。该算法主要适用于在七层负载中将不同类型的用户请求转发给不同类型的应用服务器的场景

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [C语言]-基础知识点梳理-编译、链接、预处理
  • 计算机组成与设计 - 1.7 功耗墙 - 1.8 单处理器向多处理器的转变 - 1.9 基准
  • FL Studio24.1.1.4239中文版注册机+永久激活码注册码
  • Java-使用HashMap压缩重复数据量以减少堆内存溢出的概率
  • 浅谈【数据结构】链表之单链表
  • Java Leetcode每日一题:DFS
  • react 的学习随记
  • CM工作室发展史 上
  • 谷歌登录的时候,要求在手机的通知点是,并按数字来验证身份,但是手机通知栏没有收到通知和数字,原因是什么,怎么办?
  • Deepin【2】:Deepin系统盘扩容
  • JavaScript 动画库
  • nodejs搭建代理服务器解决跨域问题
  • 嵌入式人工智能ESP32(6-多线程)
  • Python | Leetcode Python题解之第367题有效的完全平方数
  • 为什么互联网上要设立防火墙?WAF又是什么?
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 3.7、@ResponseBody 和 @RestController
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java 23种设计模式 之单例模式 7种实现方式
  • java8-模拟hadoop
  • JavaScript新鲜事·第5期
  • js如何打印object对象
  • Laravel5.4 Queues队列学习
  • leetcode388. Longest Absolute File Path
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 给新手的新浪微博 SDK 集成教程【一】
  • 检测对象或数组
  • 如何编写一个可升级的智能合约
  • 正则学习笔记
  • 回归生活:清理微信公众号
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 移动端高清、多屏适配方案
  • ​flutter 代码混淆
  • ​Java并发新构件之Exchanger
  • # Redis 入门到精通(一)数据类型(4)
  • #1014 : Trie树
  • #QT(TCP网络编程-服务端)
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.each()与$(selector).each()
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • %@ page import=%的用法
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转) Android中ViewStub组件使用
  • (转)大型网站的系统架构
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包