我正在尝试找到将图像从s3流传输到客户端应用程序的最佳实践。
我使用移动设备上的抖动(类似于instagram)创建了类似网格的布局。我的客户如何访问其所有图像?
这是我当前的设置:客户端打开其配置文件屏幕(该屏幕包含按时间戳排序的所有图像的网格状布局)。这将自动从服务器请求所有图像。我的python3后端服务器使用boto3访问S3和dynamodb表。 Dynamodb表具有客户端上载的所有图像路径的列表,并按时间戳排序。一旦获得路径,就可以使用该路径先将所有图像下载到服务器,然后再将其发送到客户端。
基本上,我的服务器是中间人,负责下载并将图像发送回客户端。这是正确的做法吗?看来,如果客户端直接访问S3,它将更快,但是我不确定那是否安全。另外,我不知道如何在不给aws凭据的情况下让客户访问S3 ...
任何建议将不胜感激。预先谢谢!
您正在做的事情将起作用,并且如果您正在为快速使某件事情进行优化而进行优化,而不必过多担心服务器资源的浪费,不必要的计算,以及您是否不担心可伸缩性,这可能是最好的选择。
但是,如果您担心可伸缩性和较低的延迟以及对这些图像资源的安全访问,则可能需要改进当前的体系结构。
一旦获得路径,我将使用该路径将所有图像首先下载到我的服务器,然后将其发送到客户端。
这是第一部分,我将尝试摆脱的第一部分,因为您实际上并不需要后端来下载这些图像并自行流化。但是,似乎仍然有必要根据谁拥有资源来控制对资源的访问。我会考虑将其切换到以下设置以改善延迟,并花费更少的服务器资源来完成此工作:
一旦完成此设置,我将尝试考虑使用Amazon CloudFront通过CloudFront为您提供的CDN功能来改善对对象的访问,特别是如果您的客户端分布在不同的地理区域。我可以看到AFA,you can also make CloudFront work with presigned URLs。
这是正确的做法吗?看来,如果客户端直接访问S3,速度会更快,但我不确定那是否安全
Presigned URL是减轻对S3对象的不受控制的访问的方法。但是,您可能需要担心边缘情况(例如,当客户端对S3对象的访问权限到期时客户端应如何采取行动,以使用户不会注意到这一点,等等)。如果您担心扩展性,那么所有这些都是使某项产品大规模运行的成本。