COST09-BP03 动态供应资源 - AWS Well-Architected Framework

COST09-BP03 动态供应资源

资源按计划预置。这种预置可以基于需求(例如通过自动扩缩来实现),也可以基于时间(需求可以预测,基于时间提供资源)。这些方法可以尽可能减少过度预置或预置不足的情况。

未建立这种最佳实践的情况下暴露的风险等级:

实施指导

AWS 客户可以通过多种方式增加可供应用程序使用的资源,并提供资源以满足需求。其中一个选项是使用 AWS Instance Scheduler,其可以自动启动和停止 Amazon Elastic Compute Cloud(Amazon EC2)以及 Amazon Relational Database Service(Amazon RDS)实例。另一个选项是使用 AWS Auto Scaling,该服务让您可以根据应用程序或服务的需求,自动扩展计算资源。根据需求提供资源,这样您就只需要为使用的资源付费,并且仅在有需要时启动资源,在不需要时终止资源,从而降低成本。

AWS Instance Scheduler 让您可以将 Amazon EC2 和 Amazon RDS 实例配置为在指定的时间停止和启动,这样您就可以通过一致的时间模式满足对相同资源的需求,例如用户在每天早上八点访问 Amazon EC2 实例,晚上六点后就不再需要访问。该解决方案可停止不使用的资源,并在需要时启动它们,来实现运营成本的降低。

显示使用 AWS Instance Scheduler 优化成本的图。

使用 AWS Instance Scheduler 优化成本。

您还可以通过简单的用户界面(UI)使用 AWS Systems Manager 快速设置,轻松地跨账户和区域来为您的 Amazon EC2 实例配置计划。您可以使用 AWS Instance Scheduler 来调度 Amazon EC2 或 Amazon RDS 实例,也可以停止和启动现有实例。然而,您不能停止和启动属于Auto Scaling组(ASG)或管理 Amazon Redshift 或 Amazon OpenSearch Service 等服务的实例。Auto Scaling组对组内创建的实例有自己的计划。

AWS Auto Scaling 有助于您调整容量以维持稳定、可预测的性能,并确保成本最低,来满足不断变化的需求。这是一项用来扩展应用程序容量的完全托管式免费服务,与 Amazon EC2 实例和竞价型实例集、Amazon ECS、Amazon DynamoDB 和 Amazon Aurora 集成。Auto Scaling提供自动资源发现功能,以便您在工作负载中找到可以配置的资源,其具有内置的扩展策略来优化性能、成本或者在两者之间取得平衡,并提供预测性扩展来协助应对定期出现的峰值。

您可以通过多种扩展选项来扩展Auto Scaling组:

  • 始终保持当前的实例水平

  • 手动扩展

  • 根据计划扩展

  • 根据需求扩展

  • 使用预测性扩缩

Auto Scaling策略各不相同,可以分为动态扩缩策略和计划扩缩策略。动态策略为手动扩缩或动态扩缩,这可以是计划扩缩或者预测性扩缩。您可以针对动态、计划和预测性扩缩使用扩缩策略。您还可以使用来自 Amazon CloudWatch 的指标和警报触发工作负载的扩缩事件。我们建议您使用 启动模板,这可让您访问最新的功能和改进。使用启动配置时,并非所有Auto Scaling功能均可用。例如,您不能创建一个Auto Scaling组,然后在其中同时启动竞价型实例和按需型实例,也不能指定多种实例类型。这些功能必须使用启动模板来配置。使用启动模板时,建议您对每个模板进行版本控制。通过启动模板的版本控制,您可以创建完整参数集的子集。然后,您可以重复使用参数子集来创建相同启动模板的其他版本。

您可以使用 AWS Auto Scaling,也可以通过 AWS API 或 SDK在代码中纳入扩缩功能。这样省去了手动更改环境的操作成本,因而工作负载的总体成本得以降低,而且可以更快地执行更改。这还使您的工作负载资源配置随时与您的需求相匹配。为了遵循这一最佳实践,并为您的组织动态供应资源,您应该了解 AWS Cloud 中的横向和纵向扩展,以及 Amazon EC2 实例上运行的应用程序的性质。您的云财务管理团队最好与技术团队合作,以遵循这一最佳实践。

Elastic Load Balancing(Elastic Load Balancing) 通过在多种资源之间分配需求来助力您扩展规模。通过使用 ASG 和Elastic Load Balancing,您可以按照最优方式路由流量来管理传入的请求,这样就可以避免Auto Scaling组中某个实例负载过高的情况。请求将以轮询方式,在目标组的所有目标上分配,而不考虑容量或利用率。

典型的指标可以是标准 Amazon EC2 指标,例如 CPU 利用率、网络吞吐量以及 Elastic Load Balancing 观察到的请求和响应延迟。如果可能,应该使用指示客户体验的指标,通常是来自工作负载中的应用程序代码的自定义指标。在本文档中,为了详细说明如何动态满足需求,我们将Auto Scaling划分为两类:基于需求的供应模型和基于时间的供应模型,并分别深入探讨这两种模型。

