企业集群平台架构设计与实现haproxy篇1|学习笔记

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 快速学习企业集群平台架构设计与实现haproxy篇1

开发者学堂课程【企业集群平台架构设计与实现:lvs/haproxy/keepalived企业集群平台架构设计与实现haproxy篇1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/391/detail/5013


企业集群平台架构设计与实现 haproxy 篇1


内容简介:

一、四层和七层负载均衡的区别

二、HAProxy 与 LVS 的异同


一、四层和七层负载均衡的区别

都知道 LVS 是四层的负载均衡,HAProxy 是七层的负载均衡。具体的区别看下面的图就清楚了,这个图就是四层负载均衡转发的原理,首先看这个图,在客户端 Client ,会发送一个请求到负载均衡服务器上,负载均衡器以上收到客户端发送的请求后,会通过设定的负载均衡算法去选择一个最佳的后端服务器,后端的服务器叫 Real Server ,选择完之后会将请求的目标报文地址修改为后端服务器的IP地址,这里需要注意一下,接下来直接将报文转发给后端服务器,这样就完成了一个请求,那整体上来看,整个的通信流程,就是 Client 发送一个请求,然后中间的负载均衡只做了一个报文的转发,转发到后端服务器 Real Server 上,整个流程只建立了一个链接就完成了负载均衡,这个是基于四层负载均衡一个非常重要的原理。

所谓的四层就是 ISO 参考模型中的第四层。四层负载均衡也称为四层交换机,它主要是通过分析 IP 层及 TCP/UDP 层的流量实现的基于 IP 加端口的负载均衡。常见的基于四层的负载均衡器有 LVS、F5 等。

以常见的 TCP 应用为例,负载均衡器在接收到第一个来自客户端的 SYN 请求时,会通过设定的负载均衡算法选择一个最佳的后端服务器,同时将报文中目标 IP 地址修改为后端服务器 IP,然后直接转发给该后端服务器,这样一个负载均衡请求就完成了。从这个过程来看,一个 TCP 连接是客户端和服务器直接建立的,而负载均衡器只不过完成了一个类似路由器的转发动作。在某些负载均衡策略中,为保证后端服务器返回的报文可以正确传递给负载均衡器,在转发报文的同时可能还会对报文原来的源地址进行修改。整个过程下图所示。1.png

同理,七层负载均衡器也称为七层交换机,位于 OSI 的最高层,即应用层,当然七层的负载均衡支持七层也支持四层,他的基础实现是从第一层到第七层都是可以支持的,那么如果支持了七层的负载均衡技术的话,就会支持很多常见的应用协议,此时负载均衡器支持多种应用协议,常见的有 HTTP、FTP、SMTP 等。这些协议都是可以通过七层负载均衡技术去实现。此处具体是怎么实现的,可以看下面这张图。这张图的请求原理和刚才四层是差不多的,但也有略微不同,首先也是客户端发送一个请求,客户端请求到七层负载均衡器,之后负载均衡器接收到请求后,会根据负载均衡的算法,去选择后端的 Real Server ,把请求再次传递给后端,这里不是转发的概念,首先是由后端服务器与负载均衡器建立第二条连接,第一条连接则是客户端 Client 与负载均衡,很明显,这个过程是建立了两条链接,当这个连接建立成功后,负载均衡器才会把请求转交给后端 Real Server ,这样来实现的一个负责调度。这样看下来,他的整个过程是建立了两个连接来实现,首先是客户端和负载均衡器建立连接,再是负载均衡器与后端服务器建立连接。七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为"内容交换器"。比如,对于 Web 服务器的负载均衡,七层负载均衡器不但可以根据"IP+端口"的方式进行负载分流,还可以根据网站的 URL 、访问域名、浏览器类别、语言等决定负载均衡的策略。例如,有两台 Web 服务器分别对应中英文两个网站,两个域名分别是 A、B,要实现访问 A 域名时进入中文网站,访问B 域名时进入英文网站,这在四层负载均衡器中几乎是无法实现的,而七层负载均衡可以根据客户端访问域名的不同选择对应的网页进行负载均衡处理。常见的七层负载均衡器有 Haproxy、Nginx 等。

