搞懂负载均衡,零基础也可以!

本文作者:程序员鱼皮

免费编程学习 - 编程导航网:https://www.code-nav.cn

大家好,我是鱼皮。

周末在家写代码,无意中跟朋友提了下 LB,还说 LB 好的呱呱叫。

朋友笑了笑,问我 LB 是谁?

我解释道:LB 它可不是活人,而是目前企业开发中常用的技术 —— 负载均衡,下面让我给你讲讲吧!

负载均衡

介绍

假如我们刚刚上线一个网站,最多只有 10 个人同时访问,那么只需要把网站放到一台服务器上就够了,又叫 单机部署

随着我们网站的不断宣传,可能出现上万用户同时访问的情况。由于一台服务器的 CPU、内存、带宽等资源都是有限的,无法同时支撑那么多用户。因此可能需要多台服务器一起来扛,分摊用户的请求,你一半我一半,又叫 集群部署

但这样有个问题,每个服务器都有一个不同的 IP 地址,想把用户的请求分摊到不同的服务器上,总不能让用户自己去输入不同的 IP 访问吧?

因此,我们还需要一台 代理服务器 ,对外提供 唯一 的入口,统一 接受用户的请求。再根据请求(或流量)的 特征 ,依据一定的 算法 ,将请求转发到内部的服务器集群中,如图:

这样对于用户来说,始终通过一个域名访问网站即可,他完全感知不到你的网站到底部署到多少台服务器上、也不关心它是如何部署的。

这便是 负载均衡(Load Balancing 简称 LB),是企业中最重要的高并发解决方案之一。

作用

负载均衡最直观的作用就是提高系统的并发度,说人话就是允许更多人同时访问了。

它还可以提高整个系统的可用性,假如集群中有一台服务器挂了,代理服务器只要不再把请求转发给它就行了,集群中的其他服务器仍然能够正常地接受和处理请求。

此外,负载均衡还能够减少用户等待响应的时间、通过并行提高整个系统的处理能力等。

分类

虽然通过代理服务器转发请求能够提升整个系统的并发访问数,但不要忘了,代理服务器本身的资源也是有限的啊!像比较常用的 Nginx 代理,能有个几万并发就撑死了。如果同时访问的用户量再大一点,不就忍不下了么?!

而且代理服务器也存在挂掉的可能性,一旦它挂了,后果不堪设想。

因此,我们可以将负载均衡进行分类,针对不同的场景来选择相对合适的实现方式。

比较常见的分类方法是:根据 计算机网络七层模型 ,按照负载均衡所属的网络层次去区分。

下面这张计算机网络模型图还是很棒的:

有关计算机网络的知识非本文重点,大家可以自行去了解,不懂也没关系,可以接着往下看。

无论是哪层负载均衡,都需要有代理服务器,并且对外提供唯一的 IP 地址,然后根据算法将请求转发到目标服务器(实际处理请求的服务器)。只不过实现转发的原理和逻辑不同罢了。

二层负载均衡

二层指数据链路层,数据以数据帧的形式通过交换机进行传输。

这一层是没有 IP 地址概念的,只能用 MAC 地址对机器进行区分。因此负载均衡服务器会通过一个虚拟 MAC 地址接受请求,并通过改写报文目标 MAC 地址的方式将请求转发到具有不同 MAC 地址的目标机器。

二层负载均衡最原始、性能极高。但只能通过硬件设备实现,比如 F5、Array 等,价格十分昂贵。

主要的底层实现方式就是 PPP 捆绑和链路聚合技术,这里不做赘述,对于开发同学来说,大家一般也接触不到二层负载均衡。

三层负载均衡

三层即网络层,这一层开始有了 IP 地址的概念,可以根据 IP 地址路由网络。

这一层的负载均衡设备会对外提供一个虚拟的 IP 地址(VIP)以接收请求,然后根据算法将请求转发到 IP 地址不同的目标机器。

和二层一样,三层负载均衡也是通过硬件设备实现,成本也比较高。

四层负载均衡

四层即传输层,除了包含三层的 IP 地址信息之外,还多了源目端口号的概念,可以区分同一机器上不同的应用。

由于得到了更多的信息,这一层的负载均衡会更加灵活,对外提供一个虚拟的 IP 地址 + 端口号来接收请求,然后根据算法将请求转发到不同目标机器的不同端口上。

四层负载均衡可以通过软件实现,比如主流且开源的 LVS(Linux Virtual Server),底层可选多种负载模式,比如 NAT(网络地址转换)、DR(直接路由)、TUN(隧道)。

四层负载均衡的优点是:一方面是性能很高、比较稳定,支撑个十几万、几十万并发不成问题;另一方面是成本低、纯软件实现,因此在企业中的应用很广泛。

七层负载均衡

