使用负载均衡器容量单位预留为流量急剧增加做好准备

作者: Petar Staev, 乔恩·佐布里斯特 |

导言

在本文中,我们将探讨应用程序和网络负载均衡器(ALB 和 NLB)的新负载均衡器容量单位预留(LCU 预留)功能。它使您可以为计划中的活动(例如新产品发布、销售、流量迁移等)导致的流量急剧增加做好准备。弹性负载均衡器 (ELB) 可自动扩展以支持几乎任何工作负载。当我们谈论扩展时,我们实际上是在谈论两件事:扩展速度和总体扩展容量。LCU 预留功能与费率有关,有关总体容量的信息,请查看这篇关于使用大型工作负载扩展 ELB 的文章。在这里,我们将介绍该功能是什么以及如何使用它,并分享您可以采取的后续步骤来开始使用 LCU Reservation!

在 LCU 预留功能推出之前,我们为用户提供了开启支持案例的能力,让他们能够主动扩展负载均衡器,为事件做准备,也称为 "预热" 负载均衡器。现在,LCU Reservation 允许用户直接预留负载均衡器的容量,而无需提交支持案例。

为了更好地了解您可能想在何时以何种方式使用 LCU 预订,我们将介绍 ELB 产品是如何动态扩展的。ELB 产品的底层基础设施设计和扩展使用两种不同的扩展系统:一个用于 ALB,另一个用于 NLB。如果您已经熟悉 ELB 扩展系统策略,则可以直接跳至 LCU 预留部分。

ELB 扩展

ALB 和 NLB 都根据检测到的流量进行反应性扩展,但各自使用不同的维度。ALB 可根据流量的各个维度进行扩展,包括带宽、连接速率和并发性,以及您正在使用的 Amazon WAF 或 Amazon Lambda 等功能所需的任何额外处理费用。另一方面,NLB 在带宽的各个维度上都可以扩展。

对于 ALB 和 NLB,LCU 预留仅影响配置的最低容量。它不会、也不能阻止或阻碍超出您要求的进一步扩展。因此,如果您设置了容量并注意到负载均衡器仍在扩展,那么不用担心,由扩展系统来处理您的工作负载。

ALB 和 NLB 的扩展速率不同,因为它们建立在不同的技术之上。在下一节中,我们将简要介绍每种产品的细节。

ALB 扩展

ALB 可以扩展以适应几乎任何工作负载,但在某些情况下,我们建议通过多个负载均衡器分配流量,以缩小爆炸半径。这个过程叫做 ELB 分片,你可以在亚马逊云科技的帖子《弹性负载平衡的扩展策略》中找到更多信息。

ALB 可自动扩展以适应当前的工作负载,并积极向上/向外扩展,而向下/向内扩展是保守的。对于较小的工作负载,ALB 通过使用更大容量的节点(向上扩展)进行扩展,对于较大的工作负载,通过添加更多节点进行并行工作(横向扩展)来实现扩展。

您可以期望 ALB 能够在五分钟内扩大规模,支持将工作量增加一倍。例如,处理 1 Gbps 流量的 ALB 可以在五分钟内增加到 2 Gbps,然后在接下来的五分钟内增加到 4 Gbps,依此类推。这也适用于流量的其他方面,例如新连接的速率和并发连接的总数。

NLB 缩放

NLB 可以扩展以适应大多数工作负载。但是,在极少数情况下,特定的工作负载可能需要分散在多个负载均衡器上。如前所述,这被称为 ELB 分片,您可以在亚马逊云科技帖子《弹性负载均衡的扩展策略》中找到更多信息。

与 ALB 相比,NLB 缩放系统的工作方式有所不同。NLB 由每个选定子网/可用区 (AZ) 的单个独立的 Hyplane 弹性网络接口 (ENI) 组成,该接口在后台由多个独立的高容量节点支持。与 ALB 相比,这些 ENI 的 IP 可以保持静态状态,并且通过不更改 IP,扩展活动对客户端来说是透明的。

NLB 根据带宽的各个维度进行扩展,为您的工作负载精确配置必要的容量。您的 NLB 起初容量为 3 Gbps,然后以每分钟增加 3 Gbps 的速度向上扩展。

什么是 LCU 预订?

