华为云 FunctionGraph Serverless 实战:事件驱动架构
华为云 FunctionGraph Serverless 实战:事件驱动架构
前言
函数工作流(FunctionGraph)是华为云的 Serverless 计算服务,无需管理服务器,按需执行代码。本文介绍 FunctionGraph 的核心概念、开发实践和事件驱动架构。
核心概念
函数
函数是执行代码的基本单元,支持 Java、Python、Node.js、Go 等语言。上传代码包后配置触发器,事件到达时自动执行。
触发器
触发器定义函数执行的时机:
定时触发:按 Cron 表达式定时执行,如每天凌晨清理日志。
OBS 触发:OBS 桶上传或删除对象时触发,适合图片处理和数据导入。
APIG 触发:HTTP 请求到达 APIG 时触发,将函数暴露为 API。
CCTS 触发:云审计事件发生时触发,适合自动化运维。
DIS 触发:数据流入 DIS 流时触发,适合流数据处理。
行器
函数执行环境,按语言自动分配。冷启动首次执行需初始化环境,约几百毫秒。后续执行复用环境,毫秒级启动。
开发实践
代码结构
函数代码包含入口函数和处理逻辑。入口函数接收事件数据和上下文,返回处理结果。上下文包含执行信息、日志方法和临时凭证。
环境变量
通过环境变量注入配置,不同环境配置不同变量值。避免硬编码配置,实现代码与环境解耦。
依赖管理
将依赖包与代码一起打包上传。Python 用 pip install 到目标目录后打包,Node.js 将 node_modules 一起打包。
日志输出
通过上下文的日志方法输出日志,日志自动收集到 LTS 日志服务。避免用 print 输出,确保日志能被收集检索。
性能优化
冷启动优化
冷启动是 Serverless 的主要时延来源。优化方法:
减小代码包体积,只包含必要依赖。
选择内存大的配置,CPU 按内存比例分配,内存大初始化快。
使用预留实例消除冷启动,适合对时延敏感的场景。
保持函数活跃,定时心跳避免实例回收。
执行优化
复用外部连接,在函数初始化时创建数据库连接,后续执行复用。
异步处理非关键逻辑,主逻辑返回后异步执行通知等操作。
合理设置超时时间,避免长时间执行占用资源。
事件驱动架构
图片处理
OBS 上传图片触发函数:生成缩略图、添加水印、提取元数据。处理后的图片存回 OBS,无需服务器常驻。
数据 ETL
DIS 数据流入触发函数:清洗转换数据,写入 OBS 或数据库。按数据量自动伸缩,无需预估容量。
定时运维
定时触发函数:检查资源状态、清理过期数据、生成报表。替代 cron 服务器,按需付费。
Webhook
APIG 触发函数作为 Webhook:接收外部事件,处理后回调通知。适合 CI/CD 通知和第三方集成。
常见问题
问:函数执行超时怎么办?
答:检查代码是否有死循环或阻塞操作。优化执行逻辑,或增加超时时间。长时间任务考虑拆分为多个函数异步执行。
问:如何调试函数?
答:在控制台配置测试事件手动触发,查看执行日志和返回结果。本地开发时用模拟事件测试。
总结
FunctionGraph 让开发者专注代码无需管理服务器。按事件驱动架构设计应用,配合触发器实现自动化。优化冷启动和执行效率,按需付费降低成本。
- 点赞
- 收藏
- 关注作者
评论(0)