用于创建Java Web应用的Spring框架和Play框架的性能分析与比较
摘要
在技术不断发展的时代,计算机和互联网的速度不断提高,开发技术和编程语言以及各种帮助程序员工作的机制也很重要。因此,创建了框架,即定义应用程序结构及其操作的一般机制的框架应用程序,以方便编写程序,并统一各种应用程序的结构。本文的目的是分析和比较两种流行框架用于在Java中创建web应用程序的服务器部分的性能,即Spring框架和Play框架。
关键词 Spring Framework, Spring Boot, Play Framework, load tests, Jmeter
1 介绍
Java是一种面向对象的编程语言由sun微系统公司于1995年创建。该公司2010年被Oracle收购。Java大部分语法的灵感来自于C 语言,这使得它成为C 一个较大的竞争对手。另外,受到Smalltalk语言的启发,Java还添加了如虚拟机(Java虚拟机- JVM)和自动内存释放等元素。Java是一种面向对象的语言,因此所有操作是在类及其对象上执行的。这样做的结果就是语言必须满足所有的要求对象范式的假设,也就是抽象,封装,继承和多态[1]。
2 SPRING 框架
Spring是一个用Java语言创建web应用程序的框架。由于EJB技术(Enterprise Java Beans)不太受程序员的欢迎,它便作为EJB的替代方案被创建并用于编写应用程序。Spring框架的第一个版本创建于2002年,但它的开发一直持续到今天。它的主要优点是,尽管它由许多模块组成,但它们不需要同时全部使用,程序员可以选择他想要使用的模块,这样就不会用其他不必要的模块使应用程序过于繁重。这对应用程序性能和所使用的资源数量有重要意义。
构成整个应用程序核心的最重要的一组模块是核心容器。它由以下模块组成:
- spring-core;
- spring-beans;
- spring-context;
- spring-context-support;
- spring-expression.
图1:Spring framework 结构[1]
Spring-core和spring-beans是整个应用程序中最重要的模块。它们提供了与所谓的“控制反转”(IoC)和“依赖注入”(DI)相关的功能。IoC是一种范例,根据它,高级模块可以选择它们想要使用的低级模块。这样设计的结果是应用程序的部分模块将会由框架来管理。
3 SPRING BOOT
尽管Spring是一种轻量级应用程序框架,在程序员中非常流行,但是基于它准备项目是有困难的,而且需要花费大量时间,即使对于小型应用程序也是如此。这是由于需要准备大量XML配置文件,以便各个组件和应用程序模块能够正常工作。甚至在开始编写应用程序逻辑之前,就给程序员造成了许多困扰。因此,为了自动化这个过程(在许多情况下看起来是相同的),创建了一个名为Spring Boot的项目。它是一种位于程序员和Spring框架之间的组件,允许使用它的所有模块和功能。Spring Boot有一个内置的服务器,从而大大简化了应用程序的实现过程。如果你使用一个数据库,Spring Boot会根据数据库的类型自动配置它,例如MySQL,Oracle或PostgreSQL,在纯Spring框架的情况下这些数据库的类型是不同的。程序员要做的唯一一件事就是提供IP地址、特定数据库的实例和凭据。Spring Boot可以与两个最流行的应用程序构建工具Maven和Gradle一起使用[2]。
图2:Spring Boot, 连接到Spring[3]
如果您将依赖项添加到与数据库支持相关的配置文件中,Spring Boot将自动配置应用程序以支持特定的数据库。这是―个极大的简化,因为在普通Spring框架中,这个配置根据数据库的不同而不同,例如MySQL.Oracle或PostgreSQL需要不向的配置。您所要做的就是输入IP地址和特定数据库和凭据的实例。
图3:Spring Boot-数据库配置[7]
4 PLAY框架
Play框架也是一个用于创建web应用程序的框架。它是用Java和Scala编写的。与Spring不同,它是一个开源框架,因此它可以在各种项目中免费使用,并可以以任何方式进行修改。与Spring Boot一样,它也有一个内置服务器。内置的Java编译器是这个框架的特征元素。由于这一点,我们可以运行应用程序,并让它在后台运行。如果对源代码进行任何修改,应用程序中的更改将立即生效,因此我们不需要重复将应用程序部署到服务器的整个过程。在编译器错误的情况下,它的提示信息将直接显示在web浏览器中。
此外,Play是无状态的。这意味着关于登录用户的信息等数据将不会以所谓的会话形式存储在应用程序中。由于这一点,当一个服务器发生故障时,它的任务可以被另一个服务器接管,而不会失去会话数据的一致性。Play还有一个内置的H2数据库,用于对给定实体进行测试。内置机制允许使用测试数据自动填充此数据库,因此不需要访问与数据库相关的Mock对象。基于从数据库下载的测试数据测试应用程序,由于集成了对Selenium测试框架的支持,我们还可以执行用户界面测试。Play Framework已经被用于创建许多网站,包括Linkedin、coursera、Lightbend和Joysite.[4]
图4:编译错误示例[4]
5 JMETER - 服务器测试
为了比较所描述的web应用程序框架的性能,您应该相应地加载服务器。为此,使用Java编写的JMeter应用程序非常有用。有了它,我们可以对使用PHP、Java或ASP.NET等知名编程语言编写的网站进行负载、功能和性能测试。它主要用于模拟服务器流量,类似用户在同一时间使用服务器资源。它还支持性能分析和结果的图形显示。JMeter是一个免费软件应用程序。
JMeter应用程序基于创建所谓的测试计划。它们包含关于正在测试的服务器以及如何加载服务器的信息。每个测试计划可能包含以下信息:
- 线程组– 定义执行HTTP查询的用户数量以及执行查询的方式
- HTTP授权管理器 – 负责用户认证
- HTTP请求 – 生成针对特定服务器的REST请求
- 响应断言 – 允许指定决定给定查询执行正确性的条件
- 聚合报告 – 收集测试结果
- 在表格中查看结果 –允许图形化地显示一个包含所有POST请求的表
6 应用程序测试
要比较使用上述框架编写的服务器的性能,您需要两个包含相同功能的应用程序。第一个是与数据库操作和关的,即在数据库中下载和保存数据。另一个在服务器端执行算术运算并返回获得的结果。
第一个应用是使用Spring Boot v.2.0.3创建的。添加到项目的额外模块是Hibernate。它是Java中最流行的的对象关系映射库(ORM)之一。
第二个应用程序是使用Play框架创建的。添加到项目的额外模块是JavaEbean。这是Play Framework支持的唯一库,它执行对象-关系映射。在使用Play框架时更流行的库是Slick,并且,它允许在Java/Scala中创建SQL查询。
7 进行的测试
为了比较测试应用程序的性能,执行了三种类型的测试:
- 从数据库下载数据.
- 保存数据到数据库.
- 执行算术运算.
为了实现这个解决方案,创建了一个特殊的系统,其关系图如图5所示。它的要点是JMeter应用程序,它是通过配置特定的测试计划与Spring和Play服务器连接起来的。为了提高测试的可靠性,两个服务器都连接到同一个PostgresQL数据库,存储的用户结构是相同的。
测试的度量单位是查询执行的平均时间,这取决于同一时间使用给定服务器的用户数量。
图5:测试方案示意图
测试是在Lenovo Legion笔记本电脑上进行的,该电脑配备英特尔酷睿i7-7700HQ处理器,频率为2.80 GHz,16GB内存和SSD硬盘。这些测试的结果可能因执行这些测试的硬件而异,但是测试之间的比例应该是相似的。
第一种类型的测试包括从数据库下载用户数据。在Spring和Play框架的情况下,它们都是根据同时进行查询下载数据的用户数量来执行的。
图6:从数据库下载数据 - 结果
表1 PLAY 和SPRING – 下载数据
Users |
Play - Downloading Data |
Spring - Downloading Data |
||
Average |
Last [ms] |
Average |
Last [ms] |
|
1 |
0.645 |
- |
0.8925 |
- |
10 |
3.4 |
5 |
5.8 |
8 |
100 |
7.9 |
10 |
24 |
58 |
500 |
8.9 |
38 |
48 |
507 |
1000 |
49.5 |
549 |
205 |
637 |
2500 |
170.2 |
1030 |
321 |
1041 |
5000 |
699.5 |
2181 |
448 |
1709 |
10000 |
1621.2 |
5847 |
678 |
27 剩余内容已隐藏,支付完成后下载完整资料
英语原文共 4 页,剩余内容已隐藏,支付完成后下载完整资料 资料编号:[596123],资料为PDF文档或Word文档,PDF文档可免费转换为Word |
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。