2008-10-08 55 views
5

爲了減輕Apache的負載,人們經常建議使用lighttpd來提供靜態內容。apache + lighttpd前端代理概念

例如http://www.linux.com/feature/51673

在此設置中,Apache通過mod_proxy將靜態內容的請求傳遞迴lighttpd,同時爲自己提供動態請求。

我的問題是:這是如何減少服務器上的負載?既然你還有一個apache進程產生了每一個請求進來,這是如何積極影響負載?從我所看到的通過lighttpd代理它的請求的Apache進程的大小與它在服務文件本身時的大小相同。

回答

8

運行Lighttpd的背後 Apache來提供靜態文件當然似乎新空房禁地到我。 Apache仍然需要解包HTTP數據包,並通過解析樹解析請求,發送代理請求,然後Lighttpd必須重新解包,命中文件系統並通過Apache發回文件。我從來沒有聽說有人在生產中使用這種設置。

你會發現,人們使用輕量級網絡服務器,如Nginx作爲前端服務器,以向Apache提供靜態文件和代理動態URL。或者,您可以運行VarnishSquid作爲緩存反向代理前端,以便您所有高流量的靜態文件(即圖像,CSS等您願意發送緩存友好標題的任何動態頁面)都是內存不足。

也可以優化Apache以提供靜態文件 - 通常當我聽到人們抱怨Apache時,他們真的不知道如何配置它。他們只使用過prefork MPM(與線程或工作者)並且啓用了各種模塊(通常它們是從Linux發行版的廚房接收器Apache包運行的,它將所有內容構建爲模塊,並默認啓用10-20模塊或更多)。首先關閉不需要的模塊/愚蠢功能,例如支持.htaccess(它使Apache在每個請求上掃描文件系統!),從而調整Apache。 (你也可以運行Apache的兩個實例,用一個「輕量級」的Apache作爲前端代理動態請求的「重」Apache ...也許你的前端是線程化的,但是你的後端是prefork,因爲你必須運行線程不安全外部模塊,比如mod_php的)

回覆:

既然你還有一個Apache進程 催生了爲每一個在談到 要求,請問如何積極影響 負荷?從我可以看到,通過lighttpd代理其 請求的Apache進程的大小 與如果它服務於 文件本身一樣大 。

如果您在每個請求中產生進程,那麼這意味着您正在使用prefork MPM。請記住,當操作系統報告每個進程的內存使用情況時,並不是所有內存都是有線的,但很多這些進程是空閒的。而當你談論速度時,你更關心請求解析和給定請求的內部代碼分支(服務器執行多少處理?),而不是操作系統報告的內存使用情況。例如,如果你啓用了類似mod_php的東西,那麼每個工作進程將立即增加大約20-40M(取決於你的PHP解釋器啓用了什麼),但這並不意味着Apache是在靜態請求中使用該內存。當然,如果你正在優化你的服務器以獲得最小的靜態文件的併發性,那麼啓用mod_php仍然會非常糟糕,你無法將幾乎所有的prefork進程放入RAM中。

我也許可以想出一個「噩夢配置」爲Apache是​​使之能更慢提供靜態文件的時間比進行代理這些請求到後端Lighttpd的,但它會涉及使像Apache中的.htaccess昂貴的功能,在Lighttpd中被禁用,所以它不太公平。

0

您沒有爲每個請求生成的Apache進程 - 靜態文件(圖像等)由lighttpd直接提取。

1
  1. 如果仍然有能力滿足來自同一臺機器靜態和動態內容(因爲他們在你的referenced article做),那麼我真的看到該設置是沒有意義的。
  2. 也許它確實減少阿帕奇的負荷,因爲它沒有做IO到磁盤,但會增加Lighttpd的的負載上在同一臺機器,從而減少了可用負荷apache和。 ..
  3. 也許Lighttpd IO訪問比Apache 1.3輕,但爲什麼不直接切換到Apache 2或Lighttpd?如果性能真的開始糟糕,將靜態文件託管在另一臺機器上(media.yourdomain.com)。

我小的介紹瞭如何做一個高性能的設置是在這裏找到: Deploying Django - >滾動到Scaling一些頁面月底前

0

我不知道很多關於Apache的內部運作,但我見過的一個解釋是關於記憶壓力。簡而言之,Apache試圖平衡它用於緩存和動態頁面的內存;但通常最終會導致緩存過多,而對於應用程序來說太少。如果你將它們分開到不同的進程,每個進程都會針對這種負載進行優化。

目前,我在做的是使用nginx作爲前端。它非常快速和輕便,並且專門設計爲前端代理;但也提供靜態文件。實際上,由於它也可以調用FastCGI進程,因此可以擺脫Apache,並且仍然可以獲得拆分文件/應用程序進程的好處。 (和有一些額外的memcached magic,絕對的天才)

(是的,lighttpd的,也可以作爲前端到Apache和/或快速)

0

使用Apache MPM Worker fastcgi這會降低您的服務器內存使用量。 MPM工作者比Prefork更好地提供靜態內容,並且在靜態內容方面與lighttpd差不多。

+0

CGI進程將消耗其餘的差異;) 這根本不會有所作爲。 – 2009-04-22 13:35:55