为了减轻Apache的负担,人们经常建议使用lighttpd来提供静态内容。
e.g。 http://www.linux.com/feature/51673
在此设置中,Apache通过mod_proxy将静态内容请求传递回lighttpd,同时自动提供动态请求。
我的问题是:这如何减少服务器上的负载?由于每个请求都会产生一个apache进程,这对负载有何影响?从我可以看到,通过lighttpd代理其请求的Apache进程的大小与它为文件本身提供服务时一样大。
答案 0 :(得分:9)
在 Apache后面运行Lighttpd 来提供静态文件肯定对我来说是个脑子。 Apache仍然必须解压缩HTTP数据包并通过其解析树解析请求,发送代理请求,然后Lighttpd必须重新解压缩,命中文件系统并通过Apache发回文件。我从来没有听说有人在制作中使用这样的设置。
您将看到的是,人们使用像Nginx这样的轻量级网络服务器作为前端服务器来为Apache提供静态文件和代理动态URL。或者,您可以运行Varnish或Squid作为缓存反向代理前端,以便所有高流量静态文件(即图像,CSS等和任何动态页面你愿意发送缓存友好的标题,是为内存提供服务。
Apache也可以进行优化以提供静态文件 - 所以当我听到人们抱怨Apache时,他们真的不知道如何配置它。他们只使用了prefork MPM(与线程或工作者相比)并且启用了各种模块(通常它们是从Linux发行版的厨房接收器Apache程序包运行的,它将所有内容构建为模块并默认启用10-20模块或更多)。通过关闭不需要的模块/愚蠢的功能来调整Apache,例如支持.htaccess(这使Apache在每个请求上扫描文件系统!)。 (你也可以运行两个Apache实例,一个“轻”的Apache作为前端代理一个“重”的Apache动态请求...也许你的前端是线程的,但你的后端是prefork因为你必须运行线程不安全外部模块,如mod_php。)
回复:
因为你还有一个apache进程 产生的每一个请求都会产生 在,这是如何产生积极影响的 负载?从我可以看到的大小 Apache进程代理它的 通过lighttpd请求同样大 因为它将服务于 归档。
如果您在每个请求中生成进程,那么这意味着您正在使用prefork MPM。请记住,当操作系统报告每个进程的内存使用情况时,并非所有内存都已连接,很多进程都处于空闲状态。当你谈论速度时,你更关心的是请求解析和给定请求的内部代码分支(服务器处理多少处理?)而不是操作系统报告的内存使用情况。
例如,如果你启用类似mod_php的东西,那么每个工作进程将立即上升大约20-40M(取决于PHP解释器中启用的内容),但这并不意味着Apache正在使用静态请求上的内存。当然,如果你在小型静态文件上优化服务器以获得最大的并发性,那么启用mod_php仍然会非常糟糕,你将无法在RAM中安装几乎同样多的prefork进程。
我可能会为Apache提出一个“噩梦配置”, 使其实际上比静态文件服务更慢,而不是将这些请求代理到后端Lighttpd,但它将涉及启用昂贵的功能,如。 Apache中的htaccess在Lighttpd中被禁用,所以这不太公平。
答案 1 :(得分:2)
我在这里找到了如何进行高性能设置的简介:
Deploying Django - >在结尾之前滚动到Scaling
某个页面
答案 2 :(得分:0)
您没有为每个请求生成Apache进程 - lighttpd直接获取静态文件(图像等)。
答案 3 :(得分:0)
我对Apache的内部运作知之甚少,但我看到的一个解释是关于内存压力。简而言之,Apache试图平衡它用于缓存和动态页面的内存;但通常最终会有太多的缓存和太少的应用程序。如果将它们分成不同的流程,每个流程都会根据负载类型进行优化。
目前,我正在做的是使用nginx作为前端。它真的快而轻,专门设计为前端代理;但也提供静态文件。事实上,既然它也可以调用FastCGI进程,你可以摆脱Apache并仍然可以获得分割文件/应用程序进程的好处。 (还有一些额外的memcached magic看起来绝对天才)
(是的,lighttpd也可以用作Apache和/或FastCGI的前端)
答案 4 :(得分:0)
使用Apache MPM Worker fastcgi这将降低服务器内存使用量。 MPM工作者提供比Prefork更好的静态内容,并且在静态内容方面几乎与lighttpd相当。