负载均衡 Load Balancing

news2024/9/27 23:32:07

负载均衡 Load Balancing

  • 数据链路层负载均衡
  • 网络层负载均衡
  • 应用层负载均衡
  • 均衡策略与实现
    • 轮询与随机
    • 随机权重与加权轮询
    • 一致性 hash
    • 最少活跃数(最少连接数)

对于电商平台而言,随着业务的不断发展壮大,网站访问量和数据量也随之急剧增长,该情况的产生给服务器带来了一定的负担。从用户体验层面而言,由于服务器端数据处理带来的时延,往往导致页面的响应速度过慢、操作流畅性受阻等问题。这在某种程度上甚至会潜在影响平台的成交量。提供高效率,高质量的服务成为亟待解决的问题。负载均衡策略的出现和发展成为缓解上述问题的有效途径

现在的负载均衡一般被称做四层负载均衡七层负载均衡,这里的四层说的是这些工作模式的共同特点都是维持一个 TCP 连接,而不是说它只工作在第四层,它只是一个统称

数据链路层负载均衡

数据链路层的负载均衡有硬件实现,这种负载均衡一般通过修改 MAC 地址来将请求转发到相应的机器上,因为只对数据链路层做处理,因此不会修改 IP 地址,需要保证负载均衡器与处理请求的机器使用同一 IP。如果不处于同一 IP,返回给客户端的报文中的源地址就会对不上

也正是因为实际处理请求的真实物理服务器 IP 和数据请求中的目的 IP 是一致的,所以响应结果就不再需要通过负载均衡服务器进行地址交换,可将响应结果的数据包直接从真实服务器返回给用户的客户端,避免负载均衡器网卡带宽成为瓶颈,因此数据链路层的负载均衡效率是相当高的

这种负载均衡模式也常被很形象地称为直接路由

网络层负载均衡

网络层负载均衡同样是由硬件实现,主要起到转发的作用。负载均衡器通过修改 IP 来实现负载均衡,这种方式效率也非常高

修改 IP 由两种方式,一种是套娃式,即将收到的请求再包一层 Headers,原来请求中的 Headers 与 Payload 变成新请求中的 Payload,在这个新数据包的 Headers 中写入真实服务器的 IP 作为目标地址。在一般的 Linux 系统中,大部分都已经实现了拆解这种请求的算法了。因为没有修改请求中的任何东西,因此服务器可以直接返回请求给客户端,这种方式被称为 IP 隧道

另外一种方式是直接把数据包 Headers 中的目标地址改掉,修改后原本由用户发给均衡器的数据包,也会被三层交换机转发送到真实服务器的网卡上,而且因为没有经过 IP 隧道的额外包装,也就无须再拆包了。但问题是这种模式是通过修改目标 IP 地址才到达真实服务器的,如果真实服务器直接将应答包返回客户端的话,这个应答数据包的源 IP 是真实服务器的 IP,也即均衡器修改以后的 IP 地址,客户端不可能认识该 IP,自然就无法再正常处理这个应答了。因此,只能让应答流量继续回到负载均衡,由负载均衡把应答包的源 IP 改回自己的 IP,再发给客户端

应用层负载均衡

前面介绍的四层负载均衡工作模式都属于转发,即直接将承载着 TCP 报文的底层数据格式(IP 数据包或以太网帧)转发到真实服务器上,此时客户端到响应请求的真实服务器维持着同一条 TCP 通道。但工作在四层之后的负载均衡模式就无法再进行转发了,只能进行代理,此时真实服务器、负载均衡器、客户端三者之间由两条独立的 TCP 通道来维持通信

应用层一般是由软件实现的,因为可以获取到数据包中的信息,因此可以实现更多操作,比如获取上层协议中的某个数据进行一致性哈希操作

均衡策略与实现

负载均衡的另外一项重要职责就是选择谁来处理用户请求(本来就是为了做这个的,如果只是将用户的请求转发出去,那就不叫负载均衡了),以下是几个比较常见的负载均衡策略

轮询与随机

两个很普通的负载均衡策略

普通的轮询,轮到哪台机器哪台机器处理请求。而普通的随机均衡,则是将客户端的请求随机分配给内部的多个服务器

随机权重与加权轮询

每一台服务器都有一个设定权重,负载均衡器将所有权重进行统计得到每个服务器的服务概率,根据这个概率进行随机选择,这就是随机权重