基于需求的供应: 利用云的弹性来提供资源,根据近实时的需求状态来满足不断变化的需求。对于基于需求的供应,请使用 API 或服务功能,以编程方式改变架构中云资源的数量。这使您能够在架构中扩展组件,并在需求高峰期间增加资源数量以保持性能,也可以在需求量降低时减少容量以降低成本。

图中描述了基于需求的扩缩策略,例如简单/分步扩展和目标跟踪。

基于需求的动态扩缩策略

  • 简单/分步扩展: 监控指标,按照客户定义的步骤手动添加/删除实例。

  • 目标跟踪: 类似恒温器的控制机制,可自动添加或删除实例,以维护客户定义的目标指标。

当构建基于需求的方法时,请注意两个重要事项。首先,了解您必须以多快的速度预置新资源。其次,了解供应和需求之间的差额将发生变化。您必须准备好应对需求变化的速度,并准备好应对资源故障。

基于时间的供应: 基于时间的方法可以协调资源容量以满足可预测或时间明确定义的需求。此方法通常不依赖资源的利用水平。基于时间的方法可以确保资源在需要的特定时间可用,并且提供时不会因启动流程和系统或一致性检查而发生延迟。使用基于时间的方法,您可以在繁忙时段提供额外的资源或增加容量。

图中描述了基于时间的扩缩策略,例如计划扩缩和预测性扩缩。

基于时间的扩缩策略

您可以使用计划性或预测性自动扩缩,实施基于时间的方法。工作负载可以在定义的时间按计划扩展或缩减(例如办公时间开始时),从而确保用户就位或需求增加时资源可用。预测性扩缩使用模式进行横向扩展,而计划扩展在预先定义的时间进行横向扩展。您也可以将 基于属性的实例类型选择(ABS)策略 用于Auto Scaling组,该策略允许您将实例要求表示为一组属性,例如 vCPU、内存和存储。这还允许您在新一代实例类型发布时自动使用它们,并通过 Amazon EC2 竞价型实例访问更广泛的容量。Amazon EC2 实例集和 Amazon EC2 Auto Scaling 会选择并启动符合指定属性的实例,无需手动选择实例类型。

您还可以利用 AWS API 与 SDKAWS CloudFormation 在需要时自动预置和停用整个环境。此方法非常适合仅在定义的办公时间或时间段运行的开发或测试环境。您可以使用 API 来扩展环境中的资源大小(纵向扩展)。例如,可以通过更改实例大小或分类纵向扩展生产工作负载。这可以通过停止和启动实例,以及选择不同的实例大小或分类来实现。这种技巧也可以应用于其他资源,如 Amazon EBS 弹性卷,您可以在使用时对其进行修改以增加大小、调整性能(IOPS)或更改卷类型。

当采用基于时间的方法进行架构设计时,请注意两个重要事项。首先,使用模式的一致性如何? 其次,如果模式发生更改会产生什么影响? 您可以通过两种方式提高预测的准确性:监控工作负载和使用商业智能。如果您发现使用模式发生重大更改,可以调整时间,以确保提供覆盖范围。

实施步骤

  • 配置计划扩缩: 对于可预测的需求变化,基于时间的扩缩可以及时提供正确的资源量。如果资源创建和配置的速度不够快,无法响应需求变化,也可使用这种方法。根据工作负载分析,使用 AWS Auto Scaling 配置计划扩缩。要配置基于时间的计划,您可以使用预测性扩缩而不是计划扩缩,根据预期或可预测的负载变化,提前增加Auto Scaling组中的 Amazon EC2 实例数量。

  • 配置预测性扩缩: 通过预测性扩缩,您可以根据流量的每日和每周模式,提前增加Auto Scaling组中的 Amazon EC2 实例数量。如果您有定期的流量高峰和需要很长时间才能启动的应用程序,则应该考虑使用预测性扩缩。与本质上属于被动应对的单纯动态扩缩相比,预测性扩缩可帮助您在预测的负载到来之前初始化容量,从而更快地扩展。例如,如果用户在开始上班时开始使用工作负载,而在下班后不再使用,那么预测性扩缩可以在上班之前增加容量,这就消除了动态扩缩对流量变化作出反应的延迟。

  • 配置动态自动扩缩: 要根据活动的工作负载指标配置扩缩,请使用Auto Scaling。使用分析并配置Auto Scaling以在正确的资源级别上启动,并确认工作负载在所需的时间内扩展。您可以在单个Auto Scaling组中启动并自动扩展按需型实例和竞价型实例的实例集。除了获得使用竞价型实例的折扣外,您还可以使用预留实例或实惠配套来享受常规按需型实例定价的折扣率。将所有这些因素相结合,有助于您优化 Amazon EC2 实例的成本节约,并帮助您获得应用程序所需的规模和性能。

资源

相关文档:

相关视频:

相关示例: