越来越多的观点认为分布式cache能提高系统的性能和速度,因为基于跟应用服务器不在同一个jvm中,这样可以避免内存不够带来的性能下降以及gc的性能下降,那么实际情况又是怎么样呢
我用jms (jms server是用的weblogic)完成cache的distributed,cluster功能,并用一个LRUHashMap,concurrent package作为cache核心。经过实际的测试,他的性能远远低于local cache,同时也低于用jdbc直接存取数据库(因为数据库实际上也有cache).在大量并发的请求的情况下,用jdbc直接存取数据库的性能并没有明显下降,,而cache based jms 性能明显下降
经过性能测试,发现系统性能的瓶颈是在网络传输上,他需要花掉90%的时间,而处理cache本身的速度是非常快的,甚至超过loacl cache。由此,我认为,分布式cache并不是提高性能,提高速度的好办法的,假如能优化一下数据库,那就能获得良好的性能。
那是不是cache based jms 就毫无用处了呢,这要分情况,假如你需要cache 的对象是非常复杂的,比如,一个Html页面,那么用distributed cahce觉得是最好的选择,虽然我没有实际测试,但我想总体性能一定超过了loacl cache ,以及数据库。同时,他具有cluster功能,能保证伸缩性和安全性。反过来说,假如你需要cache的仅仅是简单的记录,那用loacl cache或者直接用数据库无疑是最好的选择