女朋友问我 LB 是谁?
科普一下 LB(负载均衡)技术
我的编程导航网站: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 存在缓存,不利于修改。
除了上面讲到的这些,负载均衡还有很多学问,比如负载均衡算法(比如常用的静态轮询、动态连接数等)、高可用等,这些大家自行了解和实践下就好了,具体场景具体分析。
以上,我是鱼皮,本文有用还请 点赞 支持下。
欢迎阅读 我自学进入腾讯的编程学习和求职经历,不再迷茫!
指路:https://t.1yb.co/w66s

女朋友问我 LB 是谁?的更多相关文章
- 【原理探究】女朋友问我ArrayList遍历时删除元素的正确姿势是什么?
简介 我们在项目开发过程中,经常会有需求需要删除ArrayList中的某个元素,而使用不正确的删除方式,就有可能抛出异常.或者在面试中,会遇到面试官询问遍历时如何正常删除元素.所以在本篇文章中,我们会 ...
- 女朋友问我深浅copy到底是什么?
深浅拷贝 列表存放值的时候,是先申请一块内存空间,存放索引和内存地址的对应关系,其实通俗的来说列表内不存真正的值,是一种间接存放的对应关系: 列表内存不可变类型的数据 就比如说,如果现在将L列表索引0 ...
- 认识容器和Docker(一)
前言: 这句话应该是开发人员经常挂在嘴边的吧! “在我的机器上是正常工作的啊,MD,怎么到你这就不行了?” 开发人员就会联想到: 1. 肯定是你环境有问题: 2. 要么就是你个傻*不会用吧: 带着这句 ...
- JavaScript 数据结构与算法之美 - 你可能真的不懂递归
1. 前言 算法为王. 排序算法博大精深,前辈们用了数年甚至一辈子的心血研究出来的算法,更值得我们学习与推敲. 因为之后要讲有内容和算法,其代码的实现都要用到递归,所以,搞懂递归非常重要. 2. 定义 ...
- 【原创】快速失败机制&失败安全机制
这是why技术的第29篇原创文章 之前在写<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章时,我在8.1小节提到了快速失败和失败安全机制. 但是我发现当我搜索" ...
- LeetCode刷题 --杂篇 --数组,链表,栈,队列
武汉加油,中国加油.希望疫情早日结束. 由于疫情,二狗寒假在家不能到处乱逛,索性就在家里系统的刷一下算法的内容,一段时间下来倒也有些小小的收获.只是一来家中的小破笔记本写起博客来实在不是很顺手,二来家 ...
- Linux基础 -01
01Linux快速入门 1.计算机组成原理 1.1什么是计算机 计算机一般被称为"电脑",即通电的大脑 电脑二字蕴含了人类对计算机的终极期望; 希望它能像人脑一样为我们工作,从而取 ...
- 女朋友突然问我DNS是个啥....
女朋友突然问我DNS是个啥.... 今天晚上我正在床上躺着刷手机,然后我女朋友突然说她的电脑坏了.说连着WIFi上不了网,让我给她看一下.(这就是有个程序员男朋友的好处) 然后我拿到电脑看了一下发现访 ...
- 女朋友面试回来抱怨说会redis,面试官问了一堆redis
Redis 优缺点及特点 什么是Redis?简述它的优缺点? Redis本质上是一个Key-Value类型的内存数据库,类似MemoryCache,整个数据库统统加载在内存当中进行操作,定期通过异步操 ...
- 昨晚12点,女朋友突然问我:你会RabbitMQ吗?我竟然愣住了。
01为什么要用消息队列? 1.1 同步调用和异步调用 在说起消息队列之前,必须要先说一下同步调用和异步调用. 同步调用:A服务去调用B服务,需要一直等着B服务,直到B服务执行完毕并把执行结果返回给A之 ...
随机推荐
- Linux:查看磁盘配额报告数据
近期在超算云上跑代码遇到了个乌龙,就是作业一提交到集群上去先是PD状态,然后马上就终止调了.后来知道是我用户目录下文件数量太多,导致已经超过管理员给我分配的磁盘配额了(众所周知机器学习相关项目的数据集 ...
- Centos6/RHEL6下恢复ext4文件系统下误删除的文件
目录 一.关于ext4文件系统 二.linux文件系统的组成(inode,block) 三.问题:为什么删除比复制快? 四.问题:当我们误删除文件后,第一件事要做什么? 五.准备测试环境 六.安装ex ...
- 【asp.net】滑块验证码(分享一个从github上下载的源码)
思路: 1. 准备好10张或20张不同规格的图片,按规格分类到不同文件夹,每个文件夹的图片从1开始顺序递增命名,为了随机选择图片. 2.前端提交规格比如200*300,根据规格选择原图,并初始化 ...
- WPF开发快速入门【0】前言与目录
前言 WPF是一个生不逢时的技术,刚推出的时候由于是XP时代,WPF技术有两个不方便的地方: 1.由于操作系统没有自带Framework,需要另外安装,比较麻烦: 2.程序第一次启动时,由于要加载Fr ...
- 如何在Windows上一键部署PaddleOCR的WebAPI服务
PaddleOCR旨在打造一套丰富.领先.且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地. 官方开源项目地址:PaddlePaddle/PaddleOCR: Awesome multi ...
- 解决TrueNAS中Smb共享文件路径不区分大小写的问题
问题 在Truenas中, 默认的smb文件分享中, 文件夹是不区分大小写的. 这在一些情况下会导致无法重命名等问题, 严重时可能会造成拷贝文件时的全文件夹文件丢失. 这是linux下的情况, 在已存 ...
- Advanced .Net Debugging 9:平台互用性
一.介绍 这是我的<Advanced .Net Debugging>这个系列的第九篇文章.这篇文章的内容是原书的第二部分的[调试实战]的第七章[互用性].互用性包含两个方面,第一个方面就是 ...
- k8s组件和网络插件挂掉,演示已有的pod是否正常运行
环境 03 master ,05 06是node [root@mcwk8s03 mcwtest]# kubectl get nodes -o wide NAME STATUS ROLES AGE VE ...
- 算法金 | LSTM 原作者带队,一个强大的算法模型杀回来了
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 时间拉回 2019 年,有「计算机界诺贝尔奖」之称图灵奖获得者公布,深度学习三巨头:Y ...
- Spring源码——AOP实现原理
引言 Spring AOP(Aspect Orient Programming),AOP翻译过来就是面向切面编程,它体现的是一种编程思想,是对面向对象编程(OOP)的一种补充. 在实际业务开发过程中, ...