我想知道为什么无服务器功能在部署时会有如此小的限制?
例如具有依赖项的AWS lambda压缩函数不能超过50MB。为什么这么低的限制?
谢谢!
答案 0 :(得分:2)
据我了解。
将第一个请求推送到lambda(或冷启动)后,AWS将下载并解压缩,然后准备env以运行该功能。
如果功能较大,则执行和解压缩可能需要很长时间。
答案 1 :(得分:2)
无服务器概念和Lambda的想法是具有“小”功能(即,没有太多的代码),这些功能只承担单一责任。如果打包的代码的大小大于50 MB,则说明打包有问题,或者函数中的代码过多,您应该重新考虑设计(也许要在内部执行的任务)。函数是如此之大,以至于Lambda不是合适的工具?)。
另外,正如其他人所写,Lambda函数的代码大小受到限制,因为Lambda需要在函数的每次冷启动(调用)时加载并初始化整个事情。
答案 2 :(得分:1)
为什么您需要在lambda上推送超过50 MB的zip压缩文件,然后才能调整设计并使用它?
因此50 MB lambda + 250 MB层= 300 MB
AES层- “层使使用自定义运行时代码运行Lambda函数成为可能。层带给Lambda的最令人兴奋的好处之一就是能够以任何编程语言运行Lambda函数。”
在构建无服务器应用程序时,拥有代码非常普遍 在Lambda函数之间共享。它可以是您的自定义代码, 由多个功能或标准库使用的 您可以添加以简化业务逻辑的实现。
创建最大50 MB大小的Lambda函数部署包(.zip / .jar文件)
创建另一大尺寸的代码/依赖项,您可以将其压缩为部署包(.zip / .jar大小)
注意:如果通过S3上传而不是直接上传,则将文件存储在S3存储桶中并上传,然后程序包大小可以大于50 MB。
更新:-为什么? ,限制
无论何时向外部开发团队发布任何产品进行测试和基准分析,并共享最佳实践和局限性,AWS Lambda都必须对资源进行有效的内部容量规划。
以下可能的限制原因:
1)调用labda函数时,它将启动环境配置并加载您的代码并执行,如果您上传的文件大小很大,则此冷启动将花费很长时间。
2)并发性:
AWS Lambda允许您使用常规语言和操作系统 功能,例如创建其他线程和进程。资源资源 分配给Lambda函数,包括内存,执行时间, 磁盘和网络使用必须在所有线程/进程之间共享 它使用
但是,Lambda函数可用的CPU在所有线程之间共享,并且线程不会通过并行运行工作而在Lambda函数中获得更多的CPU,因此线程开始挨饿并睡眠很长的时间,如果您在并发请求的情况下遇到lambda,则lambda将启动新容器来支持您的请求,然后再次增大文件大小,开始在此处增加延迟。