如前一节所述,ELB 扩展系统旨在快速响应工作负载的变化,以提供足够的容量来应对大多数情况的增长。但是,在某些情况下,较大的流量峰值可能会使流量增长速度快于建议的增长率。针对这些案例实施了 LCU 预订功能。

LCU Reservation 是一种主动机制,可以提前扩展您的 ELB,为季节性活动、活动门票销售、新产品/功能发布或热门节目的新剧集发行等活动做准备。LCU Reservation 与我们在上一节中描述的 ELB 反应式扩展系统并行运行,可为您的工作负载提供足够的容量。

带有 TCP 和/或 UDP 监听器的 ALB 和 NLB 支持此新功能。

除了为单个事件做准备外,LCU Reservation 还可用于为无法预测流量峰值的用例提供恒定的最低容量。我们推荐的方法是使用 ELB 分片。

它是如何工作的?

LCU 预留功能允许您为负载均衡器设置最低容量,并在预期峰值之前将请求的容量分配给负载均衡器。配置最低容量后,扩展系统会根据实际流量继续增加或减少您的负载均衡器的容量。这些扩展活动不会将容量减少到您指定的最低容量以下。

估算容量

AWS 控制台中 ELB 的

图 1:带有使用图的 LCU 预订面板

为了简化 ALB 的估算流程,亚马逊云科技管理控制台显示了一个名为 "PeakLCUS" 的新指标(图 1),而对于 NLB,它提供了 LCU 使用情况图表,将现有的 ProcessedBytes 指标转换为每小时 LCU 值。PeakLCUS 指标考虑了您的流量模式中的峰值,负载均衡器必须在所有扩展维度上扩展以支持您的工作负载。这两个指标显示了给定时间段内负载均衡器的使用情况。如果您希望重复相同的工作负载/事件,则这些值可以直接用作 LCU 预留字段的输入。

确定要预置多少容量的最简单方法是通过控制台。如果你已经在 ALB 或 NLB 上有工作负载,那么你可以使用他们在负载相似时期的指标,也可以使用乘数来计算你预期的流量。
您还可以在亚马逊云观察控制台中使用这些指标。对于 ALB,您可以查看该时段内一分钟 PeakLCUS 的总和,并使用最高值,也可以使用以下公式计算一小时数据点:PeakLCUS(最大值)*(PeakLCUS(样本数)* 60 /周期(PeakLCUS)),乘以此事件的预期增长规模。例如,如果您预计负载会增加五倍,则将其乘以五。

对于 NLB,LCU 使用率指标分两步推导出来。第一步是将流量转换为以兆比特每秒 (Mbps) 为单位的速率。这可以通过使用以下公式将 processedBytes 指标转换为速率来实现:处理字节(每分钟)* 8/60/(10^6)。第二步是将结果值除以 2.2。2.2 (Mbps) 等于在一小时内传输的 1 GB,等于一个 LCU。

计算所需容量的优秀方法是在负载均衡器上执行负载测试,并使用生成的 PeakLCUS (ALB) 或 ProcessedBytes (NLB) 指标和上述公式。

我们建议不要使用 "ConsumeDLCUS" 指标来计算容量,因为它仅用于计费目的,只能使用前面讨论的指标来估算容量。

要了解更多信息,请参阅 ALB 文档和 NLB 文档。

如何设置 LCU 预订?

您可以使用控制台或亚马逊云科技命令行接口 (亚马逊云科技 CLI) 设置 LCU 预留。

在控制台中,您可以选择负载均衡器并打开新的容量选项卡。在这个新部分中,您可以看到有关所选负载均衡器及其 LCU 预留的相关信息。然后,选择编辑 LCU 预留按钮,如图 2 所示。

在 ELB 的 AWS 控制台的

图 2:"容量" 选项卡中的 "编辑 LCU 预留" 按钮

这将带您进入 "编辑 LCU 预留量" 菜单(图 3),您可以在其中选择使用基于历史参考的估算值还是手动估算。在此示例中,我使用了基于历史参考的估算值,这使我能够查看上一次活动期间的 PeakLCUS。然后,我使用该指标作为参考,为下一次活动做准备。

编辑 LCU 预留时,用户可以选择引用过去的事件或手动估计预期流量。

图 3:红色的 PeakLCUS 使用情况图,预留 LCU 显示为绿色

要了解更多信息,请参阅 ALB 文档和 NLB 文档。

