前中电技术总监精讲高频面试题:谈谈你对负载均衡的理解

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
云解析 DNS,旗舰版 1个月
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 最近有小伙伴来问我,说让我分享一起关于负载均衡的理解,我说,网上有这么多资料了,怎么还需要我来分享,他说网上的很多资料不系统,难理解。因此就做了这个视频。

最近有小伙伴来问我,说让我分享一起关于负载均衡的理解,我说,网上有这么多资料了,


怎么还需要我来分享,他说网上的很多资料不系统,难理解。因此就做了这个视频。


另外,我把往期分享的视频全部整理成一份500页的PDF面试题解析配套文档,希望能够以此来提高各位粉丝的通过率,

3c49a408152941fb99f810c374920902.gif

如何获取? :

扫描文章底部二维码领取!

接下来,我从负载均衡产生的背景、负载均衡的实现方案、负载均衡的作用范围、负载均衡的常用策略四个方面来进行分析。

1、产生背景

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

150102f45f9e4166eaf86c353f1998c5.jpg

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

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

2. 容易出现单点故障

如图所示:

7c56beb0eb60324043a5dffedd02d3e0.jpg

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

e4c15da97226ff2d6bc468b16c1ca982.jpg

但是,这个架构的变化又带来了两个问题:

fd87181dd9584650d6269f8cfc7e7fba.jpg

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

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

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

2、实现方案

144ddd5e7b7a7506e3165ba4189d0a44.jpg

实现负载均衡,一般有三种常用的方案:


1、基于 DNS 实现负载均衡


2、基于硬件实现负载均衡


3、基于软件实现负载均衡


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

b8b085b29547be6bbc4016a6a1b3f298.jpg

它的工作原理是: 当用户通过域名访问某个网站时,会先通过 DNS 服务器进行域名解析得到一个 IP 地址,DNS 服务器可以随机分配一个 IP 地址进行访问,这样就可以实现目标服务集群的请求分发。

除此之外,DNS 还可以根据不同的地域分配就近机房的 IP,比如长沙的小伙伴,可能会得到在湖南范围内最近的一个机房的 IP,在这个模式下可以实现「就近原则」实现请求处理,缩短了通信距离从而提升网站访问效率。

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

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

第二种方案,就是基于硬件实现负载均衡

4ae6f3eacb669f3d2c9cfaebc096fcc2.jpg

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

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

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

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

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

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

第三种方案,就是基于软件实现负载均衡

234c0dcf277ed6e57e51e271b346e3c6.jpg

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

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

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

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

3. 灵活性较高

这三种方式,没有好坏之分,只有是否合适,因此大家可以根据实际情况选择。

3、作用范围

负载均衡是作用在网络通信上,来实现请求的分发。而在网络架构中,基于 OSI 模型,又分为 7 层网络模型,如下表所示:

6f46d9995d979cfd3aca83ef452effd7.jpg

这也就是意味着我们可以在网络的某些分层上做请求分发处理,因此根据这样一个特性,对于负载均衡的作用范围又可以分为:

8879a26bb7633dfd2cbe2785b839a837.jpg

1. 二层负载

2. 三层负载

3. 四层负载

4. 七层负载

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

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

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

4d32dfe860fa355ddb9506b6b12c8db1.jpg

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

7280d0b9d661e43d5afb61022e4641f3.jpg

4、常用策略

所谓负载均衡策略,就是决定当前客户端请求匹配到目标服务器集群中的具体哪个节点。常见的负载均衡策略有,轮询、随机、一致性Hash和最小连接数。

508b39e28ebc390132d9f55dfa1136c4.jpg

首先来看轮询,也就是多个服务器按照顺序轮询返回,这样每个服务器都能获得相同的请求次数

e43118a9100b44053b48769174a082bf.jpg

2. 随机,根据随机算法获得一个目标服务地址,就像古时候皇帝翻牌子一样。

由于该算法具备随机性,因此每个服务器获得的请求数量不一定均等。

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

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

