问题描述
|
情况如下:
我目前有一个使用PHP服务HTML / CSS / JS的Web应用程序,该应用程序与MysqL DB通讯。完全香草和普通。 PHP是表示逻辑(HTML生成等)和业务逻辑(应用程序广泛使用Ajax进行数据请求或告诉服务器对某些内容进行更改)的混合体。
作为该系统重新设计的一部分,我从PHP中删除了所有表示逻辑。相反,我将使用连接到服务器上Web套接字网关(允许双向通信的COMET / AJAX替代品)的Ext JS 4(基于JavaScript的窗口工具箱/应用程序)。让我们挥舞一下魔杖,忘掉Ext JS 4如何传递到浏览器以及它如何与Web套接字网关通信。
我们剩下的是一个Web套接字网关(用Java编写,并在特定端口上持续运行以侦听Web套接字连接),以及一些当前用PHP编写的业务逻辑/数据库交互。
在这一点上,我看到两个选项之一:
将业务逻辑/数据库交互保留在PHP中,并通过从命令行调用PHP或让PHP / Apache在其他端口上侦听仅用于Web套接字网关的通信来执行它。
编写一个新的Java或C ++应用程序,该应用程序将是持久的,并在特定端口上侦听来自Web套接字网关的通信。业务逻辑/数据库集成是用Java或C ++代码重写的,并且是此应用程序的一部分。
用Java或C ++进行重写是否会比一遍又一遍调用PHP带来更好的性能? (PHP代码写得很干净:使用诸如CodeIgniter和Doctrine之类的包来面向对象)。
性能收益会超过重写所有业务逻辑的麻烦吗?显然取决于许多因素,例如代码量,但是您的直觉是什么?
万一可能影响您的想法/反馈,您应该知道Web套接字网关(Kaazing)支持JMS,Stomp,AMQP,XMPP或您自己构建的自定义项。
让我知道是否还有其他信息可以帮助您解决问题。
谢谢!
解决方法
我知道我在这里提到的许多解决方案都是“丑陋的”,但是您听起来像是一个想要获得结果并进行重构的人,所以我希望它可以。
首先进行简单的操作(如果我理解正确,则使用PHP)。然后运行实际的压力测试。由于您正在进行PHP调用,因此只需创建一个实际的序列(登录,更改,执行,注销)并运行您认为实际的数量即可。 100? 10000?这取决于您对这件事的期望有多大,并且仍然会保持预成型。
这一步比听起来容易。不要以为“最终的测试框架”,而是以20行的python脚本为例,该脚本运行的线程数与您想要执行的行数相同,这会使您的应用程序保持忙碌状态。如果您花费的时间超过40分钟,请停止并简化操作。您花费的时间是值得的。
如果CPU达到100,或者您用完了一些资源,则可能是时候进行重写了,或者您可能猜测花费了最长的时间并用C编写。如果您确实使用C / C ++,并且\ “它不是100%满意的,请避免进行大量重写,因为它是一种危险的语言,有很多引入错误的机会。如果适合您的应用程序,甚至可以从PHP调用已编译的代码。
我已经编写了一次服务器端HTML生成的C代码。它并不是这项工作的正确工具。 PHP可能有点骇人听闻,但可以很快完成工作。除非/直到实际需要,否则我将避免进行优化。
祝您好运,别忘了告诉我们情况如何!
编辑:如果您确实需要多种语言的解决方案,请不要忘记在清理之后!标准化您的快速操作以及在PHP中的操作,以一种通用格式进行操作,也许编写简短的自述文件。同样,那十五分钟将为您或下一个人节省几天和大量的头发。
, 几乎可以肯定,用一种编译语言(在您的示例中为Java或C ++)编写,会比诸如PHP这样的解释型语言提供更好的性能。几乎可以肯定,性能收益不会超过重写所有代码的麻烦。
,如果您的业务逻辑具有很高的处理成本,则Java或C ++将为您提供更好的性能。
如果您只是从数据库中获取某些结果,则不要期望任何性能提升。
我将做一些原型设计/测试来确定性能瓶颈。
我的观点是,如果您有数十万个对象来分析C ++岩石,而HotSpot JIT性能优化器为Java提供了好处,则PHP对于处理HUGE数据集来说太慢了。
HotSpot效果非常特定于Java中的数字运算。您确实可以看到JRE正在推动加速器,从而消除了检测到的瓶颈。在极少数情况下,HotSpot JIT优化的Java甚至可以比C更快。
在某些也非常罕见的情况下,HotSpot性能巫术会使您的代码变慢!
您是否曾经想过将PHP应用程序变成更快的Java或C ++应用程序?
也许您只想要HipHop php2cpp编译器:
https://github.com/facebook/hiphop-php/wiki/
Quercus是一个php4java运行时,可以帮助您更便宜地迁移到Java。
http://quercus.caucho.com/
有趣的是,约书亚·布洛赫(Joshua Bloch)去年谈论“绩效焦虑”。
http://www.wiki.jvmlangsummit.com/images/1/1d/PerformanceAnxiety2010.pdf
http://parleys.com/#st=5&id=2103(32分钟视频)