轮询就是把请求依次分配给每个服务提供者,加权轮询就是在轮询的基础上,让更多的请求落到权重更大的服务提供者上

一致性 hash

使用一个哈希函数对请求中的某些特征值进行计算,计算结果是哪台服务器就选择哪台服务器,简单来说是这样的,但是我们还漏了一致性,这里的一致性指保证服务集群的某个真实服务器出现故障或者向集群新增加一个机器后(这种情况很常见),节点之间的数据迁移只限于两个节点之间,不会造成全局的网络问题

这么做的目的重要为了解决在存储时,当集群中数据量很大时,采用一般的哈希函数,在节点数量动态变化的情况下会造成大量的数据迁移,导致网络通信压力的剧增,严重情况,还可能导致数据库宕机

根据业务需求,一致性哈希可以玩出很多花样,比如以下的是 redis 使用的一致性 hash 算法:

一致性 Hash 算法也是使用取模的方法,不过,上述的取模方法是对服务器的数量进行取模,而一致性的 Hash 算法是对 2 的 32 方取模,这导致一致性 Hash 算法将整个 Hash 空间组织成一个虚拟的圆环

利用服务器的一些参数进行同样的 hash 计算,同样可以唯一确定一个位置,数据在环上顺时针查找必定可以找到一台服务器

此时的数据倾斜怎么处理呢?同一个结点存放了大量的数据这种情况叫数据倾斜,可以将一台服务器虚拟化成多个服务器结点
在这里插入图片描述

这种负载均衡偏向存储类,比如数据库,但是如果只做请求转发的话,普通哈希也是可以的

最少活跃数(最少连接数)

永远选择处理业务最少的那一台机器,每收到一个请求后,对应的服务提供者的活跃数+1,当这个请求处理完之后,活跃数-1

因为只有长连接猜可以这么做记录,这种策略就比较适合长时处理的请求服务,比如 FTP 传输

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

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

相关文章

什么是堆栈?c语言实现栈上的pop和push操作

