简介
ELB(Elastic Load Balancing)
是AWS
提供的一项负载均衡服务
,它可以帮助您将流量自动分布到多个EC2 实例
、容器
、IP 地址
或虚拟机实例
,从而提高应用程序的可用性和可扩展性
可扩展性和高可用性
在正式进入到ELB
话题之前,首先来了解一下可扩展性
是什么?与高可用性
又有什么关系?ELB
与这两个概念又会存在怎样的关联?
可扩展性
概念
可扩展性
是指系统
或应用程序
在面对不断增长的负载或用户需求时,能够灵活地扩展其资源以满足需求,并保持高效的性能和稳定的运行。可扩展性
是一个关键的特性,特别对于云计算
和大规模分布式系统
来说,以应对不断变化的业务需求和流量增长
分类
可扩展性包括水平扩展和垂直扩展:
- 水平扩展:通过增加更多的相同或类似资源来扩大系统的处理能力。在
云计算环境
中,这通常意味着增加更多的实例
或容器
来处理更多的请求。例如:AWS
通过在Auto Scaling 组
中增加更多的EC2 实例
来处理更多的流量,或者通过增加更多的容器实例
来处理更多的请求 - 垂直扩展:通过增加单个资源的处理能力来提高系统的性能。在
云计算环境
中,这通常意味着增加实例的计算能力,如增加实例的CPU
、内存
或存储容量
,以满足更高的性能要求
高可用性
概念
高可用性
是指系统在面临各种意外或故障的情况下,仍能保持持续稳定地运行,并提供无缝的服务,确保用户能够始终访问和使用系统的能力。高可用性
的目标是最大程度地减少系统的停机时间,以确保服务的可靠性和可用性
高可用性与可扩展性关系
高可用性
通常与水平扩展
一起使用,这是因为水平扩展
能够通过添加更多的相同或类似资源来增加系统的处理能力,并将负载分布到多个实例或容器
中。这样,即使其中一个实例或容器
发生故障,其他实例或容器
仍然可以继续处理请求,从而保持系统的可用性
垂直扩展
通常用于增加单个资源的处理能力,例如:增加实例
的计算能力
或存储容量
,以提高系统的性能。虽然垂直扩展
也可以提高系统的可用性,但在高可用性
的设计中,通常更多地侧重于水平扩展
高可用性
与水平扩展
有更为紧密的联系,因为高可用性
通常需要在多个区域或可用区部署系统
,并确保即使其中一个区域或可用区发生故障,系统仍然可用
小结
基于高可用性
通常包括在多个区域或可用区部署系统的设计,因此,实现高可用性
需要在不同的区域或可用区部署多个实例或容器,并通过负载均衡
将流量分发到不同的实例。当需要处理更多的流量时,可以通过水平扩展
来添加更多的实例或容器,以保持高可用性并满足性能需求
ELB
在了解了可扩展性
和高可用性
的相关概念之后,便可以继续来学习关于ELB
的知识,在最开始已经简述了ELB
的概念,接下来就来进一步了解一下ELB
的内容与其作用吧~
分类
ELB
可以分为以下四种类型:
- 经典负载均衡器(Classic Load Balancer,CLB) :它是
AWS
最早推出的负载均衡器,支持传统的应用
和网络负载均衡
需求。可以在不同的可用区均衡流量,并支持健康检查和会话保持等功能 - 应用负载均衡器(Application Load Balancer,ALB) :它是针对
现代应用
和微服务架构
的负载均衡器
,支持基于应用层
的负载均衡
。可以根据请求的内容进行流量分发,支持HTTP
和HTTPS
协议,并提供容器
和微服务
的本地动态端口映射 - 网络负载均衡器(Network Load Balancer,NLB) :它是面向高性能、低延迟应用的
负载均衡器
,支持传输层(TCP、UDP)
的负载均衡
。可以在OSI 模型
的第四层工作,将连接请求转发到目标实例,适用于处理大流量和高性能的应用场景 - 网关负载均衡器(Gateway Load Balancer,GWLB) :主要用于处理来自于云和本地数据中心之间的流量,支持
TCP
和UDP
协议。网关负载均衡器
允许全球范围内部署负载均衡实例,以实现高级别的容错和高可用性
简单小结一下:
CLB
适用于传统
的应用和网络架构ALB
适用于容器
和微服务架构
,并且提供更多的功能和灵活性NLB
适用于对性能
和稳定性
有高要求的应用场景,如游戏、实时通信和大规模传输GWLB
适用于连接VPC
和VPN
目标组(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 域名?
简介
负载均衡器
提供静态 IP
和DNS 域名
两种方式来让客户访问后端实例
。不同类型的负载均衡器
提供不尽相同:
ALB
和CLB
:提供一个静态 DNS 域名
来访问后端实例
NLB
和GWLB
:提供一个静态 IP 地址
和一个DNS 域名
来访问后端实例
,二选一
在使用负载均衡器
时,建议使用负载均衡器
提供的DNS 域名
,因为它可以自动解析到后端实例
的IP 地址
,从而在后端实例
发生变化时保持连续性
如果需要固定 IP 地址
来访问负载均衡器
,可以考虑使用Elastic IP(EIP)
来关联到负载均衡器
总结
ALB
和CLB
主要用于应用层
负载均衡,只生成DNS 域名
NLB
和GWLB
主要用于传输层
负载均衡,生成静态 IP 地址
和DNS 域名
Sticky Session
简介
Sticky Session(粘性会话)
,也称为Session Affinity(会话亲和性)
,是一种负载均衡器
的功能,用于确保用户的请求在一段时间内总是被路由到同一个后端实例
。通常情况下,负载均衡器
会根据一定的负载均衡算法
将请求分发给后端多个服务器,但在某些情况下,保持会话状态对于应用程序的正确运行是必要的
ELB
的Sticky Session
意味着当客户端第一次访问负载均衡器
并被分配到特定的后端实例
时,后续的请求会被定向到相同
的后端实例
,直到指定的会话过期或终止
功能
Sticky Session
主要用于处理有状态
的应用程序,因为有状态
应用在同一后端实例
上处理连续的请求可以确保应用的状态不会丢失
而对于无状态
的应用或可水平扩展
的应用,最好不要使用Sticky Session
,因为它会导致负载均衡器
无法充分利用实例
的能力,并可能导致一些实例过载
,而其他实例
处于空闲状态
ALB
和CLB
支持Sticky Session
,可以选择使用应用程序
生成的cookie
或自定义cookie
作为会话标识
自定义 cookie 命名
简介
通过自定义 cookie 名称
,可以更灵活地控制会话标识的生成和使用以及确保cookie
的唯一性
和安全性
,以满足特定应用程序的需求
如果选择自定义cookie
,需要指定一个唯一
的cookie 名称
,用于标识用户的会话。这样,ELB
会检查请求中是否包含该cookie
,然后根据cookie 值
将请求路由到相应的后端服务器,并保持这种路由关系一段时间
命名规则
自定义Cookie的命名规则并没有严格的固定要求,但在选择名称时,建议遵循以下几个准则:
- 唯一性:确保
自定义 Cookie 的名称
在应用程序中是唯一
的,避免与其他 Cookie
或系统保留的 Cookie 名称
冲突 - 安全性:避免使用过于明显或容易猜测的名称,以防止潜在的安全风险
- 简洁性:选择简短、易于理解的名称,以便在代码中使用和处理
- 字符限制:根据实际情况,确保选择的名称在不同的浏览器和系统中都能正常工作,并且不超过
Cookie 名称
的最大字符限制
注意:对于自定义Cookie
的命名规则,负载均衡器
不允许以特定的前缀开头,因此以ALB
、CLB
、AWSALB
、AWSCLB
开头的名称都不被允许,因为这些名称都会用于负载均衡器
默认生成的 cookie
SNI(Server Name Indication)
简介
在过去,TLS(Transport Layer Security)协议
只支持一个 IP 地址
对应一个证书
,这导致在一个服务器上托管多个域名
时,每个域名
都需要有独立的 IP 地址
和证书
SNI
是一种用于在TLS 协议
中指示服务器主机名的扩展,可以加载多个 SSL 证书
,从而负载均衡器
可以在一个监听器
上加载多个 SSL 证书
,因此能够同时为多个域名
提供安全的连接
功能
SNI
使同一个负载均衡器
上可以托管多个域名
,并使用不同的 SSL 证书
对它们进行保护,而无需为每个域名
都单独创建一个负载均衡器
。这样可以简化架构并降低成本