最近的项目会用到webservice ,以前接触过这个东东,可是也就是简单使用,对其性能方面没有过深研究过 ,最近重新拾起来把webservice的各种实现框架和原理复习了一下,发现webservice很客户化,开发实现很简单,但是性能是一个很大问题,而对于即将用于业务应用的项目,性能问题是需要重点考虑。
webservice 提供了分布式系统之间的通讯协议 ,为应用人员提供了基本数据类型、对象、数组客户端和服务器端的通讯方式。在实际应用中客户端的并发量,数据传输量会随着业务的发展逐步升级,而我们在已经选型webservice后如何调整才能满足业务量增加的需求 。 有些人可能会说,可以去做服务器集群、平衡负载 ,对,这些都是解决方案,可是还是有个问题,我们如何预期到这个问题 。自己想了一下,可以分一下步骤去做 。
1、 webservice 选型
项目启动前已经确定需要使用webservice,webservice的实现框架究竟应该选用哪一个是我们需要了解的 ,xfie ? axis ? 还是其他的 ,看一下有位前辈的测试报告。
性能测试总结报告
Axis报告
● Axis在性能测试环境中共占用内存为541MB-542MB,平均541.5MB。
● 在性能测试的运行过程中,Axis性能良好,没有出现程序中断或者内存益处的状况。
● Axis在该性能测试中的运算效率为 82.05s/n。
● 总评,Axis性能比较稳定,占用系统资源较少,运算效率一般。
XFire报告
● XFire 在性能环境中共占用内存为 535MB-536MB,平均为 535.6MB。
● 在性能测试的运行过程中,XFire性能卓越,没有出现程序中断或者内存益处的状况。
● XFire在该性能测试中的运算效率为 142.86s/n。
● 总评,XFire性能卓越,占用系统资源较少,运算效率高。
暂不管前辈是怎么测试得出的结果,总体来看xfire还是优于axis的。
2、接口实现讨论
开始我们已经提到了,webservice可以支持基本数据类型、自定义对象、数组的数据传输,可是在实际应用中应该使用那种方式呢 ,或者那种方式适合我们呢 ?
从网上看了一些相关的帖子,大家在使用webservice时为了避免出现性能问题,都在尽量使用传输小数据量的基本数据类型,可是在一些大型应用中对象传输是不可以避免的,我们该怎么办 ? 下边是一个对比的例子。
1. 直接返回DataSet对象
特点:通常组件化的处理机制,不加任何修饰及
处理;
优点:代码精减、易于处理,小数据量处理较快;
缺点:大数据量的传递处理慢,消耗网络资源;
建议:当应用系统在内网、专网(局域网)的应用
时,或外网(广域网)且数据量在KB级时的
应用时,采用此种模式。
2.返回DataSet对象用Binary序列化后的字节数组
特点:字节数组流的处理模式;
优点:易于处理,可以中文内容起到加密作用;
缺点:大数据量的传递处理慢,较消耗网络资源;
建议:当系统需要进行较大数据交换时采用。
3.返回DataSetSurrogate对象用Binary序列化后的字节数组
特点:微软提供的开源组件;
下载地址http://support.microsoft.com/kb/829740/zh-cn
优点:易于处理,可以中文内容起到加密作用;
缺点:大数据量的传递处理慢,较消耗网络资源;
建议:当系统需要传输中文数据或需要加密时采用此种方式
4.返回DataSetSurrogate对象用Binary序列化并Zip压缩后的字节数组
特点:对字节流数组进行压缩后传递;
优点:当数据量大时,性能提高效果明显,
压缩比例大;
缺点:相比第三方组件,压缩比例还有待提高;
建议:当系统需要进行大数据量网络数据传递时,
建议采用此种可靠、高效、免费的方法。
测试用例:SqlServer2000数据库,数据量大小40000行,
看到以上内容,对于接口的定义我们心里有一些依据了。
3、 webservice服务性能测试
选型也做好了,接口也定了,可是还是不放心,我们的方案能满足业务的要求吗? 或者说业务预期的业务量有多大,我们的系统什么时候就该升级了,这些不是谁凭空就可以说出来的,都需要拿数据说话 。那我们就得测试一下我们的接口究竟能支持多大的数据量 。
测试工具 soapui
开发语言:Java
操作系统:跨平台
项目主页:http://www.soapui.org/
文档地址:http://www.soapui.org/userguide/index.html
下载地址:http://sourceforge.net/project/platformdownload.php?group_id=136013
测试方法看这位老兄的http://tech.it168.com/a2009/0806/619/000000619515.shtml
4、服务器集群
哈哈,终于该考虑集群的方案 ,任何软件系统的实现都不能脱离硬件,软件如何优化如果没有硬件的支持也是白搭 。 服务器集群究竟该怎么做才是最优的,现在我没有什么经验 ,到时候还是问专家吧,呵呵 。