什么是负载均衡?

什么是负载均衡?

最近有小伙伴想让我聊一聊负载均衡方面的问题,我说,网上有这么多资料了,怎么还需要我来分享,他说网上的很多资料不系统,难理解。

关于负载均衡,我会从四个方面去说。
  1. 负载均衡产生的背景

  2. 负载均衡的实现技术

  3. 负载均衡的作用范围

  4. 负载均衡的常用算法

负载均衡的诞生背景

在互联网发展早期,由于用户量较少、业务需求也比较简单。对于软件应用,我们只需要一台高配的服务器即可完成业务的支撑,这样的软件架构称为单体架构

image-20231129204530455

随着用户量的增加,服务器的请流量也随之增加,在这个过程中单体架构会产生两个问题。

  1. 软件的性能逐步下降,访问延迟越来越高

  2. 容易出现单点故障

为了解决这个问题,我们引入了集群化部署的架构,也就是把一个软件应用同时部署在多个服务器上

在这里插入图片描述

架构的变化带来了两个问题:

  1. 客户端请求如何均匀的分发到多台目标服务器上?

  2. 如何检测目标服务器的健康状态,使得客户端请求不向已经宕机的服务器发送请求。

为了解决这两个问题,引入了负载均衡的设计,简单来说,负载均衡机制的核心目的是让客户端的请求合理均匀的分发到多台目标服务器,由于请求被多个节点分发,使得服务端的性能得到有效的提升。

如何实现负载均衡呢?

常见的实现方案有三种!

● 基于 DNS 实现负载均衡

● 基于硬件实现负载均衡

● 基于软件实现负载均衡

先来说一下基于 DNS 实现负载均衡的方式,它的实现方式比较简单,只需要在DNS 服务器上针对某个域名做多个 IP 映射即可。

在这里插入图片描述

它的工作原理是: 当用户通过域名访问某个网站时,会先通过 DNS 服务器进行域名解析得到一个 IP 地址,DNS 服务器可以随机分配一个 IP 地址进行访问,这样就可以实现目标服务集群的请求分发。除此之外,DNS 还可以根据不同的地域分配就近机房的 IP,比如长沙的小伙伴,可能会得到在湖南范围内最近的一个机房的 IP,在这个模式下可以实现「就近原则」实现请求处理,缩短了通信距离从而提升网站访问效率。

DNS 实现负载均衡的优点是: 配置简单,实现成本低,无需额外的开发和维护。不过缺点也很明显:

由于 DNS 多级缓存的特性,当我们修改 DNS 配置之后,会因为缓存导致 IP 变更不及时,从而影响负载均衡的效果。

第二种,基于硬件实现负载均衡

硬件负载设备,我们可以简单把它理解成一个网络设备,类似于网络交换机,它

​ 1. 它的性能很好,每秒能够处理百万级别的请求,

  1. 支持多种负载均衡算法,我们可以非常灵活的配置不同的负载策略

  2. 它还具备防火墙等安全功能。

    1. 硬件负载是商业产品,有专门的售后来支持,所以企业不需要花精力去做维护。

F5 是比较常见的硬件负载设备,由于硬件负载设备价格比较贵,一般应用在大型银行、政府、电信等领域。

第三种,基于软件实现负载均衡

所谓软件负载,就是通过一些开源软件或者商业软件来完成负载均衡的功能。常见的软件负载技术有:Nginx、LVS、HAProxy 等。

目前互联网企业绝大部分采用的都是软件负载,主要原因是:

  1. 免费,企业不需要投入较高的成本。

​ 2. 开源,不同企业对于负载均衡的要求有差异,所以可以基于开源软件上做二次开发。

  1. 灵活性较高

这三种方式,没有好坏之分,只有是否合适,因此大家可以根据实际情况选择。负载均衡的作用范围负载均衡是作用在网络通信上,来实现请求的分发。

而在网络架构中,基于 OSI 模型,又分为 7 层网络模型

image-20231129205121118

也就是意味着我们可以在网络的某些分层上做请求分发处理,因此根据这样一个特性,

