2012-11-08 65 views
5

我們的網站已經開發出對實時更新的需求,並且我們正在考慮各種彗星/長輪詢解決方案。經過研究,我們已將nginx作爲4個龍捲風實例(託管在Amazon EC2上)的逆向代理。我們目前正在使用傳統的LAMP堆棧,並在PHP中編寫了大量的代碼。我們願意將我們的PHP代碼轉換爲Python以更好地支持此解決方案。這裏是我的問題:Apache/PHP到Nginx/Tornado/Python

  1. 假設四核處理器,是它確定爲nginx的到同一服務器4個龍捲風實例上運行,還是建議運行兩個單獨的服務器:一個用於nginx的和一個爲4龍捲風過程?

  2. 在Nginx之前使用HAProxy有沒有好處? Nginx不是很好地處理負載平衡嗎?

  3. 從我的研究中,Nginx似乎沒有很好的URL重定向模塊。是否優先使用Redis進行重定向?如果是這樣,Redis應該在Nginx之前,還是在後面?

  4. 大部分應用程序代碼不會涉及實時更新。此代碼包含多個數據庫查詢和文件系統讀取,因此它顯然不適用於非阻塞應用程序服務器。從我的研究中,我已經讀到阻塞問題只是通過擁有多個Tornado實例來緩解,而另一些人則建議使用單獨的應用服務器(例如Gunicorn/Django/Flask)來阻止呼叫。使用非阻塞服務器時處理阻塞呼叫的最佳方式是什麼?

  5. 將我們的代碼從PHP轉換爲Python將是一個漫長的過程。在Nginx中同時運行Apache/PHP和Tornado是否可以接受?或者我們應該堅持使用語言(龍捲風與gunicorn/django/flask還是龍捲風本身)?

回答

6

我會去點一點:

  1. 是。可以在一臺服務器上運行龍捲風和nginx。你也可以使用nginx作爲龍捲風的反向代理。

  2. 如果您有多個服務器實例,Haproxy會給您帶來好處。它也可以讓你直接代理websockets到龍捲風。

  3. 實際上,nginx可以用於重定向,沒有問題。我還沒有聽說過使用redis進行重定向 - 它是關鍵/值存儲...可能你的意思是別的嗎?

  4. 再次,您可以在django中編寫阻塞部分,在龍捲風中編寫非阻塞部分。龍捲風也有一些非阻塞的數據庫查詢庫。不確定你需要django的權力。

  5. 是的,可以在nginx後面運行apache。很多項目在Apache的前面使用nginx來提供靜態文件。

其實問題很基本 - 答案也是。如果你願意的話,我可以更詳細地說明任何一點。

+0

感謝您的快速響應! – xxjbmxx

+1

1.)我們確實計劃使用nginx作爲反向代理。我只是好奇,如果在同一臺服務器上運行,nginx進程可能會消耗足夠的資源來收縮其中一個tornodo實例。 4。)你會推薦哪些python框架用於阻塞調用(如果django是不必要的)? – xxjbmxx

+1

這絕對沒問題 - 你不會在一臺服務器上遇到nginx +龍捲風的麻煩。對於阻塞呼叫的簡單任務 - 看看Flask。如果您需要良好的管理員和簡單的數據庫模式操作工具,請使用django。 –