论坛首页 Java企业应用论坛

Spring性能小测,参其它技术

浏览 23034 次
精华帖 (2) :: 良好帖 (20) :: 新手帖 (0) :: 隐藏帖 (20)
作者 正文
   发表时间:2008-06-06  
lgx522 写道
williamy 写道

我们只是在做web app,所以我们看中的不是谁跑的快,而是用那种语言来做,容易跑的快,这个差别很大的。


终于遇到个知音,这个帖要讨论的就是这个。

扯来扯去都快跑题了,在此重申一下。

至于前面所提到的绝对数值,早已声明是没有考究意义的,就连我自己也不太当回事。
大家有兴趣可以测测自己的系统,这倒是很有必要的。以免过于追新而陷入性能泥潭。


用不同的编程语言跑web app,究竟哪个容易跑得快一点,哪个容易跑得慢一点,这是一个根本没有意义的问题。我举一个实际的例子来说明:

我以前用Java开发的web app(Hibernate/Spring/Webwork)跑下来,排除数据库的查询时间,其处理请求的速度在每个请求执行时间为:20ms ~ 200 ms之间,而我们JavaEye网站是用Ruby开发的,其处理请求的速度为每个请求:50ms ~ 500ms之间。执行速度大概有3倍的差距。

你一看到3倍的差距就会说,嘿!3倍阿,ruby太烂了,Java太强了。但实际上这个差距没有任何意义。因为用户从点击一个链接开始,到下载完毕页面,再到浏览器渲染整个页面,即使在高速局域网,也要至少2秒左右的时间。因此ruby多消耗了几百毫秒用户根本就感觉不到,特别是在互联网环境下,页面下载受带宽制约,这种差别可以忽略不计。

从服务器的角度来说,至少JavaEye网站可以证明:一台1.4万购入的PC服务器运行Ruby,可以最大支撑200万动态PV。没错,如果我改成Java,这台服务器可以支撑500万以上的PV。但问题是企业应用跑200万以上PV的应用,其硬件投资至少都是几十万级别的,因此你就算用了Java,也节省不出来1毛钱的成本。

或者你说我跑互联网就不一样。好我们假设一个每天1000万PV的网站,用Ruby需要5台服务器,用Java需要2台服务器,所以Java可以节省4.2万的硬件投资。可你不要忘记了你用Ruby,可以节省至少10万以上的开发人员成本,以及更多的维护成本。而实际上中国网站上千万PV每天的都不超过50个。

上面有个帖子说我搞互联网的,不是搞企业应用的,嘿嘿,我前后搞了七年的企业应用,参与开发、主持开发和咨询的企业应用涉及的行业有:银行、电信、电子政务、航空售票、物流、机械和教育,算不算有资格谈谈企业应用阿?

7 请登录后投票
   发表时间:2008-06-06  
我觉得楼主测的挺好的,至少给大家一个感性的认识,感谢楼主这么辛苦的测试。
如果有不服气的可以实际测测给出数据再说话。
0 请登录后投票
   发表时间:2008-06-06  
wtusmchen 写道
我觉得楼主测的挺好的,至少给大家一个感性的认识,感谢楼主这么辛苦的测试。
如果有不服气的可以实际测测给出数据再说话。


上面我已经说过了,没什么服气不服务的问题,因为哪个快一些,哪个慢一些根本就无关紧要。其实我可以做这样的测试,而且事实上我经常私下做各种性能测试,考察不同框架的性能和伸缩性表现。但是测试不同编程语言不同框架速度快一点还是慢一点,这个根本就是没有意义的事情,而且你所谓的感性认识还是个错误的认识,很可能导致你在将来的技术选型和框架设计上做出错误的决定。

2 请登录后投票
   发表时间:2008-06-06  
robbin 写道

上面我已经说过了,没什么服气不服务的问题,因为哪个快一些,哪个慢一些根本就无关紧要。其实我可以做这样的测试,而且事实上我经常私下做各种性能测试,考察不同框架的性能和伸缩性表现。但是测试不同编程语言不同框架速度快一点还是慢一点,这个根本就是没有意义的事情,而且你所谓的感性认识还是个错误的认识,很可能导致你在将来的技术选型和框架设计上做出错误的决定。


我这里也做一做测试,不管是好是赖,放上来让大家讨论一下。顺便鼓励大家都去做一做,好好考量一下自己系统的性能,至于有没有意义大家自己去判定。