七层指应用层,是计算机网络模型的最上层,因此能得到请求最为详细的信息,比如 HTTP 请求头等。

可以根据域名或主机 IP + 端口接收请求,并通过应用层信息(请求头、Cookie 等)灵活地转发请求,比如将手机端用户转发到服务器 A、桌面端用户转发到服务器 B 等。

这种方式实现成本最低,也最为灵活,因此也是我们应用开发人员最常用的了。

实现方式多种多样,比如主流的 Nginx、HAProxy 都可以,写个配置基本就能转发请求了,大部分情况下性能也够用了。

再提一下所属于这层的 DNS 负载均衡 ,基于 DNS 域名解析服务,可以将同一个域名解析为不同的 IP 地址,从而让用户访问到不同服务器上的项目。

这种方式实现起来不难,但转发逻辑不够灵活,而且 DNS 存在缓存,不利于修改。


除了上面讲到的这些,负载均衡还有很多学问,比如负载均衡算法(比如常用的静态轮询、动态连接数等)、高可用等,这些大家自行了解和实践下就好了,具体场景具体分析。

更多编程学习资源

  • Java前端程序员必做项目实战教程+毕设网站
  • 程序员免费编程学习交流社区(自学必备)
  • 程序员保姆级求职写简历指南(找工作必备)
  • 程序员免费面试刷题网站工具(找工作必备)
  • 最新Java零基础入门学习路线 + Java教程
  • 最新Python零基础入门学习路线 + Python教程
  • 最新前端零基础入门学习路线 + 前端教程
  • 最新数据结构和算法零基础入门学习路线 + 算法教程
  • 最新C++零基础入门学习路线、C++教程
  • 最新数据库零基础入门学习路线 + 数据库教程
  • 最新Redis零基础入门学习路线 + Redis教程
  • 最新计算机基础入门学习路线 + 计算机基础教程
  • 最新小程序入门学习路线 + 小程序开发教程
  • 最新SQL零基础入门学习路线 + SQL教程
  • 最新Linux零基础入门学习路线 + Linux教程
  • 最新Git/GitHub零基础入门学习路线 + Git教程
  • 最新操作系统零基础入门学习路线 + 操作系统教程
  • 最新计算机网络零基础入门学习路线 + 计算机网络教程
  • 最新设计模式零基础入门学习路线 + 设计模式教程
  • 最新软件工程零基础入门学习路线 + 软件工程教程

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

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

相关文章

加密软件|让数据传输更安全

加密软件在当今数字化时代扮演着至关重要的角色,它们通过先进的加密算法和技术,确保数据在存储、传输和分享过程中的安全性,从而保护个人隐私和企业机密。一、加密软件的基本作用数据加密:加密软件通过应用复杂的加密算法&#xf…

Python转换PDF为PowerPoint演示文件

PDF文件以其跨平台兼容性和版面固定性成为了分享和存储文档资料的首选格式。然而,在需要进行生动、互动性强的演示时,PDF的静态特性便难以满足个性化演示需求。将PDF文件转换为PowerPoint演示文稿可以解决这一问题。PowerPoint不仅提供了丰富的动画和过渡…

视觉定位和GPS定位在应用场景有什么不同?

视觉定位的应用场景 工业自动化: 在工业生产线上,视觉定位技术可以实现对不同物体的精确定位和识别,从而支持智能化生产。例如,在装配线上,机器人可以通过视觉定位技术准确地抓取和放置零件。机器人导航: …

微博热搜数据爬取与分析

一、课题描述 1.1项目背景 微博热搜数据爬取与分析是一门涉及信息检索、数据挖掘和文本分析等技术的课程。随着社交媒体的普及和人们对舆情、热点话题的关注度不断增加,利用数据挖掘和分析技术对微博热搜数据进行收集和分析具有重要的意义。 本课程设计旨在帮助学我们把握数…

网关设备BL122实现Modbus RTU/TCP转Profinet协议

Modbus与Profinet是两种广泛应用于工业自动化领域的通信协议:Modbus因其简单性和兼容性,在许多工业设备中得到广泛应用;而Profinet提供了高速、高精度的通信能力,适合于复杂控制系统和实时应用,但两者之间的差异导致了…

uniapp easycom组件冲突

提示信息 ​easycom组件冲突:[/components/uni-icons/uni-icons.vue,/uni_modules/uni-icons/components/uni-icons/uni-icons.vue]​ 问题描述 老项目,在uniapp插件商城导入了一个新的uniapp官方开发的组件》uni-data-picker 数据驱动的picker选择器 …

c++【入门】计算(a+b)*c的值

限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 周周知道你一定学过加法和乘法,他还想让你写个程序来计算一个和加法、乘法有关的式子。 给定 3 个整数 𝑎,𝑏,𝑐计算表达式 (ab)c 的值。 输入 输入为三行,包括三…

