Java REST API Server 性能比较 Tomcat/Jetty/Grizzly/Undertow

JSR-356:WebSocket
JSR-311:JAX-RS
原文地址
https://menelic.com/2016/01/06/java-rest-api-benchmark-tomcat-vs-jetty-vs-grizzly-vs-undertow/

引言

Java Web Server该如何选择,是很多开发者都需要思考的问题,尤其是随着微服务(micro-services)的兴起,嵌入式的web server越来越受到关注和重视。

那么不同的web server有什么区别呢?

jetty(Eclipse)

jetty可以作为 web server 和 servlet 容器,此外还支持HTTP/2,WebSocekt,OSGi,JMX…

grizzly(Sun/Oracle)

Grizzly是基于Java NIO的开发框架,让开发者更好的使用Java NIP API;此外它也提供了HTTP Services,如http server,OSGi,支持 JAXWS。因此能在Grizzly http server上运行JAX-RS应用(比如Jersey)。

Java REST API Server 性能比较 Tomcat/Jetty/Grizzly/Undertow_第1张图片

tomcat(Apache)

Tomcat 支持 Java Servlet,JavaServer Pages, JAX-WS以及java websocket技术。

undertow(JBoss)

Undertow是由java开发的 web server,基于 Java NIO,提供了阻塞和非阻塞两种模式,支持HTTP,WebSocket,Servlet3.1,支持嵌入式开发。特点是轻量级,

测试

下面,将对上述四中应用作为 JAX-RS server 时的性能进行测试比较,探讨哪一种web容器能够更加快速,灵活,高效的发布 JAX-RS REST API。本文选择 Jersey 作为 JAX-RS 实现。

(Spring boot 支持 Tomcat,Jetty,和Undertow。)

版本选择:
1. Tomcat(8.0.30),
2. Jetty(9.2.14),
3. Grizzly(2.22.1) and
4. Undertow(1.3.10.FINAL).

测试接口只返回简单的json文本。

public class ApiResource {
    public static final String RESPONSE = "{\"greeting\":\"Hello World!\"}";
    @GET
    public Response test() {
        return ok(RESPONSE).build();
    }
}

测试工具使用 ApacheBench,并发级别=1,4,16.64,128
测试系统:laptop/4C/8G jdk1.8 linux

测试结果:

1 同步等级=1

Java REST API Server 性能比较 Tomcat/Jetty/Grizzly/Undertow_第2张图片
Java REST API Server 性能比较 Tomcat/Jetty/Grizzly/Undertow_第3张图片

由图可见,grizzly性能最好。

2 同步等级=128

Java REST API Server 性能比较 Tomcat/Jetty/Grizzly/Undertow_第4张图片
Java REST API Server 性能比较 Tomcat/Jetty/Grizzly/Undertow_第5张图片
由图可见,Grizzly性能依然是最好的,

结论

测试结果显示,grizzly在吞吐量和响应时间两方面都表现最好。

本次测试,均使用了容器的默认配置,调整不同容器的配置参数可能会对测试结果产生较大影响,后续会进行进一步的测试。

源码

GitHub

你可能感兴趣的:(webservice)