1.       JTRY HTTP数据处理APISpring MVC性能对比

1.1.   概述

最近很多人对JTRY的具体性能表示好奇,于是本人准备使用apache-jmeter 性能测试工具对本架构的每一项功能的性能做综合测试

首先测试的是本架构HTTP数据处理API的实际使用效能,为了起到对比的作用,我也使用功能类似的Spring MVC一起加入测试

1.2.   测试环境

1.2.1.        软件环境

测试工具:apache-jmeter-3.1

操作系统:Centos 6.4

JAVA版本:jdk-8u121-linux-x64

应用服务器:apache-tomcat-9.0.0.M17

1.2.2.        硬件环境

测试客户端:CPU I7-3770K 3.50GHz | 内存 16GB DDR3 1600Mhz | 网络 本地局域网 1Gbps

服务器宿主机:CPU E5-2670 2.60Ghz | 内存 32GB DDR3 1600Mhz | 磁盘 RAID 1 希捷 5400 机械硬盘 X 2

JTRY虚拟机:CPU 1核心2线程 | 内存 2GB

SpringMVC虚拟机:CPU 1核心2线程 | 内存2GB

1.3.   测试流程

1.3.1.        JTRY测试

创建maven项目jtrytest

配置pom引用

 

<dependencies>

       <dependency>

           <groupId>org.jtry</groupId>

           <artifactId>framework</artifactId>

           <version>1.0</version>

       </dependency>

    </dependencies>

 

按照JTRY规范编写web.xmlcontroller

 

    <servlet>

       <servlet-name>CentralController</servlet-name>

       <servlet-class>org.jtry.framework.net.http.CentralController</servlet-class>

       <init-param>

           <param-name>controllerConfigClass</param-name>

           <param-value>org.jtry.test.init.WebInit</param-value>

       </init-param>

       <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

       <servlet-name>CentralController</servlet-name>

       <url-pattern>/</url-pattern>

    </servlet-mapping>

 

@Path("test")

public class TestController {

 

    @Ajax

    @Path("string")

    public String testString(@Mark("text") String text) {

       return text;

    }

 

    @Ajax

    @Path("int")

    public int testInt(@Mark("num") int num) {

       return num;

    }

 

    @Ajax

    @Path("array")

    public int[] testArray(@Mark("array") int[] array) {

       return array;

    }

 

    @Ajax

    @Path("bean")

    public User testBean(User user) {

       return user;

    }

}

 

实体类如下

 

public class User {

    private String name;

    private Integer age;

    private Double money;

    private String phone;

    private String regTime;

 

发布到JTRY虚拟机tomcat,开始测试

 

Jmeter中建立线程组

1000个线程,每个线程运行500次,共计50万次

然后针对controller中的4个接口分别编写GET方式与POST方式的请求

 

调用/test/string接口

 

GET方式,运行52秒,结果如下

POST方式,运行49秒,结果如下

 

调用/test/int接口

 

GET方式,运行58秒,结果如下

POST方式,运行57秒,结果如下

 

调用/test/array接口

 

GET方式,运行15秒,结果如下

POST方式,运行18秒,结果如下

 

调用/test/bean接口

 

GET方式,运行41秒,结果如下

POST方式,运行41秒,结果如下

1.3.2.        Spring MVC测试

创建maven项目springtest

配置pom引用

 

    <dependencies>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-webmvc</artifactId>

           <version>4.3.6.RELEASE</version>

       </dependency>

       <dependency>

           <groupId>com.fasterxml.jackson.core</groupId>

           <artifactId>jackson-databind</artifactId>

           <version>2.8.7</version>

       </dependency>

    </dependencies>

 

按照Spring MVC规范编写web.xmlSpringMVC.xmlcontroller

 

    <servlet>

       <servlet-name>SpringMVC</servlet-name>

       <servlet-class>

           org.springframework.web.servlet.DispatcherServlet

       </servlet-class>

       <init-param>

           <param-name>contextConfigLocation</param-name>

           <param-value>/WEB-INF/SpringMVC.xml</param-value>

       </init-param>

       <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

       <servlet-name>SpringMVC</servlet-name>

       <url-pattern>/</url-pattern>

    </servlet-mapping>

 

    <context:component-scan base-package="org.springmvc.test.controller" />

    <mvc:annotation-driven />

    <bean id="viewResolver"

       class="org.springframework.web.servlet.view.UrlBasedViewResolver">

       <property name="viewClass"

           value="org.springframework.web.servlet.view.JstlView" />

       <property name="prefix" value="/WEB-INF/view/" />

       <property name="suffix" value=".jsp" />

    </bean>

 

@Controller

@RequestMapping("test")

public class TestController {

 

    @ResponseBody

    @RequestMapping("string")

    public String testString(String text) {

       return text;

    }

 

    @ResponseBody

    @RequestMapping("int")

    public int testInt(int num) {

       return num;

    }

 

    @ResponseBody

    @RequestMapping("array")

    public int[] testArray(int[] array) {

       return array;

    }

 

    @ResponseBody

    @RequestMapping("bean")

    public User testBean(User user) {

       return user;

    }

}

 

实体类如下

 

public class User {

    private String name;

    private Integer age;

    private Double money;

    private String phone;

    private String regTime;

 

发布到SpringMVC虚拟机tomcat,开始测试

 

Jmeter中建立线程组

1000个线程,每个线程运行500次,共计50万次

然后针对controller中的4个接口分别编写GET方式与POST方式的请求

 

调用/test/string接口

 

GET方式,运行224秒,结果如下

POST方式,运行26秒,结果如下

 

调用/test/int接口

 

GET方式,运行236秒,结果如下

POST方式,运行212秒,结果如下

 

调用/test/array接口

 

GET方式,运行246秒,结果如下

POST方式,运行245秒,结果如下

 

调用/test/bean接口

 

GET方式,运行243秒,结果如下

POST方式,运行237秒,结果如下

 

1.3.3.        结论

结果非常明显,无论是映射字符串、数值、数组还是javabeanJTRY的性能都比较优秀

当然,spring MVC在对全部类型的映射效能上十分平均,而且其支持的功能范围也更广更细

 

最后再一起运行下全部的测试用例,共计使用1000个线程发起400万次请求,评判下综合速率

 

调用JTRY服务接口,运行1240秒,结果如下

调用Spring MVC服务接口,运行2037秒,结果如下