什么是堆栈?c语言实现栈上pop和push操作的算法 堆栈(stack)实现栈上pop和push操作解释 堆栈(stack) 堆栈(stack)是一种数据结构,它具有后进先出(Last-In-First-Out&…

抖音seo矩阵系统源码开发部署思路

抖音SEO矩阵系统源码开发和部署是一项复杂而又关键的任务。在开发阶段,我们需要根据抖音的搜索规则和算法,结合用户搜索意图和关键词,进行深入的研究和分析,以建立一个优秀的SEO矩阵系统。 在部署方面,我们需要遵循以…

完全零基础,如何学习渗透?

网络渗透这一行,做个脚本小子,使使工具啥的,个把月就学会了,这不难。 很多人把网络渗透简单的理解成就是搞网站,这是大错特错的! 不过这也难怪,Web安全那三招两式,最好教也最好学&…

还在找wma格式怎么转换mp3?

在一个遥远的国度里,有一位名叫小芳的歌手,她声音甜美动人,深受人们的喜爱。然而,她的音乐制作团队告诉她,她的歌曲只能以wma格式发布。但是,她的粉丝们大多数使用的是mp3格式的音乐播放器,这让…

【Java】JVM(五)

垃圾回收机制 判断对象的存活 在堆里面存放着几乎所有的对象实例,垃圾回收器在对对进行回收前,要做的事情就是确定这些对象中哪些还是“存活”着,哪些已经“死去”(死去代表着不可能再被任何途径使用得对象了) 可达…

【pytest学习总结2.3】 - 如何使用固定装置fixtures(2)

目录 2.3.8 使用mark给固定装置传递数据 2.3.9 将固定装置工厂化 2.3.10 参数化固定装置 2.3.11 使用带有参数化固定装置的标记 2.3.12 使用来自固定装置功能中的固定装置 - 模块化 2.3.13 按固定装置实例自动分组测试 2.3.14 在类和模块中使用usefixtures 2.3.15 固定…

四.安防摄像机的WDR(HDR) 性能

四.安防摄像机的WDR(HDR) 性能 4.0 概述 WDR就是宽动态,wide dynamic range,或者HDR,high dynamic range,本质上是一回事,没任何区别。那么,到底什么是宽呢?很简单,搞不定的,就是太宽了,比如 摄像机装在室内,室内正常照度500lux,玻璃门外就是10000lux,室内外…

单机取证-鉴于信息安全管理与评估赛项-计算机单机取证特别说明-例题详解-Autopsy使用

芜湖~ 本期针对全国职业技能大赛-信息安全管理与评估赛项分析一下单机取证这个大项 并且取一例题 进行例题讲解 分享一些思路和逻辑 目录 题目 前言分析 .E01 ⽂件 DD 镜像和 E01 镜像的主要区别 如何打开和查看 E01 ⽂件扩展名? 常用工具使用-Autopsy 正…

现在这个年代,还有必要进行JVM调优吗?

导言 随着技术的不断发展,软件开发行业也在日新月异地进步。在过去的几十年里,Java语言和Java虚拟机(JVM)在开发企业级应用方面扮演了重要角色。然而,随着硬件和软件的进步,以及JVM本身的改进,…

Linux驱动学习(4) MTD字符驱动和块驱动1

系列文章目录 Linux驱动学习(4) 文章目录 目录 目录 系列文章目录 文章目录 前言 一、MTD是什么? 二、MTD子系统架构 1.Linux文件存储基本架构: ​ 2.MTD子系统基本架构: 总结 前言 MTD设备在嵌入式设备中…

2023网安面试题164道(附答案)

最近有不少小伙伴跑来咨询: 想找网络安全工作,应该要怎么进行技术面试准备?工作不到 2 年,想跳槽看下机会,有没有相关的面试题呢? 为了更好地帮助大家高薪就业,今天就给大家分享两份网络安全工…

【pytest学习总结2.2 】- 如何在测试中编写断言?

目录 2.2 如何在测试中编写断言 2.2.1 assert 断言 2.2.2 断言预期的异常 2.2.3 断言预期警告 【后续内容更新】 2.2.4 断言上下文 2.2.5 为失败的断言定义您自己的解释 2.2.6 断言的详细内容 🎁更多干货 完整版文档下载方式: 2.2 如何在测试中…

C++ 哈希思想 unordered_set unordered_map

文章目录 哈希思想常用的哈希函数哈希冲突解决方案哈希代码实现(C 源码)unordered_set & unordered_map 容器**unordered_set & unordered_map模拟实现**(C 源码) 哈希思想 抽象感受哈希的优点 如果我现在抛出一个问题&a…

Python+OpenCV 实现图像位平面分层进行图像信息隐藏

引言 闲言:这篇博客回归了传统图像处理领域,主要是在研究生的数字图像处理课程上接触到了新的知识–图像位平面,觉得还挺有意思的,可以用来做信息隐藏,索性记录一下。因为拖延的缘故,到学期末才赶出来一篇&…

计算机毕业论文内容参考|基于Android的旅游攻略APP的设计与实现

文章目录 导文摘要:前言:绪论:1. 课题背景:2. 国内外现状与趋势:3. 课题内容:相关技术与方法介绍:系统分析:系统设计:系统实现系统测试总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于Android的旅游攻略APP的设计与实现 摘要: 本文基于Android平台…

python单元测试框架Unittest详解

前言 我们今天来聊聊Python中的单元测试框架unittest,大家都知道在Python中比较热门的测试框架除了pytest就是unittest,我之前有讲过pytest所以今天想讲unittest。喜欢的可以点点关注哟。 Unittest详解 Unittest是Python内部自带的一个单元测试的模块&…

mysql——初步认识

数据库是什么? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库 说人话 就是 数据库是一个电子仓库,里面存了一些数据 我们要学习的mysql就是数据库中的一种,并且是一种关系型数据库,当然有…

ASEMI快恢复二极管MUR20100DCR的性能与应用

编辑-Z 本文主要介绍了MUR20100DCR二极管的性能与应用。我们将对MUR20100DCR二极管的基本性能、不同领域的应用和优势与不足进行分析。 1、MUR20100DCR二极管的基本性能 MUR20100DCR二极管是一种高性能的超快速二极管,具有高电压、高电流和低漏电流等特点。它采用…

基于Python所写的企业编码生成系统

点击以下链接获取源码资源: https://download.csdn.net/download/qq_64505944/87950401?spm1001.2014.3001.5503 在PyCharm中运行《企业编码生成系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时&…

那些曾经考过的turtle绘图题(11~15)

【编程实现绘图 -11】 利用random库和turtle库,在屏幕上绘制4个小雪花,雪花半径随机,坐标由列表points给出,雪花颜色为红色,效果如图所示 points = [[0,0], [50, 40], [70, 80], [-40, 30]] # 样例代码 from turtle import * # 导入turtle库 import random pensize(4) …