弹性伸缩

弹性伸缩（Autoscaling），是云计算中的一种常用方法，通过该方法，服务器池中的计算资源量（通常根据有效的服务器数量来衡量）会根据服务器池中的负载进行动态伸缩。 它与负载均衡紧密相关，并以此为基础。

优势

弹性伸缩具有如下优点：

 对于服务运行在自建机房的公司，弹性伸缩通常意味着允许一些服务器在低负载时进入睡眠状态，从而节省电费（以及用于冷却机器的水费和水费）。 
 对于使用在托管在云上的机房的公司而言，自动扩展可能意味着更低的费用，因为大多数云提供商都基于总使用量而不是最大容量进行收费。 
 即使对于不能在任何给定时间减少运行或支付的总计算能力的公司，它们也可以在低流量时降低服务器的负载。
 弹性伸缩解决方案（例如Amazon Web Services提供的解决方案）还可以用来替换异常状态的实例，从而在一定程度上防止硬件，网络和应用程序故障。
 在生产工作负载经常变化且不可预测的情况下，弹性伸缩可以提供更长的正常运行时间和更高的可用性。

弹性伸缩与每天，每周或每年固定的服务器使用周期不同，它可以响应实际的使用模式，从而减少了因流量负载而配置的服务器太少或太多的潜在弊端。例如，如果流量通常在午夜时分较低，则静态伸缩方案可能会将某些服务器安排在夜间休眠，但这可能会导致在用户碰巧在夜间需要使用服务时（例如由于病毒性传播的新闻）出现宕机。与之相度的，弹性伸缩可以更好地应对预期外的流量高峰。

术语

在下面的列表中，我们使用亚马逊云计算服务提供的术语. 但是我们会标注出术语的别名，并且不会使用特定于Amazon服务名称的术语。

实践

亚马逊云服务 (AWS)

亚马逊云计算服务在 2006 年 8 月启动了 亚马逊弹性计算云 (EC2)， 来允许开发人员编程启动和结束实例（机器）。 在最初启动时，AWS不提供自动缩放功能，但是通过编程方式创建和终止实例的能力使开发人员可以灵活地编写自己的代码以进行自动伸缩。

从 2008 年 4 月开始，AWS 的第三方弹性伸缩软件开始出现。 这其中包括 Scalr 和 RightScale。RightScale 被 Animoto 使用，从而能应对 Facebook 的流量伸缩。

2009年5月18日，作为Amazon Elastic Compute Cloud的一部分，Amazon 推出了自己的弹性伸缩功能以及 Elastic Load Balancing。 现在，自动缩放是Amazon EC2产品不可或缺的组成部分。 Amazon Web Services 上的自动缩放是通过Web浏览器或命令行工具完成的。 2016年5月，AWS ECS服务中也提供了自动伸缩功能。

视频点播提供商Netflix记录了他们在Amazon Web Services中使用自动缩放功能来满足其高度可变的消费者需求的情况。 他们发现积极地扩大规模，延迟和谨慎地缩小规模最能实现其正常运行时间和响应能力的目标。

在描述 TechCrunch 的文章中, Zev Laderman, Newvem（一个用来优化 AWS 云基础设施的服务） 的联合创始人， CEO 推荐说在项目起步阶段使用弹性伸缩是他们的花费保持在较低的水平。

各种适用于AWS的最佳实践指南都建议即使在负载不变的情况下也要使用其自动缩放功能。 这是因为自动缩放具有另外两个优点：自动替换由于任何原因（例如硬件故障，网络故障或应用程序错误）而变得不正常的任何实例。 并且自动替换因价格或容量原因而中断的竞价型实例，这使得将竞价型实例用于生产目的更加可行。 Netflix的内部最佳实践要求每个实例都在一个弹性伸缩组中，并且其一致性猴子（Netflix 内部的测试工具）会终止不在自动伸缩组中的所有实例，以实施此最佳做法。

微软的 Windows Azure

2013年6月27日， 微软 公布其 Windows Azure 云计算平台支持弹性伸缩功能。 文档可参考 微软开发者网络.

甲骨文云 
Oracle Cloud Platform 允许服务器实例通过定义自动扩展规则自动收缩或扩展集群。 这些顾泽主要利用 CPU 和内存的利用率来决定何时增加和删除节点。

谷歌云平台

2014年11月17日，Google Compute Engine 发布了贪生伸缩的 beta 版本试用功能。 As of March 2015, the autoscaling tool is still in Beta.

Facebook

在2014年8月的博客文章中，一位Facebook工程师透露，该公司已开始使用自动缩放功能以降低能源成本。 博客文章报道了在低流量时间（午夜左右）能耗下降了27％，在典型的24小时周期内能耗下降了10-15％。

Kubernetes 水平 Pod 伸缩器
Kubernetes Horizontal Pod Autoscaler 自动的调整  pods 在 replication controller , deployment  或 replicaset  中的数量。 调整主要基于对 CPU 的监控(其 beta 版也可以监控其他一些指标 application-provided metrics )

可选的弹性伸缩决策方案

默认情况下，自动缩放使用``被动''决策方法来处理流量缩放：缩放仅响应于度量标准的实时更改而发生，在某些情况下，特别是当更改发生得很快时，这种被动缩放方法是不够的。 下面介绍了另外两种自动缩放决策方法。

按计划扩展方案 

这是一种自动缩放的方法，其中在一天的特定时间更改自动缩放组的最小大小，最大大小或所需容量。例如，如果已知流量负载在 一天中的特定时间，但是更改太突然了，以至于基于响应式方法的自动缩放无法足够快速地响应.AWS自动缩放组支持计划的缩放。

预测性弹性伸缩 
这种自动缩放方法使用predictive Analytics，其想法是将最近的使用趋势与历史使用数据以及其他类型的数据结合起来，以预测将来的使用情况，并根据这些预测进行自动缩放。

Netflix发现，对于部分基础架构和特定的工作负载，其预测分析引擎Scryer比Amazon的反应式自动缩放方法提供了更好的结果。它特别适合以下场景：

在不久的将来识别需求的巨大峰值，并提前一点准备好产能
处理大规模中断，例如整个可用区和区域的故障
处理可变的流量模式，根据一天中不同时间的典型需求水平和变化率，在横向扩展或纵向扩展速率上提供更大的灵活性

在2018年11月20日，AWS宣布将在其自动扩展产品中提供预测扩展功能。

其他

 Cloud computing
 Load balancing
 Amazon Web Services
 Auto Scaling with Docker

参考链接

雲端運算