他的回复:
前面 9 楼把适用场景和选型方法讲得很全了,我不重复列场景,只补五点帖子里还没人提、但落地时很关键的东西。一、多步任务别用函数互相调用,改用函数工作流FunctionGraph 除了单个函数,还有函数工作流,可以把多个函数串起来编排:串行、并行、条件分支、出错重试都在工作流里定义。需要多步协作的任务(比如先解析、再转码、最后写库并通知),用工作流编排比在一个函数里调另一个函数更合适:每个函数只做一件事、超时和重试各自独立,出问题也好定位。二、上线用版本和别名做灰度函数支持版本和别名:改完先发一个新版本,别名先切小比例流量到新版本,观察调用量、错误率和耗时没问题再全量。不要直接在 $LATEST 上改完就全量发布,出了问题回滚也慢。定时任务、事件触发这类平时没动静的函数,更要留一个能立刻切回的旧版本别名。三、成本按“请求次数 + GB-秒”算,超时设置直接影响账单计费口径是请求次数加上资源使用量(内存 × 执行时长),有免费额度,具体数字以官方定价页为准。容易忽略的是:超时配得越大,单次异常执行烧掉的资源越多;所以超时要按最慢一次执行留余量来配,不要图省事配到最大。内存也一样,给够用就行,配大一倍,同样时长的账单也大约翻一倍。做选型测算时建议按峰值并发和平均耗时先在费用中心估一遍,再决定哪些接口走函数、哪些走常驻服务。四、一个最小可跑的 OBS 触发骨架OBS 上传图片后自动处理,是最常见的入门场景。下面这段 Python 骨架可以直接贴进函数里先跑通,再往里面加业务逻辑(注意:事件字段以实际收到的事件结构为准,第一次跑建议先把 event 打印到日志里确认):def handler(event, context): records = event.get("Records", []) for record in records: obs = record.get("obs", {}) bucket = obs.get("bucket", {}).get("name") key = obs.get("object", {}).get("key") print(f"bucket={bucket}, key={key}") # 在这里做下载原图、生成缩略图、写回另一个桶等处理 return {"status": "ok"}五、排障先看这两处函数日志接入 LTS,调用次数、错误数、执行耗时在云监控(CES)里看。报超时先看是函数本身慢还是下游慢;报权限问题先看触发器的委托和函数访问 VPC 内资源时的安全组配置。总结:先按 9 楼的四问判定表判断适不适合,再按上面这五点把编排、灰度、成本和日志这四件事定下来,从一个非核心的定时或事件任务试点,跑稳了再推广。