Spring Boot Java 和MS.NET Core中RESTful应用的性能比较
关键词:性能比较,Spring Boot Java,MS.NET Core,RESTful应用
摘要:作为一种新兴的架构,RESTful由于其的轻量级特性而在Web服务/应用程序的开发界引发了热潮。虽然越来越多的组织正在采用基于RESTful的服务,但是在进行实际部署时,开发团队们经常下意识的采用支持自己惯用技术的平台而非寻找性能更优的方案。考虑到各个平台的内部架构与实现方式会极大程度的影响其效率与性能,本文的研究目标是评估与比较实现在Spring Boot Java平台和MS.NET Core平台的RESTful网页应用的性能。作为测试对象的程序在两个平台中均实装了增删改查四个基本功能,并且由Apache JMeter自动化的性能测试工具创建了大量虚拟用户进行性能压力测试,所获得的试验结果在本文结尾处进行了展示与分析。
- 介绍
网络服务(Web service)是用于创造前后端分离的分布式应用(C/S)的关键一环。如今,互联网上无处不在的网络应用程序使得教育、政府、商业以及其他各种各样的部门有可能为全球数十亿人提供服务。网络应用程序的性能逐渐变得至关重要,成为电子商务解决方案的成功与否起的关键。一个网站运行缓慢或页面加载不够快会让用户体验变得极为糟糕,最终将失去客户。因此,推荐在软件开发生命周期的早期就进行性能测试,从而在架构级的层面做出更明智的决定,以避免设计失误。
表现层状态传输(Representational State Transfer,REST)架构风格是一种无状态的C/S风格,它是一种混合型模型架构,并使用4个额外的限制来提供统一的资源调度接口。这些额外的限制分别是(1)用于资源识别的标识信息,(2)用于资源创建和修改的HTTP动词GET、POST、PUT、DELETE,(3)响应请求的自描述状态码,(4)作为软件状态引擎的超媒体(Hypermedia)。基于RESTful的网络服务因为其轻量级的体系结构和比相对于简单对象访问协议(SOAP)更好的性能而更受欢迎。
本研究的主要目标是使用Apache JMeter自动化测试工具对基于Spring Boot Java和MS.NET Core两种技术实现的RESTful应用程序的进行基准测试。这个实验的架构设计将会模拟生产环境,结果将有助于技术架构师选择出高性能、可靠、并且可扩展的技术来帮助实现他们的RESTful应用程序。此外,这些研究或将有助于教师和学生在高级编程课程中学习如何使用正确的技术来实现RESTful应用程序/Web服务。
2.文献综述
在[1]中,作者使用了Mercury Load Runner对RESTful网络服务与SOAP网络服务进行了性能分析。这两个基于Java的网络服务都是用Apache Tomcat服务器和MySQL数据库服务器实现的。结果表明,RESTful网络服务的性能要优于SOAP。另一项研究[4]使用Apache JMeter对Struts 2.0、Spring 3.0 MVC、JSF 1.2x和Wickets这四个不同的框架进行了负载测试。该研究中基于吞吐量、响应时间和带宽指标的性能进行分析比较,结果表明,JSF拥有最大的吞吐量,平均响应时间最佳的是Spring,而Wickets则消耗了大量的带宽。
在研究[5]中,作者以登陆场景为测试项目,使用Parasoft WebKing和HP LoadRunner等工具对MVC架构与三层架构中实现的Java EE Struts和VB.NET应用进行基准测试,结论是Java在响应时间和内存利用率方面优于.NET。在研究[6][7]中,作者对Java应用与ASP.NET应用进行性能测试,并使用了测试工具Mercury LoadRunner。结论是.NET应用程序比Java技术编写的应用程序更稳定,响应时间更快。
在研究[8]中,作者使用了Apache JMeter对REST API进行性能测试。测试中的RESTful软件系统基于MS.NET平台运行并使用了MS SQL后端服务器。作为对比的Jersey API则使用JDBC调用MySQL数据库。作者的目的并不是对两款软件本身的性能进行对比,而是对不同平台下的应用进行比较。测试后的结果显示,只有HTTP GET操作在Java中的性能优于MS.NET中的操作。然而,在过去还没有对采用Spring Boot Java和MS.NET Core技术的RESTful网络应用进行性能测试的实验。由于此前的技术规范推荐性能测试在生产环境中进行,因此本研究使用了专门的机器来部署数据库服务、Web服务以及Apache JMeter客户端。
3.研究方法
软件测试是软件开发生命周期中的一个关键阶段,为了向业务用户交付可靠且高质量的产品,应当定期进行软件测试。同时应当定期评估确认业务用户所需要的功能性和非功能性需求,从而确保软件的质量。虽然功能性需求至关重要,但非功能性需求诸如可扩展性、可靠性、性能等度量标准对任何软件的成功而言也不可或缺。一个性能不佳的软件,即使满足了所有预期的功能需求也不会被用户所接受。当然,性能测试可以在系统集成之后进行,以了解应用程序在处于预期的工作负载甚至超出预期的工作负载时将如何表现。这种测试通常通过增加系统负载,并依此找到断点来实现的。
分析应用程序的性能可以采用负载测试、压力测试和容量测试。负载测试是通过让应用程序承受从零到预期的并发虚拟用户数量的合理工作负载来完成的。压力测试是为了发现应用程序在超出预期峰值负载时的稳定性和鲁棒性,这有助于发现在不合理的工作负载条件下应用软件可能会出现的系统bug。测量诸如响应时间、吞吐量和不同资源的利用率等性能参数可以发现应用程序的瓶颈、内存泄漏情况和与目标性能的偏差情况,最终用于修复错误、优化和调优应用程序的性能。
市场上有大量的测试工具可以模拟真实用户的行为,在将系统部署到生产环境之前,需要使用这些工具测试出性能参数并对其进行分析。本研究使用基于Java的开源性能测试软件Apache JMeter来模拟服务器上从正常到过载的操作条件时的虚拟负载,以分析Web应用程序的性能。
自动化测试工具Apache JMeter可以使用Java中的多线程生成人工工作负载,当大量虚拟用户发送请求时,任何网络/应用服务都可能被负载所淹没。JMeter利用多个报告侦听器来度量如平均响应时间、吞吐量、标准偏差、错误百分比等各种性能指标。这个独立于平台的工具支持如HTTP、HTTPS、FTP、SMTP等多种不同的协议,并且能够在GUI模式与非GUI模式下运行。不过建议进行重载测试时使用非GUI模式。在进行测试后,还可以生成xml、csv、html格式的详细性能分析报告。
4.性能指标
出于不同的目的,JMeter的侦听器可以让用户获取各项性能指标,尽管如此,在本研究中,仅采用平均响应时间与错误率这两项性能标准来评估RESTful应用的性能。响应时间是指客户端向网络服务发出请求所需的总时间,包括将请求从客户机发送到服务器机器所花费的时间,以及从服务器获取相应客户机所花费的时间。在JMeter中,平均响应时间指标就是服务虚拟用户所发出的所有请求所需的平均时间,单位是毫秒。错误率是指服务器连接中失败请求占总次数的百分比。尽管通过观察服务器端单位时间内的服务请求总量来获取吞吐量有助于评估应用程序的可用性,但它与平均响应时间呈线性关系,因此在分析结果时没有考虑吞吐量。另外,如果有必要检查服务器运行状况的话,还可以使用JMeter插件Perfmon来检测CPU和内存等资源的使用情况。
5.实验设计
本研究的重点是使用Apache JMeter测试工具,通过负载测试,对MS.NET Core和Spring Boot Java技术实现的RESTful网络应用的性能进行对比。
图表 1
MS.NET Core RESTful应用在Microsoft Visual studio 2019中使用Web API模板,MS.NET Core 3.1框架,并使用C#编写,同时使用ADO.NET技术连接SQL数据库。Spring Boot RESTful应用在Spring工具套件4.5.1集成开发环境(IDE)创建,同时使用JDBC技术进行数据库连接。这两个RESTful应用均会使用相同的用例进行CRUD操作,在STS Spring元工具套件中的Tomcat和Visual Studio 2019中的IIS express都仅用于开发阶段的测试。
在本实验中,Machine 1作为数据库服务器,两个Web应用都访问MS SQL server 2019上AdventureWorks2014数据库中的Product表。在测试开始之前,使用SQL脚本在AdevntureWorks2014的Product表中生成300000行伪数据。为了模拟在生产环境,两个程序均部署并运行在Machine 2的外部应用服务器上,Apache Tomcat 9.0.31用于运行Java应用,ISS服务器10.0用于运行MS.NET Core应用。对MS.NET Core,ASP.NET hosting bundle安装在Machine 2上,同时使用IIS管理控制台向IIS服务器的应用程序池中添加网站。Machine 3用于运行非GUI模式下的JMeter,并通过命令行对应用进行负载测试。
表格 1 Machine 1,Machine 2,Machine 3的硬件规格
Machine |
64-bit Operating system |
Process |
RAM |
Processor speed |
Machine1 |
Windows 10 Home |
Intel core i5-7200U |
16GB RAM |
2.50GHz |
Machine2 |
Windows 10 Home |
Intel core i5-3317U |
12GB RAM |
1.70GHz |
Machine3 |
Windows 10 Home |
Intel Pentium N3540 |
8GB RAM |
2.16GHz |
每次实验都会在JMeter的GUI模式时创建7个JMeter测试计划,让虚拟用户的数量从1000成倍增加到64000,用于测试Java与MS.NET Core平台下的应用程序。在每个测试计划中,HTTP头请求中的内容类型都会改为application-json。同时,每个测试计划包括了进行增、删、改、查四种请求的测试,即通过HTTP请求访问RESTful应用的公开接口,以执行CURD操作。另外,每个HTTP请求采样器中将会添加CSV Data C
剩余内容已隐藏,支付完成后下载完整资料
英语原文共 8 页,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[595917],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。