应用程序负载均衡器与API网关的区别

45

AWS提供了名为应用程序负载均衡器的服务,它可以作为触发器触发Lambda函数。调用此类Lambda函数的方法是通过向ALB发送HTTP/HTTPS请求。

现在我的问题是,这与使用API网关有何不同?何时应该使用ALB而不是API Gateway(或反之)?

3个回答

16

我们在lambda函数前面使用API网关而不是使用ALB的最大原因之一是API GW具有本地IAM(身份和访问管理)集成。我们不需要自己进行任何身份验证工作,所有工作都委托给IAM,并且除此之外,API GW还具有内置的请求验证功能,包括验证查询字符串参数和标头。简而言之,API GW带有许多开箱即用的集成,如果您选择使用ALB,则需要做更多的工作。


3
ALBs现在支持OIDC认证。 - mcintyre321

6
似乎使用ALB时请求/响应限制较低,不支持WebSockets:
最大的请求体大小是1MB。有关相关的大小限制,请参阅HTTP标头限制。 Lambda函数可以发送的响应JSON的最大大小为1MB。 不支持WebSockets。升级请求将被拒绝并显示HTTP 400代码。
请参见:https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html
API网关的有效载荷限制在此处讨论:https://aws.amazon.com/cn/premiumsupport/knowledge-center/api-gateway-413-request-entity-too-large/
此外,已经由@matesio提到的文章提供了有关在ALB和API Gateway之间进行选择时需要考虑的其他事项的信息。
提到的著名推文:
如果您正在构建 API 并希望利用 AuthN/Z、请求验证、速率限制、SDK 生成、直接使用 AWS 服务后端,请使用 #APIGateway。如果您想将 Lambda 添加到现有的 Web 应用程序,位于 ALB 后面,现在只需将其添加到所需的路由即可。

3
时代在变化... ;) 实际上,Web Sockets 部分不正确: https://aws.amazon.com/elasticloadbalancing/faqs/?nc1=h_ls 此外,即使使用 OIDC,也可以进行 AuthN/Z。 并且使用 ALB 包含 ECS/EKS 后端容器也没有太大问题。 但是,其他事件驱动架构的服务仍然更适合使用 API GW 支持! - mchlfchr
尽管ALB支持WebSockets,但我不确定当您将Lambda函数用作目标时是否适用。至少文档尚未更新以反映此更改(https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html)@mchlfchr - TommyN

1
API网关通常比负载均衡器功能更加丰富。除了负载均衡外,API网关通常还能执行以下功能:
  • 基于内容的路由(根据特定条件将某些调用路由到v1和某些调用路由到v2等)
  • IAM相关功能(例如:访问验证)
  • 安全性(例如:SSL卸载、DDOS攻击预防、安全凭证翻译-例如将特定类型的令牌翻译成另一种等)
  • 有效负载翻译(例如:XML转Json等)
此外,API网关可能以设备形式提供,而设备通常具有低延迟、更安全等优点。
我不知道AWS API网关的具体功能,但上述功能是任何API网关的通用功能。然而,在可以选择使用LB或API网关来在互联网上提供服务时,除非有特定原因选择其他选项,否则API网关通常是更好的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接