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

    文章

    135

    浏览量

    12907
  • LVS
    LVS
    +关注

    关注

    1

    文章

    38

    浏览量

    10521

原文标题:再谈负载均衡

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    2026年安徽省电网侧新型储推荐接入站点数量出炉,管理工作也出现新要求

    推荐范围。这份文件标志着安徽省储项目管理“广泛动员”进入“精准引导”新阶段,为投资主体提供了清晰的选址指引和入库标准。安科瑞邓经理:15021601437 一、政策核心要点:入库门槛明确,布局精准化 推荐站点成为关键指引 文
    的头像 发表于 03-23 10:14 494次阅读
    2026年安徽省电网侧新型储<b class='flag-5'>能</b>推荐接入<b class='flag-5'>站点</b>数量出炉,管理工作也出现新要求

    RK3576平台Android HAL故障排查:lshal命令看透问题本质

    RK3576 作为瑞芯微主流的中高端芯片,其 HAL 基于 HIDL ( Android 硬件接口定义语言)实现,排查这类问题的核心工具就是 lshal —— 一个直接暴露 HIDL 服务运行状态的命令
    的头像 发表于 02-06 07:12 579次阅读
    RK3576平台Android HAL<b class='flag-5'>层</b>故障排查:<b class='flag-5'>从</b>lshal命令看透问题本质

    阿里云SLB负载均衡配置指南

    当业务流量超过单台服务器的承载能力,或者需要实现服务的高可用时,负载均衡成为必不可少的基础设施。阿里云SLB(Server Load Balancer)作为国内使用最广泛的云负载均衡
    的头像 发表于 01-30 17:47 1719次阅读

    Nginx反向代理和负载均衡配置实战

    负载均衡则是反向代理的进阶玩法。当一台后端服务器扛不住流量的时候,就需要多台服务器一起分担压力。Nginx负责把请求分发到不同的服务器上,这就是负载均衡
    的头像 发表于 01-23 13:44 938次阅读

    弹性负载均衡:现代 IT 架构的高可用与高并发基石

    前言在数字化浪潮下,互联网服务的访问量呈爆炸式增长,单台服务器早已难以承载海量并发请求。此时,负载均衡(LoadBalancing)技术应运而生,成为优化资源分配、提升系统性能的核心支撑。作为现代
    的头像 发表于 01-20 09:58 232次阅读
    弹性<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>:现代 IT 架构的高可用与高并发基石

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

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

    Nginx和HAProxy企业级负载均衡方案的对比

    想象一下,你的电商网站在双十一当天需要处理平时100倍的流量,单台服务器显然无法承受。这时候,负载均衡就像是一个智能的交通指挥员,将海量请求合理分配到多台后端服务器,确保系统稳定运行。
    的头像 发表于 09-18 15:01 939次阅读

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

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

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

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

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

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

    Nginx负载均衡策略选择指南

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

    电机带负载直接用轴连接输出力大还是用齿轮输出力矩大?

    景等多个维度进行综合分析。 物理原理来看,直接轴连接实现了电机与负载的刚性耦合,其最大优势在于能量传递的高效性。当电机通过联轴器或法兰直接驱动负载
    的头像 发表于 07-27 22:04 1201次阅读
    电机带<b class='flag-5'>负载</b>是<b class='flag-5'>直接</b>用轴连接输出力大还是用齿轮输出力矩大?

    如何在多显卡环境下配置OLLAMA实现GPU负载均衡

    本文将带你深入了解如何在多显卡环境下配置OLLAMA,实现GPU负载均衡,并分享生产环境中的最佳实践。无论你是刚接触GPU集群还是寻求性能优化的老手,这篇文章都能给你带来实用价值。
    的头像 发表于 07-24 14:12 4868次阅读

    一文详解Nginx负载均衡

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

    和七负载均衡的核心区别

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