php7性能甩java几条街,Java视线论坛 :: 阅读主题 - Java为什么不能动态部署,为什么没有PHP/RoR简单...

引用:

而实际上呢?将内存ram作为存放该session临时文件的文件系统,效率一点不差。

即使这样,还是要通过操作系统的文件系统API,效率和JVM内部API调用差距还是有很大的。不过这种方式最大的问题在于可移植性。 如果不是在Linux上面运行,你怎么办呢?更何况在内存设置RAMDisk,是不能够动态伸缩的,多了太浪费,少了又不够用,你怎么办呢?

引用:

而实际上呢?排除session的原因,我发现操作系统级的群集最简单、效率最高、最可管理。

老实说,情况并不完全如此。操作系统群集的配置想对比应用服务器级别来说粗略的多。比如某银行应用,在三台机器上面部署了8个Websphere实例,如何实现根据权重的负载分配,如何实现Session的粘着访问,如何根据不同的应用负载公式分配到不同的实例去等等,操作系统群集控制不到这么细。如果是一个群集负载方案设计的比较复杂的情况下,操作系统群集经常是很难满足需要的。

引用:

而实际上呢?它们根本没有真正OO意义上的对象。 缓存的目的是什么呢?如果将提升网站响应时间作为最终目的,那么应该缓存的是HTML页面,而不是对象。

对象缓存的主要目的是减少对数据库的访问,因为大部分web应用瓶颈都是数据库数据存取。对于一个高点击率的数据库型web网站,使用对象缓存是提升性能最有效的途径,俗话说缓存才是王道!对于PHP/RoR来说,这个级别的缓存是没有的,所以同样负载的吞吐量,Java要高得不止一个数量级。

而PHP/RoR缓存页面的能力必须在前端放置sqiud proxy来实现,那么整个网络的拓扑也相当复杂,自然没有Java的OSCache在web.xml里面配一下就搞定来得爽了。

引用:

基于Apache2 API的PHP的数据库连接池module其实也不难开发,但是我还没看到一个广泛使用的、成熟的。

Apache运行mod的方式基本上是来了请求就创建/预创建进程,用完了就释放,因此无法持有一个全局共享实例来提供所有的进程来访问。因此从原理上来说,就无法实现连接池机制。(PHP的长连接那不是连接池,也有严重的问题)

这个问题引申一下,就是Java服务器端很多能力都来自于有一个应用服务器的概念,从应用服务器一启动,就有一个JVM进程一直在跑,因此可以在JVM的生命周期范围内持有全局共享实例,这个JVM范围内的任何线程都可以访问和存取共享实例,因此诸如数据库连接池、HTTPSession,对象缓存等等功能都可以支持的很好。不过他的一个负面影响就是极大的增加了开发和部署的难度。

但是我认为,对于性能要求比较高,或者应用比较复杂的项目来说,这种应用服务器机制是非常必要的,他提供了在这种情况下所必须的所有的基础设施,如上面列举的这些。

事实上PHP/RoR正好反过来,在抛弃应用服务器概念的同时,也放弃了高端应用的可能性,因为应用服务器概念的缺失导致各个请求之间无法共享全局实例,请求之间无法直接通讯,因此很多基础设施都不具备。

举个最简单的例子来说,我要做一个网页计数器,每个页面被访问的时候加1。就这么个简单的功能,你用PHP/RoR就做不好!

如果是Java那很简单,定义一个类的public static 属性,每个JSP页面都可以访问到它,加1就是了,最多在加1的时候同步一下,就搞定了。分析一下背后的原理,这是因为JVM一直在跑,这个计数器全局实例可以被所有的请求线程访问到。

但是换了PHP/RoR你就没辙!他没有一个应用服务器概念,所以你没有办法定义保持住状态的全局共享实例,每个请求进程执行完就销毁了。你要实现计数器,就必须考虑如何实现进程间通讯,而且还要考虑如何开辟一块操作系统共享内存去存放计数器,最后又怎么释放操作系统共享内存的问题,搞不好,内存就溢出了。我以前做PHP的时候就面临过这样的困扰,不得以,就只能把计数器保存到一个硬盘文件中,所有的访问进程都去存取这个硬盘文件,这效率就可想而知了。

其实RoR的一个重大缺陷也就在于此,RoR是没有数据库连接池的。像这种PHP/RoR的运行方式一旦系统的负载到一定的程度,你往往找不到理想的解决方式,而J2EE就可以有各种手段来很方便的扩展。这方面一个活生生的例子就是eachnet,开始用PHP,后来撑不住了,用Java给它做了页面缓存,还在后端使用BEA的Tuexdo中间件,不过最后还是全部迁移到J2EE平台。

BTW:虽然用PHP跑的网站也很多,有些负载也相当不俗,不过你可以发现一个现象,一旦负载上去了,PHP网站的性能就一落千丈,最后往往不得不依靠动态页面静态化来解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值