对于 Amazon Web Services 上极短的流量峰值,正确的 Cloudwatch/Autoscale 设置是啥?

Posted

技术标签:

【中文标题】对于 Amazon Web Services 上极短的流量峰值,正确的 Cloudwatch/Autoscale 设置是啥?【英文标题】:What's the correct Cloudwatch/Autoscale settings for extremely short traffic spikes on Amazon Web Services?对于 Amazon Web Services 上极短的流量峰值,正确的 Cloudwatch/Autoscale 设置是什么? 【发布时间】:2012-06-24 18:34:24 【问题描述】:

我有一个网站在亚马逊弹性豆茎上运行,流量模式如下:

大约 50 个并发用户正常。 在 Facebook 页面发帖时,约 2000 个并发用户 1/2 分钟。

Amazon 网络服务声称能够快速扩展以应对此类挑战,但 cloudwatch 的“大于 x 超过 1 分钟”设置对于这种流量模式似乎不够快?

通常在几秒钟内所有 ec2 实例崩溃,杀死所有 cloudwatch 指标,整个站点停机 4/6 分钟。到目前为止,我还没有找到适用于这种情况的配置。

以下是一个较小的事件的图表,该事件也导致该网站死亡:

【问题讨论】:

该图显示了 200 个连续用户 2 分钟的围攻测试。这是一个典型的长度,但大约是发布链接时流量的 20%。 如果你扩展,你将被收取一小时的费用,即使可以快速扩展(使用准备服务的 ami)卷起一堆按需服务器来丢弃它们十分钟后是一个昂贵的动作 【参考方案1】:

AWS 的建议如下:

我们一直在努力使我们的系统更具响应性,但它​​是 通过响应自动配置虚拟服务器具有挑战性 您的用例似乎需要几秒钟的时间。可能 有一种解决方法可以更快地响应或更多 当请求开始增加时有弹性。

您是否观察过如果您使用更大的 是实例类型还是大量实例处于稳定状态? 这可能是一种适应入站快速增长的方法 要求。虽然我承认它可能不是最划算的, 您可能会发现这是一个快速解决方案。

另一种方法可能是调整警报以使用阈值或 反映(或预测)您的需求更快增长的指标。 例如,如果您将闹钟设置为 在超过 75 或 100 个用户后添加实例。你可能已经是 这样做。除此之外,您的用例可能还有另一个指标 预测需求增加,例如在您的 Facebook 页面可能会在请求显着增加几个 几秒钟甚至一分钟。使用 CloudWatch 自定义指标进行监控 该值,然后将警报设置为自动缩放也可能是 潜在的解决方案。

所以我认为最好的答案是以较低的流量运行更多实例,并使用自定义指标来预测来自外部来源的流量。例如,我将尝试监控 Facebook 和 Twitter 以查找带有网站链接的帖子并立即扩大规模。

【讨论】:

【参考方案2】:

这些链接的发布是否可以预见?如果是这样,您可以使用 Scaling by Schedule 或作为替代方案,您可以更改 Auto Scaling Group 的 DESIRED-CAPACITY 值,甚至触发 as-execute-policy 在发布链接之前直接向外扩展。

您知道您可以在一个组中拥有多个扩展策略吗?因此,您可能有针对您的案例的特殊 Auto Scaling 策略,例如 SCALE_OUT_HIGH,它会同时增加 10 个实例。看看as-put-scaling-policy 命令。

此外,您需要检查您的代码并找到瓶颈。

您使用什么 HTTPD?考虑切换到 nginx,因为它比 Apache 更快且资源消耗更少的软件。尝试使用 Memcache... 像 Redis 这样的 NoSQL 用于高读写也是不错的选择。

【讨论】:

以上是关于对于 Amazon Web Services 上极短的流量峰值,正确的 Cloudwatch/Autoscale 设置是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Overview of Amazon Web Services

Amazon Web Services 中的 API 重试逻辑

帮助了解 Amazon Web Services 定价

使用 Amazon Web Services 保守秘密密钥

Amazon Web Services 开发人员用户权限

Amazon Web Services(AWS)简介