亚马逊云科技 CLI
[ALB/NLB] aws elbv2 修改容量预留 --负载均衡器-arn
<ALB/NLB ARN> --最低负载均衡器容量 capacityUnits=267

输出 ALB

{
    "CapacityReservationState": [
        {
            "AvailabilityZone": "us-east-1a",
            "State": {
                "Code": "pending"
            }
        },
        {
            "AvailabilityZone": "us-east-1b",
            "State": {
                "Code": "pending"
            }
        },
        {
            "AvailabilityZone": "us-east-1c",
            "State": {
                "Code": "pending"
            }
        }
    ],
    "DecreaseRequestsRemaining": 2,
    "LastModifiedTime": "2024-11-13T23:58:08.613000+00:00",
    "MinimumLoadBalancerCapacity": {
        "CapacityUnits": 267
    }
}
JSON

输出 NLB

{
    "CapacityReservationState": [
        {
            "AvailabilityZone": "eu-north-1a",
            "State": {
                "Code": "pending"
            }
        },
        {
            "AvailabilityZone": "eu-north-1b",
            "State": {
                "Code": "pending"
            }
        },
        {
            "AvailabilityZone": "eu-north-1c",
            "State": {
                "Code": "pending"
            }
        }
    ],
    "DecreaseRequestsRemaining": 2,
    "LastModifiedTime": "2024-11-13T23:32:55.002000+00:00",
    "MinimumLoadBalancerCapacity": {
        "CapacityUnits": 9000
    }
}
JSON

如何知道预留容量何时可以使用?

您可以使用控制台或亚马逊云科技 CLI 找到预留容量何时可以使用。

在控制台中,您可以选择负载均衡器并打开新的容量选项卡。在预留状态中,您可以看到我们的请求已成功完成并处于 "已配置" 状态,如图 4 所示。

适用于 ELB 的 AWS 控制台中的

图 4:"容量" 选项卡中显示的 LCU 预留状态

要了解更多信息,请参阅 ALB 文档和 NLB 文档。

亚马逊云科技 CLI
[ALB/NLB] aws elbv2 描述容量预留 --load-balancer-arn
<ALB/NLB ARN>

输出 ALB

{
    "CapacityReservationState": [
        {
            "AvailabilityZone": "us-east-1a",
            "EffectiveCapacityUnits": 89.0,
            "State": {
                "Code": "provisioned"
            }
        },
        {
            "AvailabilityZone": "us-east-1b",
            "EffectiveCapacityUnits": 89.0,
            "State": {
                "Code": "provisioned"
            }
        },
        {
            "AvailabilityZone": "us-east-1c",
            "EffectiveCapacityUnits": 89.0,
            "State": {
                "Code": "provisioned"
            }
        }
    ],
    "DecreaseRequestsRemaining": 2,
    "LastModifiedTime": "2024-11-13T23:53:04.690000+00:00",
    "MinimumLoadBalancerCapacity": {
        "CapacityUnits": 267
    }
}
JSON

输出 NLB

{
    "CapacityReservationState": [
        {
            "AvailabilityZone": "eu-north-1a",
            "EffectiveCapacityUnits": 3000.0,
            "State": {
                "Code": "provisioned"
            }
        },
        {
            "AvailabilityZone": "eu-north-1b",
            "EffectiveCapacityUnits": 3000.0,
            "State": {
                "Code": "provisioned"
            }
        },
        {
            "AvailabilityZone": "eu-north-1c",
            "EffectiveCapacityUnits": 3000.0,
            "State": {
                "Code": "provisioned"
            }
        }
    ],
    "DecreaseRequestsRemaining": 2,
    "LastModifiedTime": "2024-11-13T23:32:55.002000+00:00",
    "MinimumLoadBalancerCapacity": {
        "CapacityUnits": 9000
    }
}
JSON

如何删除 LCU 预留?

您可以使用控制台或亚马逊云科技 CLI 删除 LCU 预留。

在控制台中,您可以选择负载均衡器,然后打开新的容量选项卡。当您有有效的 LCU 预留后,您可以使用 "取消容量" 按钮取消预留,如图 5 所示。
图 5:设置 LCU 预留后,取消容量按钮可用

要了解更多信息,请参阅 ALB 文档和 NLB 文档。

亚马逊云科技 CLI
[ALB/NLB] aws elbv2 修改容量预留 --load-balancer-arn
<ALB/NLB ARN> --重置容量预留

