2012-08-28 19 views
4

目前我正在考慮這三種語言之間的項目,這將需要非常高的正常運行時間(正常運行時間比性能更重要)。PHP非持久性流程設計vs Python/Java

我一直是一個PHP開發人員一段時間,並不介意轉換爲「更好」的語言,如Python或更多(可能)更專業,如Java,但有一件事情讓我回想起來:

在PHP中,假設有一位用戶創建了一些格式不正確/奇怪的請求,導致我的代碼崩潰 - 只有那個單用戶會受到影響。其他用戶可以繼續發出請求,因爲每個HTTP請求都會調用一個新的PHP進程。

考慮Python或Java:如果用戶崩潰我的後端代碼,只有一個進程正在運行,整個web應用程序崩潰,這將是一場災難。

我的問題是,有沒有一個詞來描述這兩種不同的網絡編程方法?另外,我是否錯過了任何明顯的東西,或者PHP真的比Python/Java /其他持久化過程方法具有更多的優勢,如果是這樣,爲什麼Python不採用這種方法?

+1

這似乎更像是一個服務器體系結構問題,而不是語言問題。 (雖然也許我錯了,但我從來沒有設計過一臺服務器。) –

+1

畸形的請求會如何使一切都崩潰? – ChocoDeveloper

+0

@ChocoDeveloper:我假設Python/Java有一個處理所有請求的單一進程,所以如果這個單獨的進程出現故障,那麼其他所有的都是這樣。 –

回答

1

我一直在尋找的是有人點我這樣的文章:

http://www.electricmonk.nl/docs/apache_fastcgi_python/apache_fastcgi_python.html

Python可以通過WSGI在後臺持續運行,可以有很多interpreteres等待請求。如果其中一個解釋器崩潰,這並不是一個問題,因爲其他解釋器正在等待,並且由於Apache可以自動重新啓動任何崩潰的解釋器。

Python也可以在類似於PHP的每個請求上手動調用,但是這比較慢。

0

這不是一個特定於語言的問題。如果在將軟件放入實時環境之前測試軟件,這是一個問題。以及你如何設計你的服務器基礎設施。

如果您的軟件中存在導致服務器崩潰的錯誤,那麼您應該修復它。如果在mod_php /你的代碼中有一個奇怪的錯誤,即使PHP也會崩潰整個服務器。

如果您不想單點故障,則必須構建高可用性設置。 至少2個負載均衡器(例如用keepalived),2個Web服務器,2個Databaseservers,2 ...

你也想使用類似Godmon來監控你的流程,並就所需服務的猝死反應。

+0

「如果您有你的軟件中的一個錯誤會導致服務器崩潰,你應該修復它。即使PHP在mod_php /你的代碼中有一個奇怪的錯誤,也會導致整個服務器崩潰。「當然,我應該修復它。但是你說話就好像bug是完全可以避免的。我想走一條可以最大限度地減少錯誤影響的路線。 –

+0

@MartinKonecny如果你在mod_php中使用apache,你必須使用mpm-prefork,這很慢(與其他工作者相比)。如果你想用較慢的mpm-prefork(如php,相同的「崩潰」行爲)或使用守護進程模式,則可以使用python來使用mod_wsgi。這就像FASTCGI for PHP。是的,如果FASTCGI進程死亡,Apache會在下一個請求時自動啓動一個新進程。 (用於PHP,用於Python,...)。你也可以使用其他服務器,如龍捲風,扭曲,和其他十幾個。每個人都有自己的線程模型。另一方面,Java有一個極好的異常處理... – jfried

+0

也許我應該提到具體的技術。 Apache + mod_php + Zend Framework似乎最受PHP,Django for Python和Tomcat for Java的歡迎。 –