2016 年 8 月,亚马逊网络服务 (AWS)推出了application负载均衡器,用于对 HTTP 和 HTTPS 流量进行第 7 层负载均衡。 新产品增加了AWS现有的第4层和第7层负载均衡器Elastic Load Balancer(正式更名为Classic Load Balancer)所缺少的几个功能。
一年后,AWS推出了网络负载均衡器,以改进第 4 层负载均衡,因此在 AWS 上运行高可用性、可扩展应用的用户可以选择以下选项:
在这篇文章中,我们回顾了 ALB 的功能,并将其价格和功能与 NGINX Open Source 和 NGINX Plus 进行了比较。
注意事项 –
ALB 与 Classic Load Balancer 或 NLB 一样,与 AWS 紧密集成。 亚马逊将其描述为第 7 层负载均衡器——尽管它不提供独立第 7 层反向代理和负载均衡器可以提供的全部功能、调整和直接控制。
ALB 提供了 Classic Load Balancer 所缺少的以下功能:
主机
标头以及请求中的字段(包括标准和自定义 HTTP 标头和方法、查询参数和源 IP 地址)进行基于内容的路由。 (请参阅ALB 文档中的“从 Classic Load Balancer 迁移的好处”。)(有关 ALB 和 Classic Load Balancer 的完整功能比较,请参阅AWS 文档中的“产品比较”。)
对于那些苦苦挣扎于 Classic Load Balancer 有限功能集的 AWS 用户来说,ALB 是一个重要的更新,它在某种程度上满足了需要能够保护、优化和控制其 Web应用流量的高级用户的需求。 但是,它仍然没有提供专用反向代理(如 NGINX)和负载均衡器(如 NGINX Plus)的所有功能。
用户可以在 AWS 上部署 NGINX Open Source 或 NGINX Plus 来控制和负载平衡流量,而不是使用 Amazon ALB。 他们还可以部署 Classic Load Balancer 或 Network Load Balancer 作为前端,以实现跨多个可用区域的高可用性。 该表比较了 ALB、NGINX 和 NGINX Plus 支持的功能。
笔记: 下表中的信息截至 2020 年 7 月是准确的,但可能会发生变化。
亚马逊 ALB | NGINX 开源 | NGINX Plus | |
---|---|---|---|
负载均衡 方法和特点 |
Round_robin 和least_outstanding_requests 方法,具有基于 cookie 的会话持久性、加权目标组和慢启动 |
具有加权上游服务器的多种负载平衡方法(包括循环、最少连接、哈希、IP 哈希和随机) | 与开源 NGINX 相同,但增加了最少时间方法、更多会话持久化方法和慢启动 |
缓存 | ❌ 不支持负载均衡器中的缓存 | ✅ 静态文件缓存和动态(应用)缓存 | ✅ 静态和动态缓存以及高级功能 |
健康检查 | 主动(通过检查异步检查返回的状态代码来识别失败的服务器) | 被动(通过检查对客户端请求的响应来识别故障服务器) | 主动和被动 - 主动检查比 ALB 更丰富且更可配置 |
高可用性 | 您可以在多个可用区中部署 ALB 实例以实现高可用性,但不能跨区域部署 | 使用 NLB 实现主动‑主动 HA ,使用弹性 IP 地址实现主动‑被动 HA | 与 NGINX 开源相同,并具有内置集群状态共享功能,可实现所有 NGINX Plus 实例之间的无缝 HA |
支持 IP 套件中的所有协议 | ❌ 仅限 HTTP 和 HTTPS | ✅ 还有 TCP 和 UDP,带有被动健康检查 | ✅ 还有 TCP 和 UDP,具有主动和被动健康检查 |
每个负载均衡器实例有多个应用 | ✅ | ✅ | |
基于内容的路由 | ✅ 根据请求 URL、主机 标头和请求字段(包括标准和自定义 HTTP 标头、方法、查询参数和源 IP 地址) |
✅ 基于与 ALB 相同的因素,加上使用 NGINX JavaScript 模块作为内联 JavaScript 引擎的 cookie 和动态计算 | ✅ 基于与 NGINX Open Source 相同的因素,加上键值存储中的 JWT 声明和值 |
容器化应用 | 可以对 Amazon ID、ECS 容器实例、Auto Scaling 组和 AWS Lambda 函数进行负载平衡 | 需要手动配置或配置模板 | 使用 DNS(包括SRV 记录)进行自动配置;与领先的注册服务配合使用 |
可移植性 | ❌ 所有环境(开发、测试和生产)都必须在 AWS 上 | ✅ 任何环境都可以在任何部署平台上 | |
SSL/TLS | ✅ 支持 SNI 的多个 SSL/TLS 证书 ❌ 不支持 SSL/TLS 上游验证 |
✅ 支持 SNI 的多个 SSL/TLS 证书 ✅ 完整的 SSL/TLS 密码选择 ✅ 全面验证 SSL/TLS 上游 |
|
HTTP/2 和 WebSocket | ✅ | ✅ | |
身份验证功能 | – OIDC、SAML、LDAP、AD IdP 身份验证选项 – 与 AWS Cognito 和 CloudFront 集成 |
多种身份验证选项 | |
高级功能 | ❌ 基本 API | ✅ 原点服务、优先级、速率限制等 | ✅ 与 NGINX 开源相同,加上 RESTful API、键值存储 |
日志记录和调试 | ✅ Amazon 二进制日志格式 | ✅ 可定制的日志文件和多个调试接口 | ✅ 完全可定制的日志文件和多个调试接口,完全由 NGINX 支持 |
监控工具 | ✅ 与 Amazon CloudWatch 集成 | ✅ NGINX Controller* 和其他第三方工具 | ✅ NGINX 控制器和其他第三方工具;扩展的报告统计信息集 |
官方技术支持 | ✅ 需额外付费 | ❌ 仅社区支持 | ✅ 包含在价格中并直接来自 NGINX |
免费套餐 | ✅ 前 750 小时 | ✅ 永远免费 | ✅ 30 天试用订阅 |
* NGINX 控制器现在是F5 NGINX 管理套件。
当然,您不应该通过功能清单来评估您的负载均衡选择,而应该通过评估您需要的功能来完美地交付您的应用,并具有高安全性、最大可用性和完全控制。
亚马逊的 Classic Load Balancer (以前称为 ELB) 对流量高峰的响应不佳。 负载均衡器实例会根据当前流量水平自动调整大小,当出现峰值时,ELB 可能需要几分钟才能做出响应并部署额外容量。 用户必须采用手动、基于表单的流程来在流量高峰到来之前请求额外资源(称为“预热”)。 由于 ALB 基于 NGINX,因此 ALB 实例可以处理更多的流量,但您仍可能会观察到响应流量高峰的扩展事件。 此外,流量激增会自动导致负载均衡器容量单元 (LCU) 的消耗增加,从而导致成本更高。
如果您自行部署和扩展负载平衡代理,则可以完全控制容量和成本。 NGINX 和 NGINX Plus 部署在标准的 Amazon 实例中,我们的尺寸指南给出了不同容量的实例类型的潜在峰值性能。 NGINX Plus 的定价对于所有实例大小都是相同的,因此部署多余容量来处理峰值是经济高效的,而且当需要更多容量时,可以快速部署更多实例 - 无需填写表格。
我们对 Amazon ALB 的测试表明它没有实施“被动”健康检查。 仅当异步测试验证服务器未返回预期的状态代码时,才会检测到服务器失败。
我们通过创建 ALB 实例对实例集群进行负载平衡发现了这一点。 我们配置了最低频率为 5 秒、最低阈值为 2 次失败检查的健康检查,并向 ALB 发送了稳定的请求流。 当我们停止其中一个实例时,对于某些请求,ALB 返回502
坏
网关
错误持续几秒钟,直到健康检查检测到实例已关闭。 被动健康检查(NGINX 和 NGINX Plus 均支持)可防止最终用户看到这些类型的错误。
ALB 的运行状况检查只能通过检查 HTTP 状态代码来确定实例的运行状况(例如200
确定
或404
未
找到
)。 这种健康检查不可靠;例如,一些 Web应用用用户友好的页面替换服务器生成的错误,并且一些错误仅在网页正文中报告。
NGINX Plus 支持被动和主动健康检查,后者比 ALB 更强大,能够匹配响应主体和状态代码。
最后,部署 ALB 时面临的最大问题就是成本。 负载平衡可能是您的亚马逊账单的重要组成部分。
AWS 使用复杂的算法来确定定价。 除非您确切知道每个月要管理多少个新连接、多少个并发连接和多少数据(这很难预测),并且您可以按照与亚马逊相同的方式运行 LCU 计算,否则您每个月都会害怕收到亚马逊账单。
AWS 上的 NGINX Plus 为您提供完全的可预测性。 只需支付固定的小时费用加上 AWS 托管费用,您就可以获得功能更强大的负载平衡解决方案以及全面支持。
NGINX Plus 是经过验证的第 7 层负载均衡解决方案,同时还具有第 4 层负载均衡功能。 它与亚马逊自己的 Classic Load Balancer 或 NLB 配合良好。
我们鼓励在 AWS 环境中持续并更多地使用 NGINX 和 NGINX Plus,因为它们已经是一种非常流行的解决方案。 如果您还不是 NGINX Plus 用户,请立即开始30 天免费试用或联系我们讨论您的用例。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”