2

我正在技术上指定一个文件上传 API,该 API 将处理大量大 (250MB+) 文件。

我想尽可能避免的是网络服务器在文件上传期间占用了整个内存负载,我知道在某种程度上是可以避免的。

此外,我不能使用 Flash 或 Silverlight 来拆分文件,这可能会显着减少内存使用量。

我了解 PHP 在很大程度上依赖于其主机 Web 服务器软件的上传性能。考虑到这一点,Apache 是最适合这项工作的,还是我应该考虑使用 nginx 或其他?

如果 PHP 本身是最大的瓶颈,那么是否值得考虑某种混合解决方案?如果是这样,它会是什么语言?

4

3 回答 3

2

尽管 Daniel Ribeiro 说了什么,我还是建议您让这些上传远离 Apache。您需要一个基于事件的服务器(Apache 的实现很好,但恕我直言,不如 nginx / lighttpd 好)。问题只是间接地出现在内存上——它与客户端数量和带宽有关。拆分文件并没有真正的帮助。

OTOH,没有什么可以阻止您使用 nginx 来处理上传和 apache 来为网站的其余部分提供服务。

您将从调整 TCP/IP 堆栈以处理 LFN(大拥塞窗口、tcp 窗口缩放)中获得很多好处。

我了解 PHP 在很大程度上依赖于其主机 Web 服务器软件的上传性能

上传的性能与 PHP 无关,除非您尝试使用原始套接字/Web 套接字和后端的 PHP 实现上传。实际上,从 nginx 调用(分叉)PHP 解释器来处理文件是有意义的——因为这仅在文件上传时启动

于 2012-04-12T16:18:53.540 回答
1

您可以同时使用 Apache 和 Nginx,这真是太棒了!

两者之间的一些比较是:

  • Apache 是一个基于进程的服务器;nginx,一个基于事件的服务器。
  • Nginx 和 Lighttpd 可能是最著名的两个异步服务器;
  • Apache 无疑是最著名的基于进程的服务器。

更多信息在这里

于 2012-04-12T16:01:28.667 回答
1

我会考虑将nginx文件上传模块一起使用,因为您可以避免通过 PHP 传递上传。

于 2012-04-12T16:03:41.510 回答