spirngboot项目,选用那种web服务器?

1.场景

        最近一直在关注springboot项目优化的问题,其中,最关注的就是内存开销,和吞吐量问题!遇到最多的问题就是Tomcat线程限制(处理器数的200~250倍),和链接数问题导致的并发问题,而影响后台服务器端(或者应用程序)性能!

        考虑到tomcat的分配连接(socket)机制:每接入服务器接口,都会分配一条线程去处理对应的业务,以及包括但不限与数据库线程连接池的开销,对我们项目的性能,以及(硬件)环境都将是一个极大的考验。当然也可以通过优化配置解决部分,配置tomcat的初始线程,闲置线程,最大线程等;但由于tomcat的BIO处理机制,根本性的限制了tomcat应对高并发问题不具有优势!

        后经了解,springboot内嵌有三种服务器(容器)供开发者选择,分别是:tomcat,jetty,undertow;

2.tomcat,jetty,undertow已有资料对比

对比类型1:undertow更优秀

SpringBoot服务器压测对比(jetty、tomcat、undertow)_springboot 压测_Coding工匠的博客-优快云博客

Tomcat vs Jetty vs Undertow性能对比 - 腾讯云开发者社区-腾讯云

Undertow,Tomcat和Jetty服务器之间的区别_tomcat jetty undertow_hp碰碰的博客-优快云博客

结论:整体Undertow 更优异

对比类型2:tomcat更优秀

java - 别再误人子弟了-tomcat、undertow、jetty性能对比 - Spring Boot从入门到精通 - SegmentFault 思否

结论:整体tomcat优于undertow

3.疑惑

三种容器的对比,两种不同的结论!而百度引擎中多数文章都在说undertow如何吊打tomcat,各种测试截图,也是有理有据!而对应tomcat更优秀的结论也是有图有真相!事实究竟如何?

4.连接器机制

Tomact的连接器与业务深度绑定(BIO),一个用户接入服务器就是一条线程。

Jetty和Undertow的连接器不直接进行绑定(NIO),而是由连接器分配业务线程,业务处理完毕,线程空置,可再重新复用。可参考undertow服务器分析_进入Undertow Web服务器

同时,Undertow的垃圾回收(GC)配置和最小化按需加载模块,也是其在处理并发问题中表现优异的重要原因。

IO与NIO区别_io和nio的区别_Leida_hzm的博客-优快云博客

Java NIO: 单线程管理多个连接(jetty/undertow)

 Java IO: 一个典型的IO服务器设计- 一个连接通过一个线程处理(tomcat)

 

5.结论

不能说tomcat不优秀,很多的对比样例中我们也看到的,一些追求效率和物理开销允许的的情况下,还是比较推荐tomcat的。而springcloud、springboot 微服务成为趋势的情况下,undertow的替代tomcat也将成为一种趋势!同时也不排除有比undertow更优秀的服务器(容器出现)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值