对于负载均衡的作用范围又可以分为:
  1. 二层负载

  2. 三层负载

  3. 四层负载

  4. 七层负载

二层负载:基于 Mac 地址来实现请求分发,一般采用虚拟 Mac 的方式实现,服务器收到请求后,通过动态分配后端服务的实际 Mac 地址进行响应从而实现负载均衡

三层负载:基于 IP 层负载,一般通过虚拟 IP 的方式实现,外部请求访问虚拟 IP,服务器收到请求后根据后端实际 IP 地址进行转发。

四层负载: 通过请求报文中的目标地址和端口进行负载,Nginx、F5、LVS 等都可以实现四层负载。

在这里插入图片描述

七层负载: 七层负载是基于应用层负载,也就是服务器端可以根据 http 协议中请求的报文信息来决定把请求分发到哪个目标服务器上,比如 Cookie、消息体、RequestHeader 等。

在这里插入图片描述

最后一个,就是负载均衡的常用算法

所谓负载均衡算法,就是决定当前客户端请求匹配到目标服务器集群中的具体哪个节点。

常见的负载均衡算法有:

  1. 轮训,也就是多个服务器按照顺序轮训返回,这样每个服务器都能获得相同的请求次数

    image-20231129205438282

  2. 随机,根据随机算法获得一个目标服务地址(就像古时候皇帝翻牌子),由于该算法具备随机性,因此每个服务器获得的请求数量不一定均等。

  3. 一致性 hash,也就是对于具有相同 hash 码的请求,永远发送到同一个节点上。

  4. 最小连接数,根据目标服务器的请求数量来决定请求分发的权重,也就是目标服务集群中,请求更少的节点将会获得更多的请求。这是负载均衡中比较好的策略,真正能够实现目标服务器的请求均衡。

以上就是关于负载均衡相关的内容,当然,负载均衡还有很多值得去挖掘的,比如负载算法如何实现?网络分层模型的原理等。

对于网络模型这块,如果有想深度学习的同学,在下方留言”想看“,我会在后续的内容中进行整理。

好的,本期的视频就到这里结束了,喜欢的朋友记得一键三连,加个关注。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java+springboot+avue医院绩效考核系统源码支持二次开发

公立医院改革要求建立公立医疗卫生机构绩效考核体系,借助绩效考核来引导各级公立医院把社会效益摆在首位,提高医疗服务质量,规范医疗服务行为,加强医院内部管理,促进医院高质量发展 医院绩效考核系统,建立以…

【异常】捕获线程池执行任务时产生的异常

前言: 在编写程序时,我们为了充分利用多核CPU、加快接口响应速度,通常会使用线程池来处理请求,但线程池执行任务过程中难免会出现异常,导致请求失败。那如果我们想在任务发生异常后捕获异常,并做一些”善后…

Go连接mysql数据库

package main import ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" ) //go连接数据库示例 func main() {// 数据库信息dsn : "root:roottcp(192.168.169.11:3306)/sql_test"//连接数据库 数据库类型mysql,以及数据库信息d…

Selenium自动化测试:通过cookie绕过验证码的操作

验证码的处理 对于web应用,很多地方比如登录、发帖都需要输入验证码,类型也多种多样;登录/核心操作过程中,系统会产生随机的验证码图片,进行验证才能进行后续操作 ​解决验证码的方法如下: 1、开发做个万…

机器学习---pySpark代码开发

1、eclipse开发pySpark程序 在eclipse中开发pySpark程序,需要安装pydev插件。 1).eclipse安装python插件,安装完成后重启。 2). 在window--->preferences中找到python interpreter配置安装python的路径: 3).新建python项目: 2、pyCharm开…

基于Java SSM框架+Vue实现旅游资源网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现旅游资源网站演示 摘要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述旅游…

kgma转换flac格式、酷狗下载转换车载模式能听。

帮朋友下载几首歌到U盘里、发现kgma格式不能识别出来,这是酷狗加密过的格式,汽车不识别,需要转换成mp3或者flac格式,网上的一些辣鸡软件各种收费、限制、广告,后来发现一个宝藏网站,可以在线免费转换成flac…

前端组件库开发

