【问题标题】:PHP non-persistent process design vs Python/JavaPHP 非持久化进程设计 vs Python/Java
【发布时间】:2012-08-22 13:37:12
【问题描述】:

目前我正在考虑在这 3 种语言之间进行一个需要非常长正常运行时间的项目(正常运行时间比性能更重要)。

我从事 PHP 开发已经有一段时间了,不介意切换到“更好”的语言,例如 Python,或者更(可能)更专业的语言,例如 Java,但有一件事阻碍了我:

在 PHP 中,假设一个用户创建了一些格式错误/奇怪的请求,导致我的代码崩溃——只有那个用户会受到影响。其他用户可以继续发出请求,因为每个 HTTP 请求都会调用一个新的 PHP 进程。

考虑 Python 或 Java:如果用户使我的后端代码崩溃,则只有一个进程在运行,整个 web 应用程序都会崩溃,这将是一场灾难。

我的问题是,有没有一个词可以描述这两种不同的 Web 编程方法?另外,我是否遗漏了任何明显的东西,或者 PHP 真的比 Python/Java/其他持久进程方法有这么大的优势,如果是这样,为什么 Python 不采用这种方法?

【问题讨论】:

  • 这似乎更像是服务器架构问题而不是语言问题。 (虽然也许我错了;我从来没有设计过服务器。)
  • 格式错误的请求如何导致一切崩溃?
  • @ChocoDeveloper:我假设 Python/Java 有一个进程为所有请求提供服务,所以如果该单一进程出现故障,那么其他一切都会发生......
  • @ChocoDeveloper 如果格式错误的请求使一切崩溃,那么在所使用的框架中一定存在一个可怕的错误。它可能会发生......但我认为这非常罕见而且很难,它对决定使用哪种技术的影响应该很小......除非你再次尝试发明轮子;-)

标签: php python process web uptime


【解决方案1】:

我一直在寻找的是有人将我指向这样的文章:

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

Python 可以通过 WSGI 在后台持续运行,并且可以有许多解释器在等待请求。如果其中一个解释器崩溃,这不是问题,因为其他解释器正在等待,因为 Apache 可以自动重启任何崩溃的解释器。

也可以在每个请求上手动调用 Python,类似于 PHP,但速度较慢。

【讨论】:

    【解决方案2】:

    这不是特定于语言的问题。这是一个在将软件放入实际环境之前如何对其进行测试的问题。以及您如何设计服务器基础架构。

    如果您的软件中存在导致服务器崩溃的错误,您应该修复它。如果 mod_php/您的代码中存在奇怪的错误,即使 PHP 也会使整个服务器崩溃。

    如果您不想出现单点故障,则必须构建高可用性设置。 至少 2 个负载均衡器(例如 keepalived)、2 个 Web 服务器、2 个数据库服务器、2 个 ...

    您还想使用Godmon 之类的东西来监控您的流程并对所需服务的突然死亡做出反应。

    【讨论】:

    • "如果您的软件中存在导致服务器崩溃的错误,您应该修复它。如果 mod_php/您的代码中存在奇怪的错误,即使 PHP 也会导致整个服务器崩溃。"我当然应该修复它。但是你说的好像错误是完全可以避免的。我想走可以最小化错误影响的路线。
    • @MartinKonecny 如果您将 apache 与 mod_php 一起使用,则必须使用 mpm-prefork,这很慢(与其他工作人员相比)。使用 python,你也可以使用 mod_wsgi wich apache,如果你想使用较慢的 mpm-prefork(如 php,相同的“崩溃”行为)或使用守护程序模式。这就像 PHP 的 FASTCGI。是的,如果 FASTCGI 进程死亡,Apache 将在下一个请求时自动启动一个新进程。 (对于 php,对于 python,...)。您还可以使用其他服务器,例如 Tornado、Twisted 和其他十几个服务器。每个都有自己的线程模型。另一方面,java 有一个非常好的异常处理......
    • 也许我应该提到具体的技术。 Apache + mod_php + Zend 框架似乎是 PHP 最流行的,Python 是 Django,Java 是 Tomcat。
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多