弹性最佳实践:亚马逊如何构建行为良好的客户端和受良好保护的服务

AWS 弹性策略:从午餐高峰中学到的经验

概述

AWS 高级首席解决方案架构师 Michael Haken 通过类比餐厅应对午餐高峰的策略,分享了亚马逊在构建具有良好行为的客户端和受保护的服务时所采用的运营和架构策略。文章重点介绍了如何通过自动化容量预测、自动扩展和负载释放技术来管理队列深度,确保服务在需求激增时仍能保持高效运行。

主要观点

1. 自动容量预测与自动扩展

  • 自动容量预测自动扩展是确保服务始终领先于需求的关键策略。
  • 亚马逊倾向于过度配置,以提供容量缓冲,避免因需求激增导致服务中断。

2. 餐厅与云计算中的负载管理

  • 餐厅需要管理客户需求(负载)和服务时间(延迟),以维持客户期望的体验。
  • 云计算中的弹性系统设计类似于餐厅管理负载和服务时间的方式,包括运营策略架构策略

运营策略

1. 负载释放 (Load Shedding)

  • 负载释放是在负载短暂激增时,暂时丢弃部分工作,以保护服务不被压垮。
  • 虽然负载释放有助于延长服务的正常运行时间,但它对客户体验有负面影响,因此不应作为唯一的解决方案。

2. 公平性与配额管理

  • 公平性配额管理确保在多租户环境中提供一致的体验。
  • 常用的算法包括令牌桶漏桶指数加权移动平均(EWMA)固定窗口滑动窗口

3. 自动容量预测

  • 自动容量预测是确保充足容量的主要策略,通过预测未来需求来提前扩展资源。

架构策略

1. 避免冷缓存

  • 避免冷缓存可以减少系统启动时的延迟,确保服务始终处于热状态。

2. 管理队列深度

  • 管理队列深度可以防止系统因过载而崩溃,确保请求得到及时处理。

3. 恒定工作 (Constant Work)

  • 恒定工作意味着系统在几乎所有条件下都提供相同的工作量,从而产生可预测的负载。

4. 小服务控制

  • 小服务控制通过适当使用控制平面数据平面,防止系统过载。

良好行为的客户端模式

1. 断路器 (Circuit Breakers)

  • 断路器可以防止依赖服务持续过载,避免雪崩效应。
  • 亚马逊的断路器设计更为细致,通常与依赖服务的预期故障域对齐。

2. 重试机制 (Retries)

  • 重试机制允许客户端在请求失败时进行重试,通常使用指数退避抖动来避免请求风暴。

总结与评论

  • Werner Vogels(亚马逊 CTO)强调,负载管理无处不在,关键在于早期检测快速适应优雅降级
  • Manoj Chaudhary(Jitterbit CTO)认为,无论是 SaaS 还是餐厅行业,关键在于早期检测问题快速适应确保足够的容量,以提供顺畅的客户体验。

该文章现已收录于亚马逊构建者库,详细介绍了不同的客户端和服务器模式。

阅读 19 (UV 19)
0 条评论