如果照你的说法,这种性能测试是根本没有意义的。是不是说现在凡是可以做B/S的,语言和框架快慢是无所谓的事情,也就是说根本不用去选了。既然性能最后都大同小异了,是不是说开发效率才是唯一的标尺。

如此这般的结论,那就还是选择当前开发效率高的RoR了。
可惜,本人在现实工作中,不论是自己开发还是其它厂商的东西,在存储过程、SQL和ORM之间还是有差距的;而众所周知的Spring和EJB之间,也还是有差距的。

比如让RoR做一下库存盘点,医保结算,代码写起来是够清晰的,可惜那个速度......。换存储过程和SQL看看,还说是没有差距吗?
不要觉着是在找碴。企业应用中,尤其是大家这些年看不上眼,以为是过时的SQL+C/S系统里面,这类复杂的业务逻辑太多了。想要改朝换代,先过性能这一关。
0 请登录后投票
   发表时间:2008-06-06  
lgx522 写道
williamy 写道

我们只是在做web app,所以我们看中的不是谁跑的快,而是用那种语言来做,容易跑的快,这个差别很大的。


终于遇到个知音,这个帖要讨论的就是这个。

扯来扯去都快跑题了,在此重申一下。

至于前面所提到的绝对数值,早已声明是没有考究意义的,就连我自己也不太当回事。
其中也就Spring那部分有点现实意义,毕竟运行条件和配置是完全一样的,对于SQL vs ORM还是有点参考意义。
大家有兴趣可以测测自己的系统,这倒是很有必要的。以免过于追新而陷入性能泥潭。

另外有点有趣的是,别看Spring体系下的数值不高,却相当稳当。也就是说,笔者做这些极端测试时,CPU占用必然是99%-100%。在这种极端情况下,用其它客户端访问几乎不见慢,不知是不是共享实例的好处。至于其它的,数值高是高,压力测试下还是见慢了,怀疑是“虚高”。

由此大大恢复了对Spring的信心。近期在筹划一个区域卫生信息共享的计划。琢磨下来,Spring jdbc方案辅以适量的存储过程应该可以搞得定。


1。我不明白为什么CPU占100%
2。上面谁说ORM,jdbc,在说什么orm快,jdbc快,我只知道两个要点 一:我知道orm都是在jdbc上的,二,程序都是耗时间的
0 请登录后投票
   发表时间:2008-06-06  
robbin上面写了很多文字,其实他就是想说“应该使用合适的技术,合适的解决方案,至少他是这么做的”,其实这个是废话,很正确的,很具有指导意义的,还是废话
Java快,但是没C快,难道你用C做web?所以大公司里的构架都是乱啊,老大都不管这些小问题,他们只考虑如何度过每一天。martin flower喜欢玩些花样,我听说ari就不喜欢martin的想法
0 请登录后投票
   发表时间:2008-06-06  
williamy 写道

1。我不明白为什么CPU占100%
2。上面谁说ORM,jdbc,在说什么orm快,jdbc快,我只知道两个要点 一:我知道orm都是在jdbc上的,二,程序都是耗时间的


1、100个thread不停地冲WebServer10分钟,当然是CPU占用率100%了。这种极端测试,主要是看在这种崩溃边缘,谁还能反应正常一些。结果是Spring jdbc和纯JSP、PHP。
2、两点之间直线最短,绕了几个弯弯还想快,问问机器再说。

这种极端测试,大家也不要觉得是撑饱了没事儿干。现实当中就有大量这种平时懒散,高峰时段并发高得吓人的负载。比如大型医院每天上午的9:00-12:00,医保中心的月底结算、物流企业的盘点等等。不搞定这些要求,少不了是要被Oracle DBA数落嘲笑的。那些时候,恨不得榨干机器的最后一滴油。

当初天下闻名的奥运票务事件,如果当初多做做这种极端测试,也许就不至于放出那么不切实际的承诺,贻笑大众了。
0 请登录后投票
   发表时间:2008-06-07  
看你们讨论了这多,我看都看累了。
不过我个人认为:robbin的观点还是占上风的。
0 请登录后投票
   发表时间:2008-06-07  
我想真正做过大型系统,不管是企业应用还是互联网应用,才能深刻体会到Robbin所说的那些。
0 请登录后投票
   发表时间:2008-06-08  
楼主的测试瓶颈在SQL语句上,其得出的结论恰好说明了使用hibernate时缓存配置的重要性。

另外如果是想证明ORM的效率低下,影响应用的性能的话,那么就要考虑你为什么要用ORM了,还不是为了程序结构好些,开发简单些。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics