将一个 lambda 函数与多个函数"smaller functions"有什么优缺点



我有一个 lambda 函数,该函数在单个 lambda 中具有 10 个"较小的函数",可由 10 个 api 网关终端节点访问。

以这种方式设计后端的优缺点是什么? 我知道在测试时管理所有这些函数更加困难,但是它与 10 个单独的 lambda 函数相比速度如何?

exports.handler =  (event) => {
const path = event.path;
const method = event.httpMethod;
if(path === '/getmail' && method === 'GET'){
return mailQuery(event);
}
if(path === '/getmessagethread' && method === 'GET'){
return getMessageThread(event);
}
if(path === '/replytomessage' && method === 'POST'){
return replyToMessage(event);
}
if(path === '/sendmessage' && method === 'POST'){
return sendMessage(event);
}
. . .
};

imo 做任何你觉得舒服的事情,这对用例最有效。不过,这只是我对这个主题的 2 美分:

优点

  • 只需要管理一个函数及其代码
  • 这可能比使用 SAM Local 更容易测试,因为我们可以使用多个事件对象进行测试

缺点

  • 如果该函数的保留并发性(如果有的话)中有多个请求,则可能会耗尽,因为只有一个函数为所有这些请求提供服务
  • API 网关的最大超时为 30 秒,因此如果此函数由于此额外代码而执行更长时间,则请求将失败
  • 还可以增加部署包大小,Lambda 具有以下限制 https://docs.aws.amazon.com/lambda/latest/dg/limits.html

    50 MB(压缩,用于直接上传) 250 MB(解压缩,包括图层) 3 MB(控制台编辑器)

从速度上看,我认为这不会有太大区别。我不相信如果调用函数而不是直接将代码放在处理程序函数中,执行时间不会有太大差异。

呵呵

-詹姆斯

最新更新