在云上自动缩放

已完成

云管理员可以手动执行纵向扩展和横向扩展来应对增加的需求,以及通过缩小或减少来降低成本。 例如,警醒的管理员可以检测到需求的增长,并使用云服务提供商提供的工具来使其他 VM 联机(横向扩展)或使用更大的 VM(具有更多 CPU 和更多内存)替换现有 VM(纵向扩展)。 关键在于“警醒”。如果需求达到高峰但无人知晓,则整个系统对于最终用户而言可能会变慢,甚至无响应。 相反,如果通过纵向扩展或横向扩展来处理较重的负载,但在负载降低时无法相应缩减,则最终将为不需要的资源付费。

这就是为什么常用的云平台提供自动缩放机制来缩放资源,从而响应波动的需求而无需人工干预的原因。 自动缩放有两种主要方法:

  • 基于时间:按预先确定的计划缩放资源。 例如,如果组织的网站在工作时间内承受最高负载,请配置自动缩放,以使资源在每天早上 8 点纵向扩展或横向扩展,然后在每天下午 5 点纵向缩减或横向缩减。 基于时间的缩放有时称为计划缩放

  • 基于指标:如果负载难以预测,请根据预定义指标(例如 CPU 利用率、内存压力或平均请求等待时间)缩放资源。 例如,如果平均 CPU 利用率达到 70%,则自动使其他 VM 联机,而当其恢复到 30% 时,请取消预配额外的 VM。

无论选择基于时间还是基于指标或同时基于两者来进行缩放,自动缩放都依赖于云管理员配置的缩放规则缩放策略。 新式云平台支持各种缩放规则,从简单的每天早上 8 点从 2 个实例缩放为 4 个实例,并在下午 5 点恢复为 2 个实例,到复杂的在最高 CPU 利用率超过 70% 或平均请求等待时间达到 5 秒将 VM 计数加 1。 找到正确的规则组合通常需要云管理员进行一些试验。

所有主要云服务提供商(包括 Amazon、Microsoft 和 Google)都支持自动缩放。 AWS Auto Scaling 可应用于 EC2 实例、DynamoDB 表和选定的其他 AWS 云服务。 Azure 为关键服务(包括应用服务和虚拟机)提供自动缩放选项。 Google 对 Google Compute Engine 和 Google App Engine 提供相同的选项。

一般而言,自动缩放服务会缩小和横向扩展,而不是纵向扩展或减少,部分原因在于纵向扩展或减少需要将一个实例替换为另一个实例,并且在创建新实例并将其联机的过程中不可避免地会出现一段停机时间。

基于时间的自动缩放

当负载以可预测的方式波动时,基于时间的自动缩放是合适的选项。 例如,许多组织的 IT 系统在工作时间内会承受最高负载,而在凌晨时分则很少甚至没有负载。 Domino's Pizza 的网站可能会在一天中的所有时段承受大量负载,因为它在近 100 个国家/地区运营 16,000 多家门店。 但可以预测的是,其会在一年中的特定时间承受高于正常水平的负载。

两种方案都适合基于时间的自动缩放。 图 7 显示计划自动缩放如何在 Azure 中进行。 在此示例中,云管理员将托管组织网站的 Azure 应用服务配置为默认运行两个实例,但在上午 6 点到下午 6 点之间纵向扩展为 4 个实例,一周六天,星期天除外。 通过改为选择“指定开始/结束日期”选项,管理员可以轻松地将应用服务配置为在超级碗星期天横向扩展为 10 个实例。 她还可以定义多个缩放条件,以便在其他日期也进行横向扩展。

图 7:Azure 中的计划自动缩放。

图 7:Azure 中的计划自动缩放。

基于指标的自动缩放

当负载难以预测时,基于 CPU 利用率和平均请求等待时间等指标进行缩放是合适选项。 监视是根据性能指标有效自动缩放资源的关键元素,因为它使得自动缩放程序知道何时缩放。 监视让用户能够分析流量模式或资源利用率,以便就缩放资源的时间和数量进行知情评估,从而在最大程度降低成本的同时最大限度提高服务质量。

若要触发资源缩放,需要监视资源的多个方面。 最常见的指标是资源利用率。 例如,监视服务可以跟踪每个资源节点的 CPU 利用率,并在利用率过高或过低时缩放资源。 例如,如果每个资源的使用率都超过 90%,则添加更多资源可能是个好主意,因为系统负载过高。 服务提供商通常通过分析资源节点的中断点、何时开始出现故障,并在各种负载水平下绘制其行为来决定这些触发点。 尽管出于成本原因,最大程度地利用每个资源很重要,但建议为操作系统留出一些空间以允许进行开销活动。 同样,如果利用率低于 30%,则可能并非所有资源节点都是必需的,且某些资源节点可以取消预配。

在实践中,服务提供商通常监视资源节点的多个不同指标的组合,以评估何时缩放资源。 其中一些指标包括 CPU 利用率、内存消耗、吞吐量和延迟。 AWS 使用 CloudWatch 监视 EC2 资源并提供缩放指标(图 8)。 CloudWatch 会跟踪缩放组中所有 EC2 实例的指标,并在指定指标超出阈值时(例如,当 CPU 利用率超过 70% 时)发出警报。 然后,AWS 会根据管理员配置的缩放策略增加或减少 EC2 实例。

图 8:在 AWS 中自动缩放 EC2 实例。

图 8:在 AWS 中自动缩放 EC2 实例。

AWS 还支持预测性缩放,该功能使用机器学习来预测流量模式并相应地管理实例计数。 目标是智能缩放云资源,而无需云管理员配置自动缩放规则。 主要云服务提供商一直在寻找通过机器学习来改进其平台的新方法。 例如,Microsoft 现在通过主动预测和减少 VM 故障1,使用机器学习来提高 Azure 虚拟机的弹性。

参考

  1. Microsoft (2018)。 通过预测性 ML 和实时迁移提高 Azure 虚拟机的弹性https://azure.microsoft.com/blog/improving-azure-virtual-machine-resiliency-with-predictive-ml-and-live-migration/