输出 ALB

{
    "CapacityReservationState": [
        {
            "AvailabilityZone": "us-east-1a",
            "State": {
                "Code": "pending"
            }
        },
        {
            "AvailabilityZone": "us-east-1b",
            "State": {
                "Code": "pending"
            }
        },
        {
            "AvailabilityZone": "us-east-1c",
            "State": {
                "Code": "pending"
            }
        }
    ],
    "DecreaseRequestsRemaining": 1,
    "LastModifiedTime": "2024-11-13T23:58:08.613000+00:00",
    "MinimumLoadBalancerCapacity": {
        "CapacityUnits": 0
    }
}
JSON

输出 NLB

{
    "CapacityReservationState": [
        {
            "AvailabilityZone": "eu-north-1a",
            "State": {
                "Code": "pending"
            }
        },
        {
            "AvailabilityZone": "eu-north-1b",
            "State": {
                "Code": "pending"
            }
        },
        {
            "AvailabilityZone": "eu-north-1c",
            "State": {
                "Code": "pending"
            }
        }
    ],
    "DecreaseRequestsRemaining": 1,
    "LastModifiedTime": "2024-11-13T23:58:08.613000+00:00",
    "MinimumLoadBalancerCapacity": {
        "CapacityUnits": 0
    }
}
JSON

注意事项

  • 当您知道流量增长的速度可能超过扩展系统的反应速度时,LCU 预留功能旨在在短时间内使用。我们希望您将其设置为短时段,例如几个小时,偶尔设置为更长的时间,例如几天。
  • 对于使用量激增不可预测的用例,分片可能是一种更合适、更具成本效益的长期策略。使用多个负载均衡器分配传入的工作负载有助于将总流量的一小部分分配给每个负载均衡器。这种方法还受益于拥有多个负载均衡器的并行扩展能力。
  • LCU 预留按预留容量计费。例如,如果您为一小时预置 100 个 LCU,并在该小时内持续使用 120 个 LCU,则按标准 LCU 定价收取 20 个 LCU,按预留 LCU 定价收取 100 个 LCU。
  • LCU 预留容量是在区域层面预留的,并且在各可用区之间均匀分布。我们建议在每个可用区中配置相同数量的目标,并确保没有未注册目标的可用区。
  • 使用 LCU 预留时,您始终在负载均衡器级别进行配置,ELB 系统会在所有活动可用区之间均匀地预置所需的容量。没有任何注册目标的可用区不包含在配置过程中。但是,ELB 系统仍会在其余可用区中预置足够的容量以完全满足您的请求。
  • 在负载均衡器上设置 LCU 预留后,将预置更多专用于您的负载均衡器的容量。预置的容量按预留 LCU 费率收费。因此,您必须进行准确的容量估计,并在活动结束后或不再需要时移除预置容量。
  • LCU 预留可用于因合同义务/SLA/政策要求而需要永久最低容量才能使用的用例。但是,如果大量容量不会被大量使用,则应提前估算成本。

结论

LCU 预留是一项令人兴奋的新功能,它使用户可以更好地控制其负载均衡器的最低容量。它可用于主动增加容量,以应对突然出现的大量流量,这些流量通常与季节性活动、促销活动或推出新产品/功能有关。

LCU 预留与 ELB 扩展系统并行运行。建议了解动态缩放并将其与 LCU 预留相结合,以实现优秀用途。

在设置 LCU 预留期间,ELB 会根据需要继续增加容量,但其减少的容量不会低于预留 LCU。

我们建议您查看亚马逊云科技的文章《Elastic Load Balancing 的扩展策略》,以更好地了解何时分片可能是更合适的选择。

作者简介

Petar Staev

Petar Staev

Petar Staev 是亚马逊云科技的高级客户成功工程师,在都柏林的应用程序网络团队工作。他专门研究网络,帮助客户设计高可用性和弹性的架构。在空闲时间,他喜欢修改自己的智能家居自动化项目或玩电子游戏。

乔恩·佐布里斯特

乔恩·佐布里斯特

Jon Zobrist 是应用网络客户成功负责人,常驻西雅图,在那里他为客户及其支持人员提供帮助。他喜欢与人们一起解决复杂的问题。在业余时间,他和他的许多猫狗一起出去玩。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。