以上就是关于负载均衡相关的内容,当然,负载均衡还有很多值得去挖掘的,比如负载算法如何实现?网络分层模型的原理等。对于网络模型这块,如果有想深度学习的同学,在下方留言”想看“,我会在后续的内容中进行整理

最后,我把往期分享的面试题全部整理成了1份10W字的文档,希望能够以此来提高各位粉丝的通过率


image.gif


我是被编程耽误的文艺Tom,只弹干货不掺水!你们的支持就是我最大的动力!关注我,面试不再难!

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
3月前
|
开发框架 负载均衡 Java
当热门技术负载均衡遇上 Spring Boot,开发者的梦想与挑战在此碰撞,你准备好了吗?
【8月更文挑战第29天】在互联网应用开发中,负载均衡至关重要,可避免单服务器过载导致性能下降或崩溃。Spring Boot 作为流行框架,提供了强大的负载均衡支持,通过合理分配请求至多台服务器,提升系统可用性与可靠性,优化资源利用。本文通过示例展示了如何在 Spring Boot 中配置负载均衡,包括添加依赖、创建负载均衡的 `RestTemplate` 实例及服务接口调用等步骤,帮助开发者构建高效、稳定的应用。随着业务扩展,掌握负载均衡技术将愈发关键。
71 6
|
2天前
|
负载均衡 网络协议 数据库
选择适合自己的数据库多实例负载均衡技术
【10月更文挑战第23天】选择适合自己的数据库多实例负载均衡技术需要全面考虑多种因素。通过深入的分析和评估,结合自身的实际情况,能够做出明智的决策,为数据库系统的高效运行提供有力保障。
|
3月前
|
负载均衡 网络协议 算法
【揭秘】IP负载均衡背后的神秘力量:如何让网站永不宕机?揭秘四大核心技术,解锁高可用性的秘密通道!
【8月更文挑战第19天】负载均衡技术保障互联网服务的高可用性和可扩展性。它像交通指挥官般按策略分配用户请求至服务器集群,提高响应速度与系统稳定性。本文轻松介绍IP负载均衡的工作原理、算法(如轮询、最少连接数)及实现方法,通过示例展示基于四层负载均衡的设置步骤,并讨论健康检查和会话保持的重要性。负载均衡是构建高效系统的关键。
42 2
|
2天前
|
缓存 负载均衡 监控
数据库多实例的负载均衡技术深入
【10月更文挑战第23天】数据库多实例负载均衡技术是确保数据库系统高效运行的重要手段。通过合理选择负载均衡策略、实时监控实例状态、不断优化调整,能够实现资源的最优分配和系统性能的提升。在实际应用中,需要根据具体情况灵活运用各种负载均衡技术,并结合其他相关技术,以满足不断变化的业务需求。
|
1天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
14 2
|
15天前
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
1月前
|
运维 负载均衡 监控
提升系统性能:高效运维的秘密武器——负载均衡技术
在当今数字化时代,系统的高可用性和高性能成为各类企业和组织追求的目标。本文旨在探讨负载均衡技术在运维工作中的关键作用,通过深入分析其原理、类型及实际应用案例,揭示如何利用这项技术优化资源分配,提高系统的响应速度和可靠性,确保用户体验的稳定与流畅。无论是面对突如其来的高流量冲击,还是日常的运维管理,负载均衡都展现出了不可或缺的重要性,成为现代IT架构中的基石之一。
44 4
|
3月前
|
消息中间件 缓存 NoSQL
再也不怕面试官问零拷贝技术
该文章主要讨论了零拷贝技术的相关概念、传统IO读写操作的过程以及零拷贝技术的两种实现方法。
再也不怕面试官问零拷贝技术
|
3月前
|
负载均衡 算法 应用服务中间件
负载均衡技术在Web服务器集群中的应用
【8月更文第28天】随着互联网的发展和用户对Web服务需求的增长,单台服务器很难满足大规模访问的需求。为了提高系统的稳定性和扩展性,通常会采用Web服务器集群的方式。在这种架构中,负载均衡器扮演着至关重要的角色,它能够合理地分配客户端请求到不同的后端服务器上,从而实现资源的最优利用。
114 2