提问人:Jiman Ryu 提问时间:1/17/2023 更新时间:1/17/2023 访问量:43
将处理后的图像从服务器传送到客户端的最佳实践
Best Practice in delivering processed image from server to client
问:
有一项服务可以根据用户请求生成图像(1MB ~ 10MB 大小)。它需要一些计算过程,我想尽快交付生成的图像。(希望在几秒钟内)
为了实现这个目标,我可以考虑的最佳选择是什么?
条件
镜像生成服务是可扩展的,镜像生成作业按队列管理。因此,可以有多个服务正在运行,并且客户端不能有 1 个要直接连接的单个目标。
生成的图像不可重复使用。每当用户请求一些输入时,结果图像都会有所不同。
这些映像无法预先生成,因此我们无法先将其存储在 S3 上,以便通过 CloudFront 提供这些映像。
服务器的位置: us-west-1, 客户端位置: 韩国
一些试验
我尝试了一些场景,如下所示,但我仍然希望有一些更好的方法来实现这一目标。
将结果文件上传到 S3(公有存储桶)并向客户端提供密钥,以便客户端可以在上传文件后立即从 S3 下载该文件。
- 在有/没有 S3 传输加速的情况下进行测试
- 没有加速,比直接套接字传输慢一点。但有趣的是,当我使用加速时,它比套接字传输快得多,尽管文件没有在 CloudFront 边缘服务器上命中。
运行单独的 WebSocket 服务器,以便它可以直接向客户端发送结果图像。
- 关注:
- 为了使其可扩展,不仅图像生成服务,而且这些 WebSocket 服务器也应该是可扩展的。这要求客户知道确切的目的地才能接收预期结果。
- 单个 EC2 实例的网络带宽限制
- 关注:
答:
0赞
Xavier Calderón
1/17/2023
#1
根据我的经验,正如我在您的案例中看到的那样,最好的方法是在 EC2 中使用类似 GlusterFS 的东西。我正在使用它向最终用户提供一些 moodle 数据,但速度肯定比使用 S3 快。你应该试一试。
评论
0赞
Jiman Ryu
1/17/2023
感谢您的提示,您提到了共享文件系统,以便我可以存储来自多个工作器的结果图像文件,对吗?您如何将这些文件从 EC2 提供给最终用户?你用的是什么协议?您是否还为该 EC2 实例配置了 NLB?据我所知,大多数 EC2 实例都有 10Gbps 的网络带宽限制(我知道它因类型而异)。这在某种程度上不会是一个瓶颈吗?
0赞
Xavier Calderón
1/18/2023
我使用它的方式是 atm 我有两个 GlusterFS 实例。对于应用程序实例,我有一个自动扩展模板,该模板使用 AMI 和 t3a.xlarge 机器。最少 3 个,最多 30 个实例。GlusterFS 环境挂载在实例模板上,因此我不依赖单个 EC2 向用户提供数据
评论