我正在开发一个示例应用程序,其中后端在NodeJ上,前端使用React.该应用程序将处理一堆照片,
因此,用户可以上传照片,后端会将其保存到s3存储桶中.另外,我还需要一些转换,例如生成不同大小的缩略图,最有可能是两个100 px * 100px和200px * 200px的缩略图.
我还经历了一些类似cloudinary的工作,这似乎是即时转换图像的好选择.
现在,我有关于最佳实践的几个问题.
>我应该在我的应用服务器(NodeJs)上进行图像上传/转换吗?我问的原因是,我尝试了cloudinary,图片上传甚至没有到达应用服务器.
>或者点击应用服务器并在其中生成缩略图,然后
上载到s3.
>点击应用服务器,然后将图像上传到s3存储桶并触发
lambda函数执行所有转换(好处是什么?)
感谢您耐心阅读此问题.我愿意接受任何建议,想法和关注.
首先,需要考虑一些事项:
>要上传多少张图像?
>这些图像和缩略图多久被访问一次?
>上传缩略图后需要多长时间才能访问缩略图?尽快接近还是可以接受几秒钟的延迟?
>这些图像有多大?
>更重要的是运行成本或开发成本/时间?
您需要了解所有这些内容,才能进行有效比较.
您的选择实际上并不是三个截然不同的选择.
选项1是独立的体系结构决策.无论您将所有内容或其他内容通过应用服务器推送回您自己,都由AWS和Cloudinary的前端或后端的SDK来决定.但是,如果您将所有内容都放在前端,请小心如何管理密钥.无论哪种方式都请当心,但这通常是人们忘记的前端代码,每个人都可以看到.
选项2和3与您是否在初始上传的过程中并在您的控制之下进行其他工作有关,还是与其他基于事件的体系结构无关地进行其他工作.
如果您在应用服务器上完成所有工作,请确保它具有合适的大小以应对工作负载,并且在出现任何问题时可以进行重试.这可能是最适合您的工作,并且显然会给服务器带来最大的负载.除非您的吞吐量非常恒定,非常高并且您可以正确地指定它们,否则增加服务器的大小可能会比使用lambda花费更多.
在图像上传结果上具有自动工作流程会使云提供商的责任(至少在重试方面)有点复杂.但是您仍然需要正确确定lambda的大小,以便及时处理所有问题.
两种情况都有大量的代码示例,但AWS lambda(caveat-基于30秒钟的谷歌搜索)可能更多.
您实际上并没有将其称为选项,但是Cloudinary会即时进行图像处理(如您在介绍中所述).这意味着您实际上不需要创建和保存缩略图,只需在URL中调用具有指定大小的原始图像即可.你能忍受延迟吗?大多数时候几乎无法识别.你能负担得起吗?无论是钱还是用完您的免费积分.