您现在的位置是:系统运维 >>正文

深度揭秘:为何大厂禁用 Spring Boot 内嵌 Tomcat?

系统运维5549人已围观

简介在 Java Web 开发领域,Spring Boot 以其“开箱即用”的特性成为开发者的首选。默认情况下,Spring Boot 内嵌 Tomcat 作为 Web 服务器,使得开发人员可以快速构建 ...

在 Java Web 开发领域,深度Spring Boot 以其“开箱即用”的揭秘禁用特性成为开发者的首选。默认情况下,为何Spring Boot 内嵌 Tomcat 作为 Web 服务器 ,大厂使得开发人员可以快速构建 Web 应用 。内嵌然而 ,深度近年来,揭秘禁用越来越多的为何大型企业和互联网公司逐渐放弃 Tomcat ,而选择 Undertow 作为更优的大厂替代方案  。

究竟是内嵌什么原因促使大厂放弃 Tomcat ?Undertow 又有哪些独特优势 ?本篇文章将深入剖析这两种 Web 服务器的核心特性 、性能对比 ,服务器租用深度并指导你如何在 Spring Boot 3.4 中高效替换 Tomcat ,揭秘禁用助力你的为何项目在高并发场景下获得更优的表现 。

Spring Boot 的大厂默认容器 —— Tomcat

Spring Boot 作为当前最流行的 Java Web 开发框架,极大地降低了开发者的内嵌配置复杂度,使得开发人员可以迅速搭建一个完整的 Web 服务。在 Web 项目中,容器是至关重要的组件,因为它负责处理 HTTP 请求 ,云计算并提供运行环境 。

Tomcat 作为 Spring Boot 默认的嵌入式服务器 ,被广大 Java 开发者所熟悉 。它支持 Servlet 和 JSP ,具有完整的 Web 服务器功能 ,并且包含 Tomcat 管理平台、安全控制和过滤机制。然而,随着高并发业务需求的增长 ,Tomcat 在性能和资源消耗方面暴露出一定的局限性。

替换 Tomcat 为 Undertow

Undertow 是由 Red Hat 开发的源码库高性能 Web 服务器 ,完全采用 Java 编写  ,支持阻塞和非阻塞 IO,并且能够无缝嵌入到 Java 应用程序中 。此外 ,Undertow 还原生支持 Servlet 和 WebSocket ,使其在高并发场景下表现卓越 。

在 Spring Boot 3.4 中  ,我们可以轻松地用 Undertow 替换默认的 Tomcat,只需要修改项目的依赖配置 :

复制<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.

完成配置后,启动 Spring Boot 应用  ,服务器将自动使用 Undertow 作为容器 。

Tomcat vs Undertow 对比分析

性能对比

Tomcat 是 Apache 基金会旗下的免费模板轻量级 Servlet 容器 ,适用于一般 Web 应用。然而 ,在高并发场景下 ,Tomcat 处理请求的吞吐量相对较低 。相比之下 ,Undertow 采用更高效的 IO 处理模型,使其在大规模请求下表现更优  。

并发吞吐能力

在相同硬件环境下 ,我们对 Tomcat 和 Undertow 进行了并发测试 ,得出的 QPS(每秒请求数)如下:

Tomcat并发请求数较大时 ,QPS 明显下降,吞吐量受限 。高防服务器Undertow默认使用持久连接,在高并发下吞吐量表现更优 。内存占用

内存管理方面 ,Tomcat 由于线程模型相对传统,在大量请求下容易导致内存消耗较高 。而 Undertow 采用异步非阻塞架构,能够更高效地利用系统资源,减少内存开销 。

大厂为何弃用 Tomcat?

在传统 Java Web 开发中 ,Tomcat 作为 Apache 基金会维护的轻量级 Servlet 容器,凭借其稳定性和成熟度,一直是 Web 开发的首选方案  。然而,亿华云随着业务需求的增长和流量的激增,Tomcat 在高并发场景下的性能瓶颈逐渐显现 ,主要体现在以下几个方面 :

线程模型的局限性Tomcat 采用基于线程池的阻塞 I/O 模型,每个请求都会分配一个独立的线程来处理。这种方式在低并发场景下表现良好,但当请求量激增时,大量线程的创建和切换会导致 CPU 资源被大量消耗 ,线程上下文切换开销大 ,容易引发性能下降甚至 OOM(内存溢出)问题 。高并发下吞吐量有限在压力测试中,Tomcat 的 QPS(每秒查询数)在并发数提升后增速明显放缓,甚至会因线程池饱和而导致请求阻塞或超时。由于 Tomcat 依赖于同步阻塞的 Servlet API,在高并发环境下无法充分利用现代 CPU 多核架构的能力 。响应时间较长由于 Tomcat 采用同步阻塞 I/O ,在请求处理时,如果某个请求需要访问数据库或外部 API,线程会一直处于等待状态,直到请求完成后才释放 。这导致 Tomcat 在高并发时容易出现响应延迟,影响用户体验 。资源消耗较大Tomcat 需要维护大量的线程,每个线程都会消耗一定的内存,导致整体系统资源占用较高。在 JVM 堆内存较小的情况下,大量的线程开销会进一步降低系统稳定性 。连接管理能力不足Tomcat 默认使用短连接(HTTP 1.1 的 Keep-Alive 需要手动优化),在高并发环境下,短连接的频繁创建和关闭会导致额外的 TCP 握手和挥手开销  ,从而影响系统吞吐量。而 Undertow 采用持久连接,可以更高效地管理长连接 ,提高并发能力 。

基于以上原因 ,大型互联网公司开始寻求更高效的 Web 服务器来替代 Tomcat  ,Undertow 作为一种异步非阻塞的 Web 服务器 ,逐渐成为主流选择 。

结论

随着互联网行业的迅猛发展 ,Web 应用的并发量日益增长 ,传统 Tomcat 服务器的性能瓶颈逐渐显现 。相较之下 ,Undertow 以其轻量级、高吞吐量、低内存占用的优势 ,成为高并发业务场景下更优的选择。

对于普通 Web 应用,Tomcat 依然是一个不错的选择,但如果你的系统需要应对高并发请求,或者希望在微服务架构下提升整体性能,那么 Undertow 无疑是一个更优的选择 。通过简单的配置调整 ,你的 Spring Boot 3.4 项目就可以轻松切换到 Undertow ,让你的系统性能获得质的提升 。

Tags:

相关文章


滇ICP备2023006006号-16