AWS 之 ELB

303 阅读11分钟

简介

ELB(Elastic Load Balancing)AWS提供的一项负载均衡服务,它可以帮助您将流量自动分布到多个EC2 实例容器IP 地址虚拟机实例,从而提高应用程序的可用性和可扩展性

可扩展性和高可用性

在正式进入到ELB话题之前,首先来了解一下可扩展性是什么?与高可用性又有什么关系?ELB与这两个概念又会存在怎样的关联?

可扩展性

概念

可扩展性是指系统应用程序在面对不断增长的负载或用户需求时,能够灵活地扩展其资源以满足需求,并保持高效的性能和稳定的运行。可扩展性是一个关键的特性,特别对于云计算大规模分布式系统来说,以应对不断变化的业务需求和流量增长

分类

可扩展性包括水平扩展和垂直扩展:

  • 水平扩展:通过增加更多的相同或类似资源来扩大系统的处理能力。在云计算环境中,这通常意味着增加更多的实例容器来处理更多的请求。例如:AWS通过在Auto Scaling 组中增加更多的EC2 实例来处理更多的流量,或者通过增加更多的容器实例来处理更多的请求
  • 垂直扩展:通过增加单个资源的处理能力来提高系统的性能。在云计算环境中,这通常意味着增加实例的计算能力,如增加实例的CPU内存存储容量,以满足更高的性能要求

高可用性

概念

高可用性是指系统在面临各种意外或故障的情况下,仍能保持持续稳定地运行,并提供无缝的服务,确保用户能够始终访问和使用系统的能力。高可用性的目标是最大程度地减少系统的停机时间,以确保服务的可靠性和可用性

高可用性与可扩展性关系

高可用性通常与水平扩展一起使用,这是因为水平扩展能够通过添加更多的相同或类似资源来增加系统的处理能力,并将负载分布到多个实例或容器中。这样,即使其中一个实例或容器发生故障,其他实例或容器仍然可以继续处理请求,从而保持系统的可用性

垂直扩展通常用于增加单个资源的处理能力,例如:增加实例计算能力存储容量,以提高系统的性能。虽然垂直扩展也可以提高系统的可用性,但在高可用性的设计中,通常更多地侧重于水平扩展

高可用性水平扩展有更为紧密的联系,因为高可用性通常需要在多个区域或可用区部署系统,并确保即使其中一个区域或可用区发生故障,系统仍然可用

小结

基于高可用性通常包括在多个区域或可用区部署系统的设计,因此,实现高可用性需要在不同的区域或可用区部署多个实例或容器,并通过负载均衡将流量分发到不同的实例。当需要处理更多的流量时,可以通过水平扩展来添加更多的实例或容器,以保持高可用性并满足性能需求

ELB

在了解了可扩展性高可用性的相关概念之后,便可以继续来学习关于ELB的知识,在最开始已经简述了ELB的概念,接下来就来进一步了解一下ELB的内容与其作用吧~

分类

ELB可以分为以下四种类型:

  1. 经典负载均衡器(Classic Load Balancer,CLB) :它是AWS最早推出的负载均衡器,支持传统的应用网络负载均衡需求。可以在不同的可用区均衡流量,并支持健康检查和会话保持等功能
  2. 应用负载均衡器(Application Load Balancer,ALB) :它是针对现代应用微服务架构负载均衡器,支持基于应用层负载均衡。可以根据请求的内容进行流量分发,支持HTTPHTTPS协议,并提供容器微服务的本地动态端口映射
  3. 网络负载均衡器(Network Load Balancer,NLB) :它是面向高性能、低延迟应用的负载均衡器,支持传输层(TCP、UDP)负载均衡。可以在OSI 模型的第四层工作,将连接请求转发到目标实例,适用于处理大流量和高性能的应用场景
  4. 网关负载均衡器(Gateway Load Balancer,GWLB) :主要用于处理来自于云和本地数据中心之间的流量,支持TCPUDP协议。网关负载均衡器允许全球范围内部署负载均衡实例,以实现高级别的容错和高可用性

简单小结一下:

  • CLB适用于传统的应用和网络架构
  • ALB适用于容器微服务架构,并且提供更多的功能和灵活性
  • NLB适用于对性能稳定性有高要求的应用场景,如游戏、实时通信和大规模传输
  • GWLB适用于连接VPCVPN

目标组(Target Group)

目标组ELB 服务中的一个重要概念。它用于定义负载均衡器转发请求的目标实例

AWS上创建负载均衡器时,需要选择一个或多个目标组,这些目标组包含了需要接收负载均衡器转发的请求的目标实例目标实例可以是EC2 实例ECS 容器Lambda 函数等,取决于负载均衡器的类型

简单来说:目标组负载均衡器绑定,负载均衡器会将流量转发到目标组中的目标实例

监听规则和健康检查

在前面已经了解到了ELB会结合目标组来实现负载均衡流量转发,那么什么时候ELB会将流量转发到目标组?是如何实现的?下面需要再了解两个新概念

