我正在做一个以PaaS形式提供服务的产品,产品的后端完全是使用NodeJS Serverless Framework为serverless开发的,部署在AWS Lambda上。
当我开始工作的时候,发现有很多重复的代码,LambdaFunctionOne和LambdaFunctionTwo都有相同的函数,执行相同的操作,这就是问题所在,如果我们要改变函数的逻辑,那么我们就必须改变所有Lambda函数中的函数。
想要去除重复的,所以如果LambdaFunctionTwo需要的某个函数是LambdaFunctionOne,那么与其复制,不如调用LambdaFunctionOne并调用其函数。假设为 utils 创建了一个 lambda 函数,并且通过调用 lambda 而不是复制,在 Lambda 的每个函数中使用该 utils。
它将如何影响定价?
你要为lambda函数的执行成本付费。因此,如果你的lambda函数调用另一个函数,你将被 两刑并罚. 不幸的是,这样的用例没有特别的折扣。
在成本方面,从另一个lambda调用lambda是好的做法吗?
基本上和第一个问题一样。每次执行都要付费。
在无服务器环境下开发这样的产品是好的做法吗?
一般来说,你 不应该紧紧地把功能耦合在一起 像这样。在理想的情况下,所有的功能都会独立工作,并且会使用Step Functions进行同步,或者通过分布式消息系统(如SQS)进行通信。
我可以推荐AWS关于使用lambda的最佳实践的白皮书。
我发现有很多重复的代码,LambdaFunctionOne和LambdaFunctionTwo都有相同的功能,执行相同的操作。
这似乎是lambda的一个很好的应用案例。层次. 你可以把所有 层中通用代码 由所有函数共享。
调用一个单独的函数的缺点是,你要为两个同时存在的函数付费(正在等待的调用函数和被调用函数)。最好是在一个函数中就可以访问代码。
一个例外的情况是,如果你正在设计微服务,其中每个微服务 "拥有 "一个进程或一些特定的数据。在这种情况下,最好通过定义的API调用另一个服务,而不暴露函数的内部细节。
和外部调用一样。看看CloudWatch的日志,还是以100ms为增量的。