【问题标题】:How NGINX Reverse Proxy handle image/video file upload or downloadNGINX 反向代理如何处理图像/视频文件的上传或下载
【发布时间】:2016-12-05 23:11:37
【问题描述】:

首先,我将向您解释我的情况。我正在为我的手机应用程序构建一个用于存储和检索数据的服务器。我是 NGINX 的新手。我知道使用负载平衡/反向代理的要点是通过在多个服务器之间分配工作负载来提高性能和可靠性。但是我在处理图像/视频文件时不明白。让我们说下面是我的 NGINX 配置文件

upstream backend  {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}    
server {
    listen   80; 

    server_name example.com; 

    location / {
        proxy_pass  http://backend;
    }
}

我有几个问题。

首先,当我上传图像/视频文件时,我需要将图像上传到所有后端服务器还是有其他方式?

其次,如果我只是将其保存到仅存储图像的单独服务器,当我请求和下载图像或视频文件时,我将其代理到指定的服务器,那么自从反向代理以来,与图像/视频文件进行负载平衡的意义何在是通过将工作负载分布在多台服务器上来提高性能和可靠性?

第三,amazon s3 真的更适合存储文件吗?它的成本更便宜吗?

我正在寻找可以由我自己的服务器完成的解决方案,除了使用第三方。

感谢您的帮助!!

【问题讨论】:

  • 如果您的服务器没有公共共享存储,那么您需要始终根据位置将上传和检索发送到“一个特定服务器”。 HTH。
  • @rogerdpack 感谢回复。如何创建通用共享存储?任何链接建议?除此之外,您是否建议使用 amazon s3 来处理这些文件?

标签: nginx load-balancing reverse-proxy mobile-application


【解决方案1】:

您可以使用共享存储,例如NFS,或上传到两台服务器,或合并在服务器之间分发文件的策略,将每个文件存储在单个服务器上。

前两个选项在逻辑上是相同的并且提供故障转移,因此提高了可靠性。

正如您所指出的,第三个选项不会提高可靠性(可能是某种原因,如果一台服务器发生故障,第二台服务器可能仍会提供某些文件)。但是,如果您对不同文件有许多并发请求并在服务器之间平均分配它们,它可以提高性能。这不是通过 nginx 负载平衡来实现的,而是通过根据请求(例如文件名或密钥)重定向到不同的服务器来实现的。

对于共享存储解决方案,您可以使用例如 NFS。有很多资源可以深入了解,例如https://unix.stackexchange.com/questions/114699/nfs-automatic-fail-over-or-load-balanced-or-clustering

对于重复上传解决方案,您可以从客户端发送文件两次,也可以使用一些代码在服务器端进行。服务器端解决方案的好处是来自客户端的单个文件流量,并且仅在快速网络上发送到第二台服务器。在简单的情况下,这可以实现,例如,通过在 servlet 中接收文件,将传入的数据存储到磁盘并同时通过 http 或其他协议上传到第二台服务器上的另一个 servlet。

请注意,正确设置这些选项中的任何一个都可能涉及相当大量工作、测试和维护。

S3 来了,准备使用分布式/共享存储,具有简单的 API、集成、客户端和合理的价格。对于简单的解决方案,通常每个存储的成本并不便宜,但在研发方面要便宜得多。它还可以选择通过 http 服务苍蝇和内容(平衡、可靠和分布式),因此您可以直接从 S3 主机下载客户端中的文件,也可以从您的 http 服务器进行永久或临时重定向。

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2016-08-19
    相关资源
    最近更新 更多