概览
本文主要是介绍Facebook如何对facebook.com做自动扩容的流程;原文出自于: Throughput autoscaling: Dynamic sizing for Facebook.com
核心步骤介绍
1. 预测容灾流量(明确需求)
- 训练机器学习模型预测日常情况下的容量需求
- 容灾情况下的容量需求
2. 通过测试获取机器能力(明确供给)
- 内部负载测试平台
3. (最重要)核心的自动扩容流程
- Predict:预测每机房的下个小时的需求
- Live metrics: 获取每中心的当前的需求
- Combine: 取步骤1和步骤2的最大值;
- Expected events: 预期事件,比如预期内中心需求迁移;
- Disaster buffer: 容灾冗余,预设某个中心完全挂掉时,剩余两个中心还有能力提供服务,在示例中,假设U.S.West完全挂掉,则East,Europe需要分别承担40/2=20的流量
- Convert to machine count: 将流量需求转化为机器数;假设每个机器可以服务10流量,那么每个中心需要的机器数就分别是6,6,5;
补充说明
- 机器能力获取
- 要注意不同的请求对机器的压力是不同的;
- 完整架构图是:
- 安全保障
- 不能完全依赖预测;实际是预测和当前实时流量加冗余综合得到的;
- 看门狗:兜底策略,如果自动扩容系统出问题,则扩容到过去7天每中心的最大机器数;
- 防止容量计算错误
- 有一套评估机制,一旦发现机器能力评估有问题,会启用看门狗机制,接管扩容;
- 小步跑
- 缓慢调整,稳定为先;
- 安全保障