测试人必会 K8S 操作之 Dashboard

在云计算和微服务架构的时代,Kubernetes (K8S) 已成为管理容器化应用的标准。然而,对于许多新手来说,K8S 的操作和管理常常显得复杂而神秘。特别是,当你第一次接触 K8S Dashboard 时,你是否也感到有些无所适从&#xf…

【Python】一文详细向您介绍 scipy.cluster.vq.kmeans() 的原理、常见用法和使用场景举例等

【Python】一文详细向您介绍 scipy.cluster.vq.kmeans() 的原理、常见用法和使用场景举例等 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 …

python简单学习笔记

1. print 输出 print(2024, 年,我要想娘) # sep:设置打印多个内容的分隔符,默认值为空格 print(2024, 年,我要想娘, sep, end\n) # end:设置print执行结束后的操作,默认值为换行格式化输出 print(格式化字符串 % (变量1, 变量…

org.springframework.jdbc.BadSqlGrammarException异常

Bug 记录 概述 在执行定时任务更新电子书统计信息时,遇到了 org.springframework.jdbc.BadSqlGrammarException 异常,具体表现为 SQL 函数 count 被错误地解析为自定义函数 wiki.count,导致数据库更新操作失败。 详细描述 错误信息&#x…

计算机视觉之SSD目标检测

模型简介 SSD是一种单阶段目标检测算法,通过卷积神经网络进行特征提取,并在不同的特征层进行检测输出,实现多尺度检测。它采用了anchor的策略,预设不同长宽比例的anchor,并在每个输出特征层上预测多个检测框。SSD框架…

C#变量、常量与运算符

文章目录 变量变量定义命名规则作用域和生命周期 常量特殊字符常量 运算符算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符 变量 变量就是一个存储空间的名字&#xff0c;变量是什么类型&#xff0c;这个空间里面存储的就是什么类型的数据。 变量定义 <data_t…

Swift 基于Codable协议使用

Codable协议 继承自 Decodable & Encodable // // Test1.swift // TestDemo // // Created by admin on 2024/7/9. // import Foundationstruct Player{var name:Stringvar highScore:Int 0var history:[Int] []var address:Address?var birthday:Date?init(name: St…

uniapp进行微信小程序开发,使用navigateBack返回到上一个页面时候,接口未刷新。

代码背景&#xff1a; 使用uniapp进行微信小程序开发时&#xff0c;有a和b两个页面&#xff0c;从a进入b页面后&#xff0c;通过uni.navigateBack()方法返回a页面时候&#xff0c;无法触发a页面的onShow函数里面的接口调用。 解决思路 uniapp官网页面通信 1.通过EventChann…

【JavaScript脚本宇宙】浏览器特性尽在掌握:JavaScript工具库全面解析

提升网页质量&#xff1a;六款神奇JavaScript工具库解析 前言 随着移动设备和互联网的普及&#xff0c;用户使用不同的设备、操作系统和浏览器来访问网页已成为常态。为了更好地适应不同环境下的用户体验需求&#xff0c;开发人员需要使用工具库来识别客户端的特征信息。本文…

Java数值操作

文章目录 1.数值数据类型和操作1.1 数值类型1.2 从键盘读取数值1.3 数值操作符 2.数值型字面值2.1 整形字面值2.2 浮点型字面值2.3 科学记数法 示例&#xff1a;显示当前时间3.增强赋值运算符4.自增和自减操作符5.数值类型转换 1.数值数据类型和操作 1.1 数值类型 类型名范围…

什么是面向对象编程

什么是面向对象编程&#xff1f;&#xff08;OOP&#xff09; ● 面向对象编程是一种基于对象概念的编程范式&#xff1b;&#xff08;所谓的编程范式&#xff0c;就是代码风格&#xff0c;我们“如何”编写和组织代码&#xff09;&#xff1b; ● 我们使用对象来模拟&#xf…

【Cesium开发实战】飞行漫游功能的实现,可设置漫游路径,漫游高度,暂停,继续,删除路径

Cesium有很多很强大的功能&#xff0c;可以在地球上实现很多炫酷的3D效果。今天给大家分享一个可自定义的漫游飞行功能。 1.话不多说&#xff0c;先展示 漫游 2.设计思路 项目需求&#xff0c;可自定义漫游路径&#xff0c;并且设置高度&#xff0c;暂停&#xff0c;继续&…

如何制作文件的二维码?支持设置文件下载功能

现在为了能够更快的将文件分享给其他人查看&#xff0c;会选择将文件转换二维码的方式&#xff0c;用户可以通过扫描二维码在手机上预览或者下载文件到本地&#xff0c;能够有效的减少文件对内存的占用&#xff0c;在很多场景下都有所应用&#xff0c;那么文件转二维码具体该怎…