rest - 在后端提供动态文件的最佳实践

标签 rest architecture backend server-side file-management

有谁知道后端设计中为客户端应用程序提供动态图像和视频的最佳实践或常见策略?

背景:我目前正在构建一个允许用户上传自己的图片和视频的应用程序。我不太确定如何以最有效的方式将这些媒体文件返回给客户端。我是否将文件存储在运行我的应用程序服务器的同一 VPS 上?我是否需要以不同的质量/密度保存文件以更好地适应客户的屏幕分辨率? (我将主要使用移动客户端)

我尝试用谷歌搜索这些问题,但显然我问错了问题:-)

如果能提供有关这些主题的引用资料或专业词汇表,我将不胜感激。

提前致谢。

最佳答案

1)您需要拆分Web服务器和应用服务器。

首先,不要尝试从您的后端流式传输媒体文件,除非您可以将低级内容卸载到操作系统 - 很可能您会做错。 使用代理服务器作为 Web 服务器来提供此类文件。 nginx 就可以了。

您还需要像备份数据库一样备份媒体文件。 将静态巨大的媒体文件与应用程序服务器一起存储是错误的做法——它根本无法扩展。 您可以添加 cron 任务以将文件移动到某个 CDN 服务器 - 移动完成后,您可以替换数据库中的 URL 以匹配新位置。

因此,通过使用 nginx,您可以在将文件移动到外部服务器时节省宝贵的 CPU 和 RAM。 CDN 将帮助您将带宽和 CPU/RAM 资源专用于应用服务器。

2)关于图像分辨率和下采样:

与典型的办公工作站相比,现代手机的屏幕具有相同甚至更好的分辨率。 链接速度对用户体验的影响要大得多。 如果客户的智能手机屏幕很大但连接速度较慢,即使媒体质量与手机的分辨率不匹配,您仍然必须尽快传送图像或视频。

按需对图像进行缩减采样并将结果存储在磁盘上以供 nginx/CDN 再次提供服务是有意义的。 在视频的情况下,对于慢速链接的情况,制作具有大压缩(质量损失)的“坏”版本是有意义的 - 设备将在播放期间自行下采样。 您可以保留客户端统计信息(屏幕尺​​寸/下行速度),并在您看到此类视频文件“流行”时生成优化版本。

仅供引用:几年前,一些社交媒体巨头放弃了为同一媒体文件准备所有可能版本的想法,转而使用 FPGA 即时重采样器。 我不记得公司名称和文章的 URL。可能是 Instagram。 一些云提供商提供板载 FPGA 或 CUDA 来完成繁重的工作。 因此,在某些情况下,您可以用存储空间换取强大的马力,以便在运行中进行转换。

关于rest - 在后端提供动态文件的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59466757/

相关文章:

rest - Jhipster + REST 客户端 + 身份验证

c# - RESTful WCF 服务中标志枚举的默认值

database - 使应用程序与多个 ado.net 提供商一起工作的最佳方法是什么?

delphi - 在 Delphi 7 项目中重建架构的第一步

javascript - 解析.com : generate statistics out of a large set of data

rest - Camel ReSTLet maxThreads 组件选项

java - 从 google play developer rest api 访问编辑方法

java - 使用 Spring 保护用户帐户微服务

html - CSS可以影响提交的表单数据吗

backbone.js 和后端引擎的需要