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