本文是 serverless 入门与实践 的第16篇
学习<华为 Serverless 核心技术与实践>, 计划: 1篇前言 + 10篇/章 + 1篇总结
高性能函数运行时: 函数调度
函数的调度有两种策略:
- 自下而上调度
- 自上而下调度
核心思想通过自上而下的调度策略,优先保证函数的运行性能
调度的关键维度
- 函数业务需求
- 函数性能需求
- 系统资源优化
根据上述的调度维度,华为元戎调度将这些维度细化为如下优先级从高到低的调度因子:
- 函数动态调度配置
- 函数静态调度配置
- 函数冷启动
- 函数状态访问
- 函数间调用
- 系统负载均衡
调度策略
调度主要分为两个场景:函数请求转发和函数实例申请
(1)用户发送函数调用请求,包括外部调用或函数调用函数。
(2)调度器从请求中获取动态调度配置,根据动态调度配置过滤筛选备选节点列表。
(3)调度器从函数的元数据中获取静态调度配置,根据静态调度配置过滤筛选备选节点列表。
(4)调度器获取当前函数已存在的实例,并将其作为备选实例列表,根据备选节点列表过滤筛选备选实例列表,如果备选实例列表为空,则触发函数实例申请流程在备选节点列表中申请一个新的实例,并将其加入备选实例列表中。
(5)调度器获取函数要访问的状态实例,查询状态实例所在的节点,并按照是否在状态节点的实例对备选实例进行分组排序。
(6)如果是函数调用函数场景,调度器获取主调函数实例所在的节点列表,对备选实例列表进行分组排序。
(7)在备选实例列表中按照分组优先级,采用负载均衡策略将请求转发给具体函数实例进行处理。
函数实例申请核心流程:
(1)华为元戎系统触发函数实例申请请求,包括发送请求的冷启动与弹性扩容。
(2)调度器获取动态调度配置,根据动态调度配置过滤筛选备选节点列表。
(3)调度器获取静态调度配置,根据静态调度配置过滤筛选备选节点列表。
(4)调度器获取函数要访问的状态,根据状态所在节点过滤筛选备选节点列表。
(5)调度器根据函数资源需求获取对应的函数实例池,并且从函数实例池中选择满足备选节点列表的函数实例。
(6)函数实例池管理器为分配的函数实例池补充新的函数实例,优先在分配实例所在的节点上补充。
防止实例过度集中,实施策略主要考虑两个阈值:
- 节点资源阈值
- 亲和实例阈值
函数调度最佳实践
- 函数通信
- 临时存储