通常我们会使用很多组件库,有时候我们会去看源码比如element,antd,然后发现多少是按需导出,和vue.use全局注册,依赖于框架的拓展。 组件库的开发依赖框架的版本和node的版本,这个是需要说明的,然…

充电桩新老国标兼容性分析

1、背景介绍 1.1、充电桩相关标准发展历程 1.2、兼容性分析历史 1.3、兼容性分析的目的 1.4、兼容性分析的内容 2、B类协议兼容性分析 2.1、协议分层结构 2.2、链路层分析 2.3、版本协商与链路检测 ## 2.4、传输层分析 2.5、应用层 2.5.1、应用层数据 2.5.2、应用层数据…

Javaweb之Vue组件库Element案例异步数据加载的详细解析

4.4.3.6 异步数据加载 4.4.3.6.1 异步加载数据 对于案例,我们只差最后的数据了,而数据的mock地址已经提供:http://yapi.smart-xwork.cn/mock/169327/emp/list 我们最后要做的就是异步加载数据,所以我们需要使用axios发送ajax请…

Redis常见类型

常用类型String字符串类型Hash字典类型List列表类型Set集合类型ZSet有序集合类型 Java程序操作Redis代码操作Redis 常用类型 String字符串类型 使用方式: 使用场景: Hash字典类型 字典类型(Hash) 又被成为散列类型或者是哈希表类型,它…

TimeGPT:时序预测领域终于迎来了第一个大模型

时间序列预测领域在最近的几年有着快速的发展,比如N-BEATS、N-HiTS、PatchTST和TimesNet。 大型语言模型(llm)最近在ChatGPT等应用程序中变得非常流行,因为它们可以适应各种各样的任务,而无需进一步的训练。 这就引出了一个问题:时间序列的…

vivado实现分析与收敛技巧7-布局规划

关于布局规划 布局规划有助于设计满足时序要求。当设计难以始终如一满足时序要求或者从未满足时序要求时 , AMD 建议您执行布局规划。如果您与设计团队协作并且协作过程中一致性至关重要, 那么布局规划同样可以发挥作用。布局规划可通过减少平均布线延…

ROS集成开发环境的搭建

目录 一、安装终端 二、安装VScode 1、安装 2、vscode 集成 ROS 插件 三、launch文件示例 实现 运行 launch 文件 一、安装终端 sudo apt install terminatorTerminator 常用快捷键 AltUp //移动到上面的终端 AltDown …

leetcode-206-反转链表(C语言实现)

题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3&…

Python函数专题(上)【侯小啾python领航班系列(十一)】

Python函数专题(上)【侯小啾python领航班系列(十一)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

JOSEF电流继电器 DL-33 整定范围0.5-2A 柜内安装板前接线

系列型号: DL-31电流继电器; DL-32电流继电器; DL-33电流继电器; DL-34电流继电器; 一、用途 DL-30系列电流继电器用于电机保护、变压器保护和输电线的过负荷和短路保护线路中,作为起动元件。 二、结构和原理 继电器系电磁式,瞬时动作…

免费插件集-illustrator插件-Ai插件-重复复制-单一对象页面排版

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件>重复复制4.总结 1.介绍 本文介绍一款免费插件,加强illustrator使用人员工作效率,进行制卡专用分层分色。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/8789050…

数字图像处理(实践篇)十七 Shi-Tomasi 角点检测

目录 一 涉及的函数 二 实践 在使用OpenCV之前,需要先安装相关的库和依赖项,命令如下所示: # 安装OpenCV的基础版pip install opencv-python# 安装OpenCV的扩展版pip install opencv-contrib-python 一 涉及的函数 OpenCV 提供了cv2.goo…

【ArcGIS Pro微课1000例】0045:深度学习--车牌模糊

借助ArcGIS Pro提供的车牌模糊训练模型,可以很方便实现车牌模糊。 文章目录 一、车牌模糊对比二、工具介绍三、案例实现一、车牌模糊对比 车牌模糊前: 车牌模糊后: 二、工具介绍 本功能使用的依然是ArcGIS Pro提供的深度学习工具中的使用深度学习分类像素(Classify Pixel…
最新文章