负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
——摘自《百度百科》
在AWS平台所使用的负载均衡技术中,其Elastic Load Balancing 可以跨多个可用区中的多个目标(如 Amazon EC2 实例、容器和 IP 地址)分发传入应用程序或网络流量。Elastic Load Balancing 会在应用程序的传入流量随时间的推移发生更改时扩展负载均衡器,并可自动扩展以处理大部分工作负载。
负载均衡器跨多个计算资源 (如虚拟服务器) 分布工作负载。使用负载均衡器可提高您的应用程序的可用性和容错性。可以根据需求变化在负载均衡器中添加和删除计算资源,而不会中断应用程序的整体请求流。
用户可以配置运行状况检查,这些检查可用来监控计算资源的运行状况,以便通过负载均衡器将请求发送到正常运行的目标。Elastic Load Balancing 支持三种类型的负载均衡器:Application Load Balancer、Network Load Balancer 和 Classic Load Balancer,可以根据应用程序需求选择负载均衡器。由于基于应用的负载均衡和基于网络的负载均衡最常用,所以图中主要介绍ALB和NLB。
ALB:负载均衡器在多个可用区中的多个目标 (例如 EC2 实例) 间分配应用程序的传入流量,这将提高应用程序的可用性。
应用程序负载均衡器在应用程序层正常工作,该层是开放系统互连 (OSI) 模型的第 7 层。负载均衡器收到请求后,将按照优先级顺序评估侦听器规则以确定应用哪个规则,然后从目标组中选择规则操作目标。可以配置侦听器规则,以根据应用程序流量的内容,将请求路由至不同的目标组。每个目标组的路由都是单独进行的,即使某个目标已在多个目标组中注册。
可以根据需求变化在负载均衡器中添加和删除目标,而不会中断应用程序的整体请求流。Elastic Load Balancing 根据传输到应用程序的流量随时间的变化对负载均衡器进行扩展。Elastic Load Balancing 能够自动扩展以处理绝大部分工作负载。
所以,使用应用程序负载均衡器具有以下优势:
- 支持基于路径的路由。对于根据请求中的 URL 转发请求的侦听器,您可以为它配置规则。这让您可以将应用程序构造为较小的服务,并根据 URL 内容将请求路由到正确的服务。
- 支持基于主机的路由。对于基于 HTTP 标头中主机字段转发请求的侦听器,您可以为它配置规则。这使您能够使用单个负载均衡器将请求路由到多个域。
- 支持基于请求中的字段进行路由,例如标准和自定义 HTTP 标头和方法、查询参数和源 IP 地址。
- 支持将请求路由到单个 EC2 实例上的多个应用程序。可以使用多个端口向同一个目标组注册每个实例或 IP 地址。
- 支持将请求从一个 URL 重定向到另一个 URL。
- 支持返回自定义 HTTP 响应。
- 支持通过 IP 地址注册目标,包括位于负载均衡器的 VPC 之外的目标。
- 支持将 Lambda 函数注册为目标。
- 支持负载均衡器在路由请求之前使用应用程序用户的企业或社交身份对这些用户进行身份验证。
- 支持容器化的应用程序。计划任务时,Amazon Elastic Container Service (Amazon ECS) 可以选择一个未使用的端口,并可以使用此端口向目标组注册该任务。这样可以高效地使用您的群集。
- 支持单独监控每个服务的运行状况,因为运行状况检查是在目标组级别定义的,并且许多 CloudWatch 指标是在目标组级别报告的。将目标组挂载到 Auto Scaling 组的功能使您能够根据需求动态扩展每个服务。
- 访问日志包含附加信息,并以压缩格式存储。已改进负载均衡器性能。
NLB:负载均衡器在多个目标 (如 Amazon EC2 实例) 之间分配传入的流量,这将提高应用程序的可用性。
基于网络的负载均衡器能够基于配置协议和端口检查来自客户端的连接请求,然后将请求转发给目标组。每个目标组使用您指定的 TCP 协议和端口号,再将请求路由到一个或多个注册目标,例如 EC2 实例。用户可以向多个目标组注册一个目标。您可以对每个目标组配置运行状况检查,在注册到目标组 (它是使用负载均衡器的侦听器规则指定的) 的所有目标上,执行运行状况检查。
网络负载均衡器在开放系统互连 (OSI) 模型的第四层运行。它每秒可以处理数百万个请求。在负载均衡器收到连接请求后,它会从默认规则的目标组中选择一个目标。它尝试在侦听器配置中指定的端口上打开一个到该选定目标的 TCP 连接。 当用户为负载均衡器启用可用区时,Elastic Load Balancing 会在该可用区中创建一个负载均衡器节点。默认情况下,每个负载均衡器节点仅在其可用区中的已注册目标之间分配流量。如果用户启用了跨区域负载均衡,则每个负载均衡器节点会在所有启用的可用区中的已注册目标之间分配流量。
所以,使用网络负载均衡器具有以下优势:
- 可以处理急剧波动的工作负载,并可以扩展到每秒处理数百万个请求。
- 支持将静态 IP 地址用于负载均衡器。还可以针对为负载均衡器启用的每个子网分配一个弹性 IP 地址。
- 支持通过 IP 地址注册目标,包括位于负载均衡器的 VPC 之外的目标。
- 支持将请求路由到单个 EC2 实例上的多个应用程序。可以使用多个端口向同一个目标组注册每个实例或 IP 地址。
- 支持容器化的应用程序。计划任务时,Amazon Elastic Container Service (Amazon ECS) 可以选择一个未使用的端口,并可以使用此端口向目标组注册该任务。这样可以高效地使用您的群集。
- 支持单独监控每个服务的运行状况,因为运行状况检查是在目标组级别定义的,而且许多 Amazon CloudWatch 指标也是在目标组级别报告的。将目标组挂载到 Auto Scaling 组的功能使您能够根据需求动态扩展每个服务。
- 由此可见,负载均衡技术作用于网络或应用程序,而且主要面向业务域,作为AWS的负载均衡管理工具,Elastic Load Balancing 已经充分考虑到各类用户的应用场景。在容错性方面,ELB能够跨越多个计算资源(如虚拟服务器)分配工作负载;在可用性方面,ELB可以根据需求的变化进行资源调整,从而不会影响业务和应用程序;在安全性方面,ELB可以对负载均衡器进行加密和解密工作。