ELB会根据配置的监听规则健康检查来决定转发流量到目标组的时机和选择目标实例

  • 监听规则ELB会根据配置的监听规则来决定如何转发流量。监听规则可以根据请求的协议端口路径主机头等条件将请求转发给相应的目标组。例如:您可以设置一个监听规则,指定将HTTP 请求转发到一个特定的目标组,而将HTTPS 请求转发到另一个目标组
  • 健康检查ELB会定期对目标组中的目标实例进行健康检查,以确定哪些实例是可用的。健康检查可以配置在目标组级别,并可以根据您的需求设置。通过健康检查ELB能够识别不健康或故障的实例,并暂时将请求转发到其他健康的实例,以确保高可用性和可靠性

跨可用区

ELB可以跨多个可用区(Availability Zones,AZs)进行负载均衡。当在一个AWS区域内创建ELB时,可以选择将其配置在多个可用区中,以确保高可用性和容错能力

ELB可用区功能是在VPC内部实现的,通过在多个可用区中部署ELB来实现负载均衡高可用性。在创建ELB时,需要选择一个VPC和至少两个属于不同可用区的子网,以便使ELB能够在跨多个可用区进行流量转发

拓展

负载均衡器是否都提供静态 IP 和 DNS 域名?

简介

负载均衡器提供静态 IPDNS 域名两种方式来让客户访问后端实例。不同类型的负载均衡器提供不尽相同:

  1. ALBCLB:提供一个静态 DNS 域名来访问后端实例
  2. NLBGWLB:提供一个静态 IP 地址和一个DNS 域名来访问后端实例,二选一

在使用负载均衡器时,建议使用负载均衡器提供的DNS 域名,因为它可以自动解析到后端实例IP 地址,从而在后端实例发生变化时保持连续性

如果需要固定 IP 地址来访问负载均衡器,可以考虑使用Elastic IP(EIP)来关联到负载均衡器

总结

  • ALBCLB主要用于应用层负载均衡,只生成DNS 域名
  • NLBGWLB主要用于传输层负载均衡,生成静态 IP 地址DNS 域名

Sticky Session

简介

Sticky Session(粘性会话),也称为Session Affinity(会话亲和性),是一种负载均衡器的功能,用于确保用户的请求在一段时间内总是被路由到同一个后端实例。通常情况下,负载均衡器会根据一定的负载均衡算法将请求分发给后端多个服务器,但在某些情况下,保持会话状态对于应用程序的正确运行是必要的

ELBSticky Session意味着当客户端第一次访问负载均衡器并被分配到特定的后端实例时,后续的请求会被定向到相同的后端实例,直到指定的会话过期或终止

功能

Sticky Session主要用于处理有状态的应用程序,因为有状态应用在同一后端实例上处理连续的请求可以确保应用的状态不会丢失

而对于无状态的应用或可水平扩展的应用,最好不要使用Sticky Session,因为它会导致负载均衡器无法充分利用实例的能力,并可能导致一些实例过载,而其他实例处于空闲状态

ALBCLB支持Sticky Session,可以选择使用应用程序生成的cookie自定义cookie作为会话标识

自定义 cookie 命名

简介

通过自定义 cookie 名称,可以更灵活地控制会话标识的生成和使用以及确保cookie唯一性安全性,以满足特定应用程序的需求

如果选择自定义cookie,需要指定一个唯一cookie 名称,用于标识用户的会话。这样,ELB会检查请求中是否包含该cookie,然后根据cookie 值将请求路由到相应的后端服务器,并保持这种路由关系一段时间

命名规则

自定义Cookie的命名规则并没有严格的固定要求,但在选择名称时,建议遵循以下几个准则:

  1. 唯一性:确保自定义 Cookie 的名称在应用程序中是唯一的,避免与其他 Cookie系统保留的 Cookie 名称冲突
  2. 安全性:避免使用过于明显或容易猜测的名称,以防止潜在的安全风险
  3. 简洁性:选择简短、易于理解的名称,以便在代码中使用和处理
  4. 字符限制:根据实际情况,确保选择的名称在不同的浏览器和系统中都能正常工作,并且不超过Cookie 名称的最大字符限制

注意:对于自定义Cookie的命名规则,负载均衡器不允许以特定的前缀开头,因此以ALBCLBAWSALBAWSCLB开头的名称都不被允许,因为这些名称都会用于负载均衡器默认生成的 cookie

SNI(Server Name Indication)

简介

在过去,TLS(Transport Layer Security)协议只支持一个 IP 地址对应一个证书,这导致在一个服务器上托管多个域名时,每个域名都需要有独立的 IP 地址证书

SNI是一种用于在TLS 协议中指示服务器主机名的扩展,可以加载多个 SSL 证书,从而负载均衡器可以在一个监听器上加载多个 SSL 证书,因此能够同时为多个域名提供安全的连接

功能

SNI使同一个负载均衡器上可以托管多个域名,并使用不同的 SSL 证书对它们进行保护,而无需为每个域名都单独创建一个负载均衡器。这样可以简化架构并降低成本