2011-06-12 52 views
2

我是一個用Python開發的新手,我正在將我需要的信息拼湊在一起,以便在另外兩個開放問題中做出明智的選擇。 (這不是重複的)。Apache + mod_wsgi/Lighttpd + wsgi - 我會看到性能差異嗎?

我沒有開發使用框架,而是使用gevent庫從頭開始構建web應用程序。就前端Web服務器而言,似乎我有三種選擇:nginx,apache和lighttpd。

從我讀過的所有帳戶中,nginx的mod_wsgi並不合適。

這留下了兩個選擇 - lighttpd和Apache。在重負載下,我會看到性能和內存消耗特性方面的主要差異嗎?我受到印象的困擾即使不使用prefork,Apache往往仍然渴望內存,但我不知道lighttp適合Python應用程序。

對apache使用lighttpd是否有任何警告或好處?我真的很想聽到你可能帶給我的所有信息!

回答

4

阿帕奇...

Apache是​​目前使用最廣泛的Web服務器在那裏。這是一件好事。有很多關於如何使用它的信息,當出現問題時,有很多人知道如何解決它。但是,它也是最慢的。與Lighttpd相比,需要大量的調整和更強大的服務器。在你的情況下,使用Apache和Python來實現它將會容易得多。那裏有無數的AMP軟件包,以及許多關於如何設置python並使您的應用程序正常工作的指南。快速的谷歌搜索會讓你走上正路。 Lighttpd在重負載下將勝過Apache,但Apache就像一列火車。它只是一直在徘徊。

優點

  • 廣泛的用戶羣
  • 通用支架
  • 很多插件

缺點

  • 慢開箱
  • 的需要性能調整
  • 內存妓女(沒辦法,你可以得到它的工作在64MB VPS)

Lighttpd的...

Lighttpd的是新的孩子在塊。它速度快,功能強大,並且踢出屁股性能明智(更不用說像沒有記憶的使用)。開箱即用,Lighttpd用Apache擦拭地板。但是,並不是很多人知道Lighttpd,所以讓它工作更難。是的,它是第二常用的網絡服務器,但它沒有太多的社區支持。如果你在這裏看看,在stackoverflow上,這個傢伙一直在問如何讓他的Python應用程序工作,但沒有人幫助他。在負載很重的情況下,如果配置正確,Lighttpd將會預製Apache(我之前做過一些測試,並且您可能會看到每秒請求的性能提高200-300%)。

優點

  • 快速開箱
  • 的使用很少的內存

缺點

  • 沒有儘可能多的支持,例如Apache
  • 有時是行不通的

Nginx的 如果你正在運行一個靜態的網站,那麼你可以使用nginx的。你說nginx的mod_wsgi不合適。

結論 好處?有兩個Web服務器;旨在能夠相互替換。如果兩個網絡服務器都正確調整,並且硬件足夠多,那麼使用這兩個服務器並沒有真正的好處。你應該嘗試看看哪個Web服務器滿足你的需求,但問我;我會說跟Lighttpd一起去。在我看來,它更容易配置和正常工作。

另外,你應該看看切諾基Web服務器。瘋狂易於設置,性能不壞。你也應該在服務器故障上提出這個問題。

+0

謝謝。看起來我會花更多的錢在硬件上。 Apache看起來是明顯的贏家,尤其是在進一步研究之後,lighttpd不支持WSGI。 – Matty 2011-06-12 02:07:49

+0

我剛剛看到一篇文章,並沒有看到有關WSGI的部分。是的,如果你使用WSGI,Apache是​​一個明顯的贏家。本文詳細介紹瞭如何使用兩臺服務器來提高性能:http://www.inerciasensorial.com.br/2009/08/23/perils-of-software-development/apache-mod_wsgi-django-lighttpd/ – Colum 2011-06-12 02:11:45

1

你提到gevent很重要。這是否意味着您正在專門嘗試實施長輪詢應用程序?如果你是,那功能就是應用程序的大部分,那麼你需要把你的gevent服務器放在一個前端Web服務器後面,這個前端Web服務器使用異步技術而不是流程/線程模型來實現。 Lighttd是一個異步服務器,適合那個賬單,而Apache不是。因此,使用Apache不適合作爲長輪詢應用程序的前端代理。如果這是標準,但實際上建議你使用nginx而不是Lighttpd。

現在,如果您沒有進行長輪詢或其他任何需要長時間運行的併發請求,那麼使用gevent並不一定會獲得太多,特別是如果打算在頂部使用WSGI層。對於WSGI應用程序,最終不同服務器之間的性能差異很小,因爲您的應用程序不太可能成爲基準測試人員都在使用的hello world程序。真正的瓶頸不是服務器,而是你的應用程序代碼,數據庫,外部標註,缺少緩存等等。鑑於此,你應該只使用你最初使用的任何WSGI託管機制,並且當你正確地制定出什麼託管要求適用於您的應用程序,基於實際的實際應用程序進行測試,然後您可以根據需要切換到更合適的位置。

總之,你只是在浪費你的時間,試圖通過嘗試找到什麼可能是理論上最好的服務器過早優化,當在實踐中你的應用程序是你最初應該集中的。之後,您還應該查看應用程序監視工具,因爲如果沒有監視工具,您甚至將如何確定一個託管解決方案是否比另一個更好。