上次用Coherence实现缓存数据同步的transport manager之后,对它进行了压力测试并和Tibco EMS JMS和 OracleAS JMS(内存)进行了性能对比。
测试需求
Title1. 要在多个jvm之间实现缓存的数据同步。
2. 要对增删改查同时进行测试。
3. 大量数据
4. 多线程
5. 测试结果记录
6. 晚上偷偷摸摸的进行
解决方案
Title1.Oracle AS的每个OC4J Instance是可以设置JVM个数的,而jvm之间的数据同步则需要自己完成。这为测试提供了服务场所,每次request随机地被dispatch到不同的jvm中执行
2.增删一个线程类:主要完成不停的插入数据不停地删除插入的数据
修改一个线程类:主要完成不停地修改已创建的数据,修改后把toplink cache中的数据读出来,检验一下数据是否被同步了。
查询一个线程类:主要完成不停地从数据库中查询批量的数据
3.大量数据: 预先先创建了2万个Employee(测试数据,基于乐观锁)。
4.多线程:可配置每个线程类的线程数。用一个monitor线程控制各个线程的执行。
5.测试结果记录到db中,sql语句写起来还是比分析文件快一点
6.每天拖班
运行测试之前,根据不同的情况,需要修改一下配置文件, 需要配置文件主要是方便在各种同步方案之间切换, 也方便我们更换不同的测试环境, J2EE container和 Oracle DB:tts.properties
#one of jms,rmi,oasjms,coherence or set it blank
toplink.cache.type=jms
#the name of toplink command channel
toplin.command.channel=Toplink Coherence
#the config is used for stress test
#not use datasource
database.driver=oracle.jdbc.OracleDriver
database.url=jdbc:oracle:thin:@luga:1521:lugadb
database.username=gavin
database.password=gavin
#using datasource
database.dataSource=
#thread number
#default30read.thread.number=20#default10update.thread.number=10#default10create.thread.number=10#time unit is minute default30test.run.duration=360
#url
test.server.url=http\://localhost\:7778
toplink.cache.type可以为jms, oasjms, rmi, coherence或者不填。
test.run.duration:: 执行时间单位分钟
datasource:配了datasource就会首先使用datasource
实现技术;
1.服务器端(Oracle Application Server):servlet接受请求并对employee做相应处理,计算测试结果
2.客户端(Eclipse):commons-httpclient多线程发送请求,记录测试结果
测试结果:
三者都成功实现了数据在多个jvm之间的及时同步, 性能上比较
Oracle AS JMS (内存)> EMS JMS>Oralce Coherence
如何实现toplink 自定义的transport manager:Oracle Coherence实现toplink会话缓存的数据同步