应用负载均衡器:你需要了解的一切
应用负载均衡器能够智能地提供可扩展性、性能和可用性。它们还保证您的服务器不会超负荷工作,并且能够处理流量突增。
任何IT团队的安全基础设施都是围绕负载均衡器构建的。负载均衡器确保您的应用程序能够处理传入的流量。在本文中,我们将更详细地讨论AWS上的应用负载均衡器。
什么是应用负载均衡器?
应用负载均衡器,也称为ALB,是在AWS上的一个Elastic Load Balancer或ELB。它在应用层(第七层)的Open Systems Interconnection (OSI) model上操作。
ALB有三个组件 – 监听器、负载均衡器和目标组。在接收到请求后,负载均衡器按优先级顺序评估监听器规则(选择要执行的规则)。然后,它从目标组中选择一个目标进行规则操作。
您可以设置监听器规则,根据应用程序流量的内容将请求发送到不同的目标组。ALB的默认路由算法是循环调度;但是,您可以选择最少未完成请求路由技术。
随着您的需求变化,您可以从负载均衡器中删除和添加目标,而不会中断应用程序的一般请求流程。
Elastic Load Balancing(ELB)允许您根据应用程序的流量随时间变化来扩展负载均衡器。所有弹性负载均衡器都可以自动扩展到绝大多数工作负载。
您还可以构建健康检查来监视注册目标上的应用程序状态,以便负载均衡器只向健康的目标发送请求。
应用负载均衡器的特点
第7层负载均衡
基于请求属性,您可以将HTTP/HTTPS和gRPC流量负载均衡到Amazon EC2实例、ECS容器、AWS Lambda、第三方或本地服务器。
安全特性
ALB支持基于HTTP desync-guardian库的解同步保护。该功能可以在不影响可用性或延迟的情况下保护客户应用程序免受Desync引起的HTTP漏洞的影响。客户还可以根据其应用程序的架构设置对可疑请求的容忍程度。
Outposts支持
AWS Outposts是一种完全托管的解决方案,将AWS基础设施、服务和工具扩展到几乎任何数据中心、协同空间或本地设施,提供真正一致的混合体验。您可以在AWS Outposts上使用应用负载均衡器。客户可以在支持的实例类型上部署ALB,ALB会自动扩展到机架容量,以适应不同级别的应用程序工作负载,无需手动干预。
您还可以配置ALB接收提醒/警报,以帮助他们应对负载均衡容量的要求。客户可以使用相同的AWS控制台、CLI和API来配置和管理Outposts上的ALB,就像在AWS区域中配置和管理ALB一样。
HTTPS终止
应用负载均衡器(ALB)支持客户端和负载均衡器之间的HTTPS终止。这意味着您的客户端与ALB之间的连接是HTTPS,但ALB与应用程序服务器(EC2、ECS等)之间的连接是HTTP。
由于ALB和应用程序服务器之间的连接位于您的VPC内部,默认情况下可以受到外部实体的保护。ALB可以使用AWS证书管理器管理SSL certificates和AWS身份和访问管理(IAM)来管理预定义的安全策略。
HTTP/2和gRPC支持
HTTP/2是一种新的超文本传输协议(HTTP)形式,它允许多个请求在同一个连接上使用单个复用连接进行传输。它还可以为客户端提供SSL连接,并在发送之前以二进制格式压缩标头数据。
gRPC流量可以通过应用负载均衡器在 microservices 或 gRPC启用的客户端和服务之间进行路由和负载均衡。这使得可以将gRPC流量管理无缝集成到体系结构中,而无需对客户端或服务端的基础架构进行更改。
gRPC是微服务架构中用于服务间通信的首选协议,它使用HTTP/2进行传输。它具有高效的二进制序列化、支持多种语言的特性,以及HTTP/2的固有优势,如较小的网络占用、压缩和双向流式传输,使其优于传统的REST协议。
粘性会话
粘性会话允许将来自同一客户端的请求使用cookie路由到同一目标。只需在ALB属性中启用粘性会话和cookie,即可轻松设置粘性会话。应用负载均衡器(ALB)支持基于持续时间的cookie和基于应用程序的cookie。
确定负载均衡器应将用户的请求持续发送到同一目标的时间是管理粘性会话的关键。粘性会话在目标组级别启用。您可以在不同的目标组之间部署基于持续时间的粘性、基于应用程序的粘性和无粘性的组合。
原生IPv6支持
应用负载均衡器支持原生IPv6(Internet Protocol version 6)在 VPC 中。这使得客户端可以使用IPv4或IPv6连接到应用负载均衡器。
请求追踪
应用负载均衡器在所有进入负载均衡器的请求上注入一个新的自定义标识符“X-Amzn-Trace-Id”HTTP标头。请求跟踪允许您通过其唯一ID跟踪请求在多个AWS服务之间的进程。您可以利用请求跟踪来查找应用程序堆栈中的性能或瓶颈问题。
重定向
应用负载均衡器可以将传入的请求从一个URL重定向到另一个URL。例如,您可以将HTTP请求重定向到HTTPS请求,从而实现安全浏览的合规目标,同时改善站点的搜索排名和SSL/TLS得分。重定向还可以将用户路由到不同的网站,例如将应用程序的旧版本路由到新版本。
固定响应
应用负载均衡器可以管理应用程序处理的客户端请求。在不将请求传递给应用程序的情况下,您可以直接从负载均衡器中响应传入的请求,并返回HTTP错误响应代码和自定义错误消息。
WebSockets支持
应用负载均衡器支持WebSockets。WebSockets允许服务器向最终用户发送实时消息,而无需他们请求(或轮询)服务器的更新。在长时间运行的 TCP connection中,WebSockets协议允许客户端和服务器之间进行双向通信。
服务器名称指示(SNI)
SNI(服务器名称指示)是一种TLS协议扩展,客户端在TLS握手中指定要连接的主机名。负载均衡器可以通过单个安全侦听器呈现多个证书,从而仅使用一个安全侦听器支持多个安全网站。
使用SNI,应用负载均衡器使用智能的证书选择过程将请求中的主机名与相应的SSL证书进行匹配。如果客户端的主机名与多个证书匹配,负载均衡器会根据客户端的能力等多个参数选择最佳证书。
IP地址作为目标
通过使用应用程序后端的IP地址作为目标,您可以使用ALB来负载均衡托管在AWS上、本地部署甚至其他云提供商上的任何应用程序。这使得负载均衡可以针对应用程序后端的任何IP地址和接口。
IP addresses也可以作为目标用于负载均衡在本地部署的应用程序(通过Direct Connect或VPN)、对等VPC和EC2-Classic(使用ClassicLink)。您可以迁移到云端、突发到云端或故障转移至云端,并具备在本地资源和AWS之间进行负载均衡的能力。
Lambda函数作为目标
由于应用负载均衡器支持执行Lambda函数以传递HTTP(S)请求,用户可以从任何HTTP客户端(包括Web浏览器)访问无服务器应用程序。您可以使用基于内容的路由规则来将请求定向到不同的Lambda函数,通过将Lambda函数注册为负载均衡器的目标。
应用负载均衡器可用作支持服务器和无服务器计算的标准HTTP端点的应用程序。您可以使用Lambda函数创建整个网站或将其与EC2实例、容器和本地服务器结合使用来开发应用程序。
基于内容的路由
假设您的应用程序由多个独立服务组成,应用负载均衡器可以根据请求的内容(例如主机字段、路径URL、HTTP头、HTTP方法、查询字符串或源IP地址)将请求路由到服务。
基于主机的路由:使用HTTP头的主机字段,ALB可以将客户端请求路由到同一负载均衡器上的多个域。
基于路径的路由:可以使用HTTP头的URL路径来路由客户端请求。
基于HTTP头的路由:可以使用任何标准或自定义的HTTP头值来路由客户端请求。
基于HTTP方法的路由:可以使用任何标准或自定义的HTTP方法来重定向客户端请求。
基于查询字符串参数的路由:可以根据查询字符串或参数来路由客户端请求。
基于源IP地址CIDR的路由:可以根据请求的源IP地址CIDR进行路由。
容器化应用程序支持
应用负载均衡器通过在单个Amazon EC2实例上的多个端口上分布负载来改进容器支持(动态端口映射)。在ECS任务定义中,您可以指定一个动态端口,当容器在EC2实例上调度时,它将获得一个未使用的端口。ECS调度程序将使用此端口将任务添加到负载均衡器。
带有Web应用程序防火墙的ALB
使用AWS WAF,您现在可以保护应用程序负载均衡器上的Web应用程序。AWS WAF保护您的Web应用程序免受可能导致应用程序停机、危及安全性或消耗过多资源的典型Web攻击。
负载均衡算法的慢启动模式
应用负载均衡器(ALB)支持轮询负载均衡算法。此外,应用负载均衡器中的轮询机制包括延迟启动模式,可使您在不过载的情况下添加新目标。慢启动选项将使目标在指定的启动期间逐渐占有其公平份额的请求。慢启动对于依赖缓存并在其最佳状态下对查询做出反应之前需要预热的应用程序非常有益。
用户身份验证
您可以使用应用负载均衡器卸载应用程序的身份验证机制。用户访问云应用程序时,应用负载均衡器将对其进行身份验证。终端用户可以通过社交身份提供者(如Google、Facebook和亚马逊)以及企业身份提供者(如Microsoft Active Directory通过SAML或任何符合OpenID Connect标准的身份提供者)进行身份验证,这要归功于应用负载均衡器与Amazon Cognito的无缝集成。
如果您已经拥有符合OpenID Connect标准的专有身份提供者解决方案,应用负载均衡器还可以直接连接您的身份提供者来验证企业用户。
从经典负载均衡器(CLB)迁移到应用负载均衡器(ALB)的好处
经典负载均衡器是AWS推出的第一种负载均衡器。尽管功能强大,但随着ALB和NLB的推出,经典负载均衡器已逐渐过时。许多新版本负载均衡器支持的功能在经典负载均衡器中并不存在。
- 支持路径条件:您可以配置侦听器规则,根据请求中的URL转发请求。这使您可以将应用程序分解为更小的服务(微服务),并根据URL内容将请求路由到适当的服务。
- 支持主机条件:您可以配置侦听器规则,根据HTTP标头中的主机字段转发请求。这使您可以使用单个负载均衡器路由请求到多个域。
- 支持基于请求信息(例如HTTP标头条件和方法、查询参数和源IP地址)进行路由。
- 您可以将路由请求发送到单个EC2服务器上的多个应用程序。
- 一个实例或IP地址可以在不同端口上注册到多个目标组。
- 您可以将请求从一个URL重定向到另一个URL。
- 可以返回自定义HTTP响应。
- 支持通过IP地址注册负载均衡器的目标,包括VPC之外的目标。
- 可以将Lambda函数注册为目标。
- 负载均衡器可以在路由请求之前使用公司或社交身份验证应用程序的用户身份验证。
- 支持容器化应用程序。在调度任务时,Amazon Elastic Container Service(Amazon ECS)可以选择一个未使用的端口,并使用它将任务注册到目标组。这使您可以充分利用您的集群。
- 由于健康检查定义在目标组级别,并且CloudWatch指标发布在目标组级别上,因此可以支持监视每个服务的健康状态。当将目标组添加到自动扩展组时,您可以根据需求动态调整每个服务的规模。
- 访问日志以压缩格式记录了其他信息。
最后的话
应用负载均衡器是新一代负载均衡器,具有弹性、可扩展性和许多不同的功能,特别适用于Web应用程序的需求。如果您在经典网络上托管了传统应用程序,可能需要使用经典负载均衡器,但对于所有新一代工作负载,ALBs将是一个明显的选择。