澄清一下,当我说"FaaS“时,我指的是诸如AWS和Google函数这样的无服务器产品。
我有一个具体的例子,我会描述,但我很想知道在这方面的任何指导原则。
我有一个谷歌云功能,目前正在做一些图像处理。流程如下:
这是可行的,但我想知道:一个函数应该做多少?我看到的大多数关于单用途和单块函数的讨论都围绕着具有逻辑分支的单块函数,例如"if-else“。在上面的例子中,这是一个做了很多事情的例子,但是,从概念上来说,它是“工作”的一个单元。
如果我把它重构成真正的单一功能,我想我会有两个函数--一个用于下载和合并图像,另一个用于调用Vision。这就把我认为的“图像处理”分成两个子单元。我没有问题这样做,但我很好奇,知道什么是一个好的经验法则“分裂”FaaS函数?
编辑:如果有人想知道为什么要将图像文件上传回存储桶,然后调用Vision API,这是由于API的限制,其中输入只能是存储桶URI,而不能是本地文件。
发布于 2018-10-03 11:44:20
在我的观点中,您可以获得一个未来的收益,将该功能分成多个部分,因为它将允许使用另一个组合系统/上传/任何东西作为对处理部分的输入,并允许另一个系统稍后处理图像。
我个人分离的经验法则是主要关注的问题:
我确实省略了步骤2,因为这是步骤3和步骤4的触发器。
这种职责分离的主要兴趣在于功能之间的合同(主要是项目2和3)之间的合同:预期2在桶中输出图像,3希望在桶中找到图像,然后可以用任何您想要的替换2或3,只要该合同完成。
如果你不认为事情会在不久的将来发生变化,而且没有困难的限制即将来临,就像完成整个工作的时间接近最大执行时间一样,那么在我看来没有必要对问题进行过度的预测,就像你所说的,整个第3至第5步可以看作是一个单一的任务单元,这是有意义的。
我的观点是测量函数内部的时间,看看是否有兴趣(例如,并行处理)将合并转换成图像到它自己的单元。
简单地回答这个问题,标题是:没有关于粒度的灵丹妙药或硬性规则,这总是一个权衡成本与成本的问题。
https://devops.stackexchange.com/questions/5103
复制相似问题