这里仍以常见的 TCP 应用为例,由于负载均衡器要获取到报文的内容,因此只能先代替后端服务器和客户端建立连接,接着,才能收到客户端发送过来的报文内容,然后再根据该报文中特定字段加上负载均衡器中设置的负载均衡算法来决定最终选择的内部服务器。纵观整个过程,七层负载均衡器在这种情况下类似于一个代理服务器。整个过程如下图所示。

2.png

通过以上两个图可以看到,在四层的模式下有一个独立的连接就可以实现,在七层模式下,建立了两个体系连接才实现,这里可以看出,在七层负载均衡下它的功能实现会更加强大,但由于它是接近了两条独立的连接,所以他负载均衡器的设备要求会更高,它的负载承载量会更大,因为要建立转发很多链接。通过这里也可以发现七层负载均衡,类似于看到的在 http 中一个代理的功能。对硬件本身包括功能方面的要求,以上就是四层和七层负载均衡器的差异。对比四层负载均衡和七层负载均衡运行的整个过程,可以看出,在七层负载均衡模式下,负载均衡器与客户端及后端的服务器会分别建立一次 TCP 连接,而在四层负载均衡模式下,仅建立一次 TCP 连接。由此可知,七层负载均衡对负载均衡设备的要求更高,而七层负载均衡的处理能力也必然低于四层模式的负载均衡。


二、HAProxy 与 LVS 的异同

两种负载均衡软件的异同总结∶

1.两者都是软件负载均衡产品,但是 LVS 是基于 Linux 操作系统实现的一种软负载均衡,也就是基于 linux 内核本身实现的负载均衡技术,而 HAProxy 是基于第三应用实现的软负载均衡,是独立于内核之外的,也就是说使用起来与内核没有多大的关系。

2.LVS 是基于四层的 IP 负载均衡技术,而 HAProxy 是基于四层和七层技术、也就是说一层到七层都可以完成负载均衡技术,功能上要比LVS强大很多。因此HAProxy可提供 TCP 和 HTTP 应用的负载均衡综合解决方案。

3.LVS 工作在 ISO 模型的第四层,因此其状态监测功能单一,而 HAProxy 在状态监测方面功能强大,可支持端口、URL、脚本等多种状态检测方式。

4.HAProxy 虽然功能强大,但是性能方面要比 LVS,低很多。因为他的功能强大所以他的处理和转发的各种性能没有LVS 在四层的结构下处理要高,整体处理性能低于四层模式的 LVS 负载均衡,而 LVS 拥有接近硬件设备的网络吞吐和连接负载能力。

综上所述,HAProxy 和 LVS 各有优缺点,没有好坏之分,要选择哪个作为负载均衡器,要以实际的应用环境来决定。举个简单的例子,如果是想仅仅做一些端口的负载的话,只用 LVS 就够了,因为它的性能是比较好的,能实现这个功能,那么如果是想基于一个http层一个应用层协议上去运行毫无疑问,就必须要选择 HAProxy ,只有它才能实现 http 层的功能。

相关文章
|
2月前
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
180 0
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
Ubuntu 编译器 C语言
在Ubuntu22.04平台上交叉编译针对Rv1126架构的GCC13.2.0编译器的步骤。
遵循上述步骤,您应该能够在Ubuntu 22.04平台上成功交叉编译适用于RISC-V架构RV1126的GCC 13.2.0编译器,允许您为目标硬件构建应用程序和操作系统组件。
121 10
|
2月前
|
运维 监控 Java
初创代购选单体,千万级平台用微服务:一张表看懂架构选型红线
在跨境电商代购系统年交易额超3.2万亿元的背景下,本文对比微服务与单体架构的技术原理、适用场景及实战案例,结合性能、运维、成本等维度,为企业提供架构选型指南,助力实现高效扩展与稳定运营。
|
5月前
|
人工智能 供应链 调度
|
5月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
5月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
6月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
437 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
5月前
|
SQL 人工智能 前端开发
JeecgBoot 低代码平台 v3.7.4 发布,后台架构大升级
JeecgBoot 是一款基于 SpringBoot2.x/3.x 和 SpringCloud Alibaba 的企业级 AI 低代码平台,采用前后端分离架构(Ant Design & Vue3),支持 Mybatis-plus 和 Shiro。它集成了强大的代码生成器,可一键生成前后端代码,无需手动编写,大幅减少重复工作。平台支持 DeepSeek、ChatGPT 和 Ollama 等主流大模型,提供 AI 对话
338 9
|
6月前
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。

热门文章

最新文章