云原生体系下 Serverless 弹性探索与实践
Serverless 时代的来临
全托管的计算服务,客户只需要编写代码构建应用,无需关注同质化的、负担繁重的基于服务器等基础设施的开发、运维、安全、高可用等工作; 通用性,能够支撑云上所有重要类型的应用; 自动的弹性伸缩,让用户无需为资源使用提前进行容量规划; 按量计费,让企业使用成本得有效降低,无需为闲置资源付费。
Serverless 弹性探索
互联网企业往往由于其内部应用具有显著流量特征,应用启动依赖多,速度慢,且对整体资源池容量水位,库存财务管理,离在线混部有组织上的诸多诉求,因而更多的是以容量画像提前弹性扩容为主,基于 Metrics 计算的容量数据作为实时修正,其目标是容量画像足够精准以至于资源利用率达到预期目标。 公有云厂商服务于外部客户,提供更为通用,普适的能力,并通过可拓展性满足不同用户的差异化需求。尤其在 Serverless 场景,更强调应用应对突发流量的能力,其目标在于无需容量规划,通过指标监控配合极致弹性能力实现应用资源的近乎按需使用且整个过程服务可用。
Serverless 弹性落地
定时弹性:在已知应用流量负载周期的情况下进行配置,应用实例数可以按照时间,星期,日期周期进行规律化扩缩,如在早 8 点到晚 8 点的时间段保持 10 个实例数应对白天流量,而在其余时间由于流量较低则维持在 2 个实例数甚至缩 0。适用于资源使用率有周期性规律的应用场景,多用于证券、医疗、政府和教育等行业。 指标弹性:可以配置期望的监控指标规则,SAE 会时应用的指标稳定在所配置的指标规则内,并且默认采用快扩慢缩的模式来保证稳定性。如将应用的cpu指标目标值设置为 60%,qps 设置为 1000,实例数范围为 2-50。这种适用于突发流量和典型周期性流量的应用场景,多用于互联网、游戏和社交平台等行业。 混合弹性:将定时弹性与指标弹性相结合,可以配置不同时间,星期,日期下的指标规则,进而更加灵活的应对复杂场景的需求。如早 8 点到晚 8 点的时间段 CPU 指标目标值设置为 60%,实例数范围为 10-50,而其余时间则将实例数范围降为 2-5,适用于兼备资源使用率有周期性规律和有突发流量、典型周期性流量的应用场景,多用于互联网、教育和餐饮等行业。 自适应弹性:SAE 针对流量突增场景进行了优化,借助流量激增窗口,计算当前指标在这个时刻上是否出现了流量激增问题,并会根据流量激增的强烈程度在计算扩容所需的实例时会增加一部分的冗余,并且在激增模式下,不允许缩容。
一级平滑:对指标获取周期,单次指标获取的时间窗口,指标计算聚和逻辑进行配置 二级平滑:对指标数值容忍度,区间弹性进行配置 三级平滑:对单位时间扩缩步长,百分比,上下限进行配置 四级平滑:对扩缩冷却窗口,实例预热时间进行配置
Serverless 弹性最佳实践
软件包优化:优化应用启动时间,减少因类加载、缓存等外部依赖导致的应用启动过长
镜像优化:精简镜像大小,减少创建实例时镜像拉取耗时,可借助开源工具 Dive,分析镜像层信息,有针对性的精简变更
Java 应用启动优化:借助 SAE 联合 Dragonwell 11 ,为 Java 11 用户提供了应用启动加速功能
可用性优化策略 配置指标值为 40%
可用性成本平衡策略 配置指标值为 50%
成本优化策略 配置指标值为 70%
社区网址一览
评论