本文是 serverless 入门与实践 的第15篇
学习<华为 Serverless 核心技术与实践>, 计划: 1篇前言 + 10篇/章 + 1篇总结
高性能函数运行时: 弹性伸缩
Serverless方案与传统云原生方案相比的特点之一就是系统的弹性伸缩能力更强,用户只需要专注业务逻辑的开发
如何在突发流量下提供毫秒级弹性伸缩能力,快速扩容以应对峰值压力
弹性策略选择
- 依据应用的资源负载进行弹性决策: k8s HPA(Horizontal Pod Autoscaling)
- 依据请求流量进行弹性决策: Knative的KPA(Knative Pod Autoscaler)
KPA的弹性伸缩方案可以解决从0到1和从1到0的扩容和缩容问题,对突发流量的场景处理更友好,并且有借鉴意义
- 通过函数承载的流量无法准确反馈函数实例的负载压力
- AutoScaler为集中式决策机制,随着集群规模的增大,AutoScaler可能成为性能瓶颈
华为元戎的函数实例弹性伸缩决策方法
- 记录函数的处理时延,以函数的请求处理时延为判断依据
- 随着函数实例的并发量逐渐增大,如果请求处理时延逐渐增大并超过阈值 -> 函数实例是否饱和
- 当函数依赖的周边服务的处理能力导致请求处理时延增加 -> 系统不进行扩容
- 缩容机制,周期性循环判断
华为元戎系统的请求处理及弹性伸缩步骤
具体实施步骤:
- 随着函数并发请求量的增加,获取本节点上函数实例的处理能力
- 根据函数调用请求队列的长度,估算队列中请求的等待时延,加上平均时延则可预计请求处理完成的时延
- 如果处理时延增加预计超过一定阈值,则进行扩容,使时延值尽量向较优的最低时延值靠近
- 每隔一段时间,评估函数实例的请求处理情况,如果平均latency没有增加则考虑缩容