知识卡片

"有状态会话Bean性能差"是无稽之谈:用负载测试代替直觉

普通读书笔记卡

内容

业内流传一种说法——既然无状态会话Bean性能更好,应该尽量避免使用有状态会话Bean。作者直接反驳这个说法:”坦白地说,这是胡说”,并给出了具体的验证方式而非空口反驳:对同一个应用分别用有状态和无状态会话Bean跑负载测试,实际比较两者是否真有性能差异。作者引用了ThoughtWorks的实测结果——用负载测试程序模拟几百个并发用户使用系统,并没有发现有状态会话Bean对性能造成什么影响。基于此,作者的建议是:如果性能不是关键顾虑,就该选有状态会话Bean,因为它明显更简单;真正该谨慎对待有状态会话Bean的理由并不是性能,而是故障恢复问题(这取决于具体的应用服务器厂商是否支持相关能力),性能差异只有在负载压力足够大的场景下才可能真正显现出来。可迁移启发:技术圈里流传的”某某方案性能差,应该避免”这类经验之谈,往往源自某个特定场景下的观察被泛化成了普适规则;面对这类说法,与其凭直觉全盘接受或全盘否定,更可靠的做法是针对自己的实际场景做一次有代表性的负载测试——测量出来的具体数字,比人云亦云的性能印象更值得信赖,也更能帮你把决策焦点放到真正重要的顾虑(比如这里的故障恢复能力)上。

参考来源

- 位置:《企业应用架构模式》第二部分"模式"之"第17章 会话状态模式"之"17.2.1 运行机制"(源文件:_epub-src/OEBPS/Text/000206.html) - 结论依据:原文说明"很多人提出,既然无状态会话bean性能更好,应该尽量避免使用有状态会话bean。坦白地说,这是胡说。可以对在应用中使用有状态和无状态会话bean分别进行负载测试,看是否有区别。ThoughtWorks用负载测试程序模拟几百个用户并发使用系统,没有发现有状态会话bean对性能有影响。如果性能不是很重要,应该使用有状态会话bean,因为它们更简单",直接支撑本卡结论。 - 原始内容:有些别的原因导致需要谨慎使用有状态会话bean——故障恢复会成问题,这要看你的厂商,而性能差异只在负载很大的情况下才会体现出来。