首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FaaS函数应该有多细粒度?

FaaS函数应该有多细粒度?
EN

DevOps用户
提问于 2018-10-03 01:10:05
回答 1查看 325关注 0票数 3

澄清一下,当我说"FaaS“时,我指的是诸如AWS和Google函数这样的无服务器产品。

我有一个具体的例子,我会描述,但我很想知道在这方面的任何指导原则。

我有一个谷歌云功能,目前正在做一些图像处理。流程如下:

  1. 包含多个base64编码图像的JSON文件被上传到存储桶中。
  2. 云下载文件
  3. 将所有base64字符串转换并合并为图像文件。
  4. 将图像文件上载到存储桶
  5. 文件上传后调用

这是可行的,但我想知道:一个函数应该做多少?我看到的大多数关于单用途和单块函数的讨论都围绕着具有逻辑分支的单块函数,例如"if-else“。在上面的例子中,这是一个做了很多事情的例子,但是,从概念上来说,它是“工作”的一个单元。

如果我把它重构成真正的单一功能,我想我会有两个函数--一个用于下载和合并图像,另一个用于调用Vision。这就把我认为的“图像处理”分成两个子单元。我没有问题这样做,但我很好奇,知道什么是一个好的经验法则“分裂”FaaS函数?

编辑:如果有人想知道为什么要将图像文件上传回存储桶,然后调用Vision API,这是由于API的限制,其中输入只能是存储桶URI,而不能是本地文件。

EN

回答 1

DevOps用户

回答已采纳

发布于 2018-10-03 11:44:20

在我的观点中,您可以获得一个未来的收益,将该功能分成多个部分,因为它将允许使用另一个组合系统/上传/任何东西作为对处理部分的输入,并允许另一个系统稍后处理图像。

我个人分离的经验法则是主要关注的问题:

  • 第一步是输入,它本身已经有些东西了。
  • 步骤3和步骤4基本上是输入、工作和输出。它等待base64字符串作为输入并将图像文件输出到桶中,它在处理过程中应该是自主的。
  • 步骤5是一个api调用,它将图像作为输入等待,“无论vision API做什么”作为结果/输出,这本身就是一项任务。

我确实省略了步骤2,因为这是步骤3和步骤4的触发器。

这种职责分离的主要兴趣在于功能之间的合同(主要是项目2和3)之间的合同:预期2在桶中输出图像,3希望在桶中找到图像,然后可以用任何您想要的替换2或3,只要该合同完成。

如果你不认为事情会在不久的将来发生变化,而且没有困难的限制即将来临,就像完成整个工作的时间接近最大执行时间一样,那么在我看来没有必要对问题进行过度的预测,就像你所说的,整个第3至第5步可以看作是一个单一的任务单元,这是有意义的。

我的观点是测量函数内部的时间,看看是否有兴趣(例如,并行处理)将合并转换成图像到它自己的单元。

简单地回答这个问题,标题是:没有关于粒度的灵丹妙药或硬性规则,这总是一个权衡成本与成本的问题。

票数 2
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/5103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档