提供静态文件的最快/可扩展的方式?

提供静态文件的最快/可扩展的方式?

有哪些选项可以非常快速地提供静态文件?

是否有任何选项允许将文件缓存在服务器内存中等?例如将 js 文件缓存在内存中。

我知道 nginx,但它仍然每次都会读取硬盘文件,而我想要做的是通过将它们存储在内存中来减少磁盘的 I/O。

我每秒对 js 文件有大约 1000 个请求,它们会减慢服务器速度,有时甚至会导致 apache 崩溃。

除了 Nginx,在 CentOS 5.6 上还有什么其他替代方案可以运行 LAMP 栈

答案1

RAM 肯定比磁盘快(如果您需要详细信息,请查看每个人都应该知道的数字)。

如果你的 Web 服务器上有足够的内存,你可以制作一个 RAM 磁盘。如果你有多个系统,也许可以制作类似memcached会更好。

答案2

宙斯是我所知道的最快的网络服务器。启动时将所有内容复制到 RAM 磁盘...

如果您想要/需要坚持使用 LAMP 堆栈,那么 Apache 有用于静态内容的加速模块,而且像 Squid、Vanrish 或 HAProxy 这样的前端反向代理也可以提供帮助。

根据您需要“更快”服务器的原因(在这种情况下是一个毫无意义的术语),您可能会受益于负载平衡场或其他互联网连接。

答案3

我知道nginx,但是它每次还是会读取硬盘的文件

不,它不会每次都从磁盘读取文件。由于您使用的是 CentOS,因此使用的是 Linux 内核,因此它肯定会将经常访问的文件和目录条目缓存到 RAM 中。

要么是您的“热”静态文件数量比服务器的 RAM 多得多,要么是其他东西占用了您的磁盘 I/O。对于任何合理的 Web 服务器软件来说,几千个静态文件请求应该都是小菜一碟。即使 Apache 也应该可以处理,尽管 lighttpd 或 nginx 可能更适合这项任务,尤其是在静态文件很大的情况下。

也许日志级别太高,以至于不断写入会折磨 HD?如果是那样,并且您需要存储日志,请考虑通过网络将日志发送到单独的中央系统日志服务器。

答案4

我赞同使用 Varnish 之类的缓存系统的建议。根据您的需要,如果您有一些动态内容,我建议进行如下设置:

使用 Varnish 作为前端,Apache 和 Nginx 作为后端。当请求的内容未缓存时,它 (Varnish) 会将请求传递给 Apache 以获取动态内容,并将请求传递给 Nginx 以获取静态内容。

这样,您的大部分内容都存储在 RAM(Varnish 缓存)中。Varnish 是一款速度极快的缓存服务器/反向代理(也可以配置为多台服务器的良好负载平衡器)。

相关内容