# faas-scaling-agent **Repository Path**: open-faa-s-inplus/faas-scaling-agent ## Basic Information - **Project Name**: faas-scaling-agent - **Description**: 基于深度强化学习的openfaas弹性伸缩智能体 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-12-26 - **Last Updated**: 2025-08-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # A Demo for RL-Scaling in OpenFaaS ## 项目说明 本项目在OpenFaaS for k8s的代码基础上进行开发,基于深度强化学习算法实现弹性伸缩功能。通过引入一个额外的RL-Scaling Agent,最大程度地降低项目的耦合程度,强化学习智能体以可插拔组件的模式工作,并将强化学习与OpenFaaS环境的交互收敛到Gateway。 架构图如图: ![1672632522533](image/architecture.png) 核心功能: * 支持用户在部署函数时指定延迟SLO,单位为毫秒,不指定时不约束 * RL的目标——在降低延迟SLO违约率的同时,降低系统的CPU消耗 ![1672646459124](image/hello-python-yml.png) 该项目作为一个Demo,从工程上,为后面如何往OpenFaaS添加新功能提供了示例;从科研上,该项目初步展示了RL在Serverless系统上弹性伸缩的优秀效果。 ## Demo实验复现步骤 1. 安装docker、kind、Kubernetes Metrics Server和OpenFaaS(参考`../docs/preliminary.md`) 2. 在OpenFaaS上部署要测试的函数,Demo实验时测试的简单求和函数放在`./others/hello-python`目录下,当然也可以根据机器的配置和实验的需要自定义其他的函数 3. 运行`collect_data`中的程序采集训练数据 4. 运行`rl-agent`中的仿真环境程序`run_sim_env.py`训练模型 5. 使用训练好的模型,运行`rl-agent`中的`run_faas_env.py`部署弹性伸缩智能体 6. 运行`load_generate`中的程序发起函数调用,模拟真实业务场景的请求到达情况 7. 使用`results`目录下的`plot_results.py`程序将实验过程中保存的函数状态可视化,Demo实验中每组弹性伸缩策略大约跑了四小时 其他: * 关于各个模块的使用说明可参考各个模块目录下的README文档 * 根据实验时要测试的弹性伸缩策略需要对应修改OpenFaaS的`prometheus-cfg.yml`中配置的告警规则,`./others/yaml-rl`中提供了测试RL时的配置(即删除了默认的告警规则) * `./docs/rl-scaling.pptx`补充了Demo实验的一些其他信息,可供参考