术业专攻 | 如何让Java Web性能翻倍?

Posted 恒拓开源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了术业专攻 | 如何让Java Web性能翻倍?相关的知识,希望对你有一定的参考价值。

如何让Java Web 的性能翻倍???答曰——


响应式编程


响应式编程说来话长,概念也比较晦涩难懂,画风也与我们常用的命令式编程不一样。说清它的来龙去脉并不是小编今天的重点,我们只需要知道它是关于构建异步、事件驱动的非阻塞I/O应用即可。

 

要说明的是,此响应式(Reactive)非彼响应式(Responsive)。


虽然小编认为应该翻译为“反应式”。不过国内已翻译为“响应式”了,为避免混淆,本文也采用相同的术语。你知道本文说的不是H5那个响应式,就可以了。


  • Spring WebFlux

Spring框架从5.0开始拥抱ReactiveStreams规范,这个规范亦被Java9吸纳为java.util.concurrent.Flow。而Spring WebFlux则是Spring团队推出的基于响应式编程模型的Web框架。


 

  • 性能测试


接下来我们通过测试,看看spring-webflux框架相对于自家的spring-webmvc,在性能上有什么差异。

                                      

我们测试以下3个框架:

1.spring-webmvc

2.spring-webflux

3.node.js + koa2(用以性能著称的Node.js做参考)

 

三个框架均提供一个HTTP接口,直接返回“Hello World”字符串。

另外,JVM与Node均不作性能调优。

 

硬件方面,使用两台网络直通的DigitalOcean云主机两台:

主机

配置

角色

benchmark-01

2U / 2GB

受压服务器

benchmark-02

1U / 1GB

压力源服务器

 

压测使用wrk,并发数从100开始,每次递增100,直至1000。每个框架采样6次,取平均值。

 

由于我们着重考虑高并发下的性能,限于篇幅,我们对比在1000并发下,3个框架的性能指标:


框架

CPU占用率

内存使用

线程数

平均QPS  

备注

spring-webmvc

198%

380M

2115

6621


spring-webflux

198%

390M

19

13112


koa2

198%

200M

12

13832

使用PM2启动2个实例,以充分利用多核

可以看出,在同等用例下,spring-webflux有相对于spring-webmvc两倍的QPS,能够达到与Node差不多的性能。

 

我们都知道,越多的线程意味着越多的CPU上下文切换消耗。在1000并发下,spring-webflux仅需19个线程,而spring-webmvc则需要使用2000多个线程。从结果来看,3个case的CPU均跑满,因此服务器的瓶颈为CPU,可以推测,在多核多CPU的服务器下,性能差距会进一步加大。

 

另外,这只是纯框架层面的测试,响应式的优势在I/O密集、复杂业务场景,在这类场景下优势会更为明显。


  • 总结

spring-webflux还处于Milestone阶段,在性能上的提升已经足够诱人。况且响应式编程模型还纳入了Java 9的API,有构建高并发应用,而又希望继续使用统一的Java技术栈的团队,可以持续关注。

 


以上是关于术业专攻 | 如何让Java Web性能翻倍?的主要内容,如果未能解决你的问题,请参考以下文章

你总问,全面发展还是术业专攻?这就是答案

你总问,全面发展还是术业专攻?这就是答案

Java web项目的解耦合

Tengine开源新特性:如何让HTTPS处理能力轻松翻倍?

让TensorFlow在Macbook M1上性能翻倍

初入社会的年轻人如何选择行业?