用华为云 FunctionGraph 做一个 OBS 图片自动压缩服务:Serverless 入门实战

举报
yd_219086756 发表于 2026/11/15 00:19:28 2026/11/15
【摘要】 为什么选 Serverless?先说说我的场景前阵子帮朋友的小站做图床:用户上传的照片动不动就好几 MB,直接原图展示,页面加载慢得让人想关掉。传统做法是搭一台 ECS,装个图片处理服务,再配定时任务……但上传量忽高忽低,服务器大部分时间都在空转,钱花得冤枉。后来我试了华为云的函数工作流 FunctionGraph。它是一项基于事件驱动的函数托管计算服务:你只写业务函数代码、设置好运行条件...

为什么选 Serverless?先说说我的场景

前阵子帮朋友的小站做图床:用户上传的照片动不动就好几 MB,直接原图展示,页面加载慢得让人想关掉。传统做法是搭一台 ECS,装个图片处理服务,再配定时任务……但上传量忽高忽低,服务器大部分时间都在空转,钱花得冤枉。

后来我试了华为云的函数工作流 FunctionGraph。它是一项基于事件驱动的函数托管计算服务:你只写业务函数代码、设置好运行条件,剩下的服务器、扩缩容、运维全交给平台,函数以弹性、免运维、高可靠的方式运行。改完之后的效果很直接:有图片上传时函数才跑,没请求时不产生费用。

FunctionGraph 到底是什么

用官方的说法再白话一点:FunctionGraph 把“一段代码”当作运行单元,事件来了就执行,执行完就释放。几个关键点我自己梳理过,写下来供参考:

  • 按量计费:按照请求次数和计量时间付费,毫秒级时长计量粒度;代码未运行时不产生费用,闲置状态 0 成本。函数每月前 100 万次调用免费,小项目基本够用。
  • 毫秒级弹性:根据并发请求按需自动增加和减少函数运行实例,流量洪峰也不用提前备机器;独创的 SnapShot 技术让镜像冷启动从分钟级降到秒级。
  • 免运维:小时级开发、分钟级部署,不用管服务器补丁和扩容。
  • 可视化编排:函数流管理功能支持可视化拖拽式函数编排,还兼容开源 CNCF WorkFlow 标准,多步骤的流程也能串起来。

实战:OBS 上传图片后自动压缩

思路很简单:用户上传原图到 OBS 桶,OBS 的事件通知触发 FunctionGraph 函数,函数读取原图、压缩、生成缩略图,再把结果写回 OBS 的另一个目录。整个链路没有常驻服务器。

第一步:准备两个 OBS 目录

在同一个桶里建两个目录就行,比如 upload/ 放原图,thumb/ 放压缩后的图。目录只是前缀,分开存放是为了避免函数处理自己产出的图片造成循环触发,这个坑我第一次就踩过。

第二步:写一个压缩函数

函数逻辑用 Python 写大概是这个思路:

  1. 从事件里拿到桶名和对象名,只处理 upload/ 开头的图片;
  2. 用 OBS SDK 把原图下载到函数的临时目录;
  3. 调用图片库按比例缩放并适当降低质量,生成一张宽度 800px 左右的缩略图;
  4. 把缩略图上传到 thumb/ 目录,文件名保持一致,方便前端按规则拼接地址。

函数入口只做这一件事,保持简单:校验输入、处理图片、写回结果,异常时记一条日志就返回,不要让一次坏图拖垮整个流程。

第三步:配置 OBS 触发器

在函数的触发器里选择 OBS 事件,指定桶和 upload/ 前缀。文件一上传,函数自动被唤起。这里要注意触发器的事件类型选“对象创建”,删除事件不需要触发。

第四步:验证

上传一张 3MB 的测试图,几秒后去 thumb/ 目录看结果,体积一般能压到原来的十分之一左右。函数的日志里可以看到每次调用的耗时和内存占用,方便调参。

踩过的两个坑

坑一:循环触发。 一开始我把缩略图也写回了 upload/ 目录,结果函数处理缩略图又触发了自己,调用量瞬间翻倍。解决办法就是前面说的:输出目录和输入目录严格分开,触发器只监听 upload/ 前缀。

坑二:大图超时。 有用户传了十几 MB 的原图,函数默认超时时间不够,处理到一半被中断。解决办法是根据图片大小调大超时时间和内存。内存给得大,CPU 配额也跟着上去,处理速度反而更快。FunctionGraph 按实际运行时间计费,跑得快反而更省钱。

成本和适用场景

按官方的说法,相比传统开发模式,应用上线效率提升 100%,总成本降低 50%。以我的小图床为例,每月几万次调用基本都在免费额度里。FunctionGraph 官方还列了几类典型场景:实时文件处理、实时数据流处理、Web/移动应用后端、人工智能服务集成。比如实时文件处理就是“客户端上传文件到 OBS,触发函数实时创建图像缩略图、转换视频编码、做数据文件汇聚筛选”,和我这个例子是一个路子。

小结

如果你手头也有“事件一来就干点活,平时不用占机器”的需求,FunctionGraph 是个值得一试的起点:不用买服务器,不用写部署脚本,先把一个小函数跑起来,再慢慢把流程串成函数流。Serverless 不是银弹,但对这种波峰波谷明显的轻量任务,它确实把成本和运维都压到了最低。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。