0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

负载均衡能否能直接从LVS打到站点层

开关电源芯片 来源:码海 作者:坤哥 2021-08-17 10:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

上一篇负载均衡的文章有一个点不少人有疑问,所以我觉得有必要单独写篇文章解释一下,先看下上篇文章展示的架构图:

4b41a5ba-fe81-11eb-9bcf-12bb97331649.png

这里一些朋友的疑问点是 Nginx 是否多此一举,能否能直接从 LVS 打到站点层?即改成下面的架构

4b567bb6-fe81-11eb-9bcf-12bb97331649.jpg

答案是不行,为什么?其实我在上文中有提到一些点已经暗示了,只不过不那么明显而已,我再单独把这些点拎出来

LVS 是四层负载均衡器

Nginx 是七层负载均衡器,可以根据 url 来转发流量

首先我们需要明白为什么根据 url 转发请求这么重要,假设现在有「营销」,「运营中心」这两个集群,使用 Nginx 的话很简单,根据 url 来决定到底将请求转发到哪个集群即可

4b8463a0-fe81-11eb-9bcf-12bb97331649.jpg

由于 LVS 不能根据 url 转发,那么请问 LVS 收到请求后该转给谁

那么 LVS 为什么不能根据 url 来转发呢,因为它是四层负载均衡器,什么是四层和七层,这里就要简单复习下 ISO 七层参考模型了

4bb55438-fe81-11eb-9bcf-12bb97331649.jpg

由此可知,七层对应着应用层,四层对应着传输层,如果从应用层发起一个请求会在「传输层」,「网络层」,「数据链路层」分别加上各自层的包头,比如现在 A 电脑要发一个「I‘m Deepon」数据给 B 电脑,则在各层的转化流程如下图所示

4bd51fca-fe81-11eb-9bcf-12bb97331649.jpg

但最终在互联网上要传输的包(数据链路层传输的包叫祯,统称为包)是有大小限制的,如下图所示

4be74f60-fe81-11eb-9bcf-12bb97331649.jpg

在互联网上传输的包不能超过 14 + 20 + 20 + 1460 + 4 = 1518 byte,其中包含的应用层(即 payload)数据一次性不能超过 1460 个 byte,也就是说如果一个 HTTP 请求有 2000 byte,那么它必须分成两个包发送才能在网络上传输,再来看看 HTTP 的格式

4bf14718-fe81-11eb-9bcf-12bb97331649.jpg

如果一个 HTTP POST 请求很大,超过了 1460 byte(一个包 payload 的最大值),那么它必须分成两个包才能传输,也就意味着一个包可能包含 URI,另一个包不包含 URI,既然包都不包含 URI,那么请问 LVS 如何根据 URL 来转发给相应的集群呢,所以理解了 TCP/IP 的工作机制相信你不难理解开头的问题:LVS 是四层负载均衡器,无法根据 URL 来转发请求。

其实最关键的原因是四层以下其实只负责包的转发,只要拿出包头查看一下 ip 地址就可知道该转发哪里,很高效,如果你还要根据 url 来匹配那么需要拿到应用层数据根据正则等做匹配,显然会消耗更多的性能,所以专业的人做专业的事,应该由 LVS 来负责承载所有流量,Nginx 负责根据 url 来转发给对应的集群,因为它是七层负载均衡器,与上下游各建立了一个 TCP 链接

4c088f04-fe81-11eb-9bcf-12bb97331649.jpg

所以如果有多个分包,由于 Nginx 与 client 建立了 TCP 连接,可以在 Nginx 先拿到 client 发出的所有的分包再组装成完整的报文, 然后根据 url 选择其中一台 server 与之建立 TCP 连接后将数据分批完整地传给上游 server

另外需要注意的是现在在大厂中如果只将 Nginx 作为转发之用是不够的,一般用的 OpenResty ,什么是 OpenResty 呢

“OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty 的目标是让你的 Web 服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。”

注意上面一句「提供了与 MySQL ,Redis 等的交互能力」这一点非常关键,我们之前不是说 Nginx 可以根据 url 来决定打向哪个集群吗,假设现在有一个这样的场景:所有包含 operation 的请求都转发到运营中心的集群,则需要写死类似如下的配置

upstream backend {

server 192.168.1.10:8080

server 192.168.1.11:8080

}

server {

location /operation {

proxy_pass http://backed

}

}

在我们集团中类似这样的规则非常多,难道要像上面这样把所有的规则都一个个写死在 Nginx 的配置文件里吗?显然不可行,更合理的方式是把这些规则(哪个 url 对应哪些集群)保存在 MySQL 中,然后 Nginx 在启动的时候将这些规则从 MySQL 中取出并保存在 Redis 及本地缓存中,然后 Nginx 要根据 url 匹配的时候从本地缓存(如果没有从 redis 拿,redis 过期从 MySQL 拿)里拿这些规则再根据匹配项转发到相应的集群,Nginx 没有这样的能力,而 OpenResty 由于集成了 Lua,引入了与 MySQL, Redis 等交互的模块,所以用它是可行的,所以最终架构如下(将 Nginx 换成 OpenResty)

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 负载均衡
    +关注

    关注

    0

    文章

    128

    浏览量

    12812
  • LVS
    LVS
    +关注

    关注

    1

    文章

    38

    浏览量

    10396

原文标题:再谈负载均衡

文章出处:【微信号:gh_3980db2283cd,微信公众号:开关电源芯片】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    逐流、逐包、Flowlet:哪种负载均衡技术更适合未来网络?

    当前主流的负载均衡技术主要包括三种类型:逐流的ECMP负载均衡、逐包负载均衡以及基于子流(Flo
    的头像 发表于 09-22 14:17 1779次阅读
    逐流、逐包、Flowlet:哪种<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>技术更适合未来网络?

    燃料电池负载均衡测试:解锁高效供密码

    在新能源领域蓬勃发展的当下,燃料电池凭借其清洁、高效的特性脱颖而出。而负载均衡测试作为确保燃料电池稳定运行与性能优化的关键环节,意义非凡。以下是一套全面且实用的燃料电池负载均衡测试方案
    发表于 09-18 13:51

    华纳云:海外服务器负载均衡与高可用架构设计

    在现代互联网应用中,海外服务器承担着跨境业务、高并发请求和实时数据传输的关键角色。单台服务器难以支撑大量并发请求,一旦发生故障,可能导致服务中断和业务损失。因此,合理设计负载均衡与高可用架构,能够
    的头像 发表于 08-28 18:32 478次阅读

    怎样确定分布式光伏集群通信网络的负载均衡策略?

    LZ-DZ100电能质量在线监测装 确定分布式光伏集群通信网络的负载均衡策略,需结合集群的网络拓扑、数据特征、设备特性及运行需求,通过 “现状分析→目标设定→策略设计→验证优化” 的流程逐步推进
    的头像 发表于 08-22 10:10 394次阅读
    怎样确定分布式光伏集群通信网络的<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>策略?

    Nginx负载均衡策略选择指南

    上个月,我们的电商系统在大促期间突然出现用户购物车数据丢失的问题。经过排查发现,罪魁祸首竟然是负载均衡策略配置不当!
    的头像 发表于 08-20 16:23 583次阅读

    一文详解Nginx负载均衡

    Nginx作为负载均衡器,通过将请求分发到多个后端服务器,以提高性能、可靠性和扩展性。支持多种负载均衡算法,如轮询、最小连接数、IP哈希等,可以根据需求选择适合的算法。
    的头像 发表于 06-25 14:51 854次阅读
    一文详解Nginx<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>

    和七负载均衡的核心区别

    在现代分布式系统和云计算架构中,负载均衡(Load Balancing, LB)是确保高可用性、可扩展性和性能优化的关键技术。负载均衡器根据不同的OSI模型层级工作,主要分为四
    的头像 发表于 05-29 17:42 947次阅读

    Kubernetes负载均衡器MetalLB介绍

    Kubernetes中一个应用服务会有一个或多个实例,每个实例(Pod)的IP地址由网络插件动态随机分配(Pod重启后IP地址会改变)。为屏蔽这些后端实例的动态变化和对多实例的负载均衡,引入了 Service这个资源对象。
    的头像 发表于 03-18 16:24 720次阅读
    Kubernetes<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>器MetalLB介绍

    常见网络负载均衡的几种方式

    常见网络负载均衡的几种方式包括:DNS负载均衡、反向代理负载均衡、IP
    的头像 发表于 03-06 11:14 1075次阅读

    Haproxy负载均衡器深度解析

    Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。
    的头像 发表于 03-01 14:12 1020次阅读

    DLP3010LC内部Pattern能否直接文件中load?

    (); LoadPatternOrderTableEntryfromFlash(); } 它支持文件中load Pattern Data,但load完后,还是先写入Flash,然后再从flash中loader出来 我想问的是:能否
    发表于 02-20 06:27

    交流PLC能否直接负载的探讨

    在现代工业自动化控制系统中,PLC(可编程逻辑控制器)作为一种核心控制设备,被广泛应用于各种生产场合。PLC的输出类型多样,其中交流PLC是否直接负载是一个值得探讨的问题。 PLC的输出模块通常
    的头像 发表于 01-10 14:00 959次阅读
    交流PLC<b class='flag-5'>能否</b><b class='flag-5'>直接</b>带<b class='flag-5'>负载</b>的探讨

    云服务器怎么做负载均衡

    云 服务器怎么做负载均衡 ? 云服务器的负载均衡通过分配策略、自动扩展、健康检查和跨区域部署四个核心技术来实现。 分配策略包括轮询、权重分配和最少连接数,确保流量均匀分配。自动扩展根据
    的头像 发表于 12-24 10:40 652次阅读

    常见的lvs负载均衡算法

    常见的lvs负载均衡算法包括轮询(RR)、加权轮询(WRR)、最小连接(LC)、加权最小连接(WLC)、基于局部性的最少链接(LBLC)、带复制的LBLC(LBLCR)、目标地址散列(DH)、源地址
    的头像 发表于 12-12 13:50 926次阅读

    负载均衡服务器与服务器如何连接?

    负载均衡服务器与服务器如何连接?负载均衡服务器与服务器可通过多种方式连接,包括直接连接、交换机连接、路由器连接以及云计算环境中的连接。小型网
    的头像 发表于 12-09 13:41 762次阅读