對于Tomcat技術,Java程序員應該都非常熟悉,它是Web應用最常用的容器技術。我們最早的開發的項目基本都是部署在Tomcat下運行。
在軟件開發的浪潮中,技術的更迭總是讓人目不暇接。在SpringBoot框架中,我們使用最多的是Tomcat,這是SpringBoot默認的容器技術,而且是內嵌式的Tomcat。
但是,許多大廠的SpringBoot項目紛紛棄用Tomcat,轉而擁抱Undertow。這背后究竟隱藏著什么秘密?今天,就讓我們一起揭開這層神秘的面紗。
接下來先比較Tomcat與Undertow的優劣,我們從以下幾個方面進行概述。
成熟與廣泛使用:Tomcat是Apache基金會的開源項目,作為一個成熟的Web服務器和Servlet容器,它包含了HTTP服務器,因此也可以作為單獨的Web服務器使用。
豐富的功能:Tomcat提供了管理和控制平臺、安全局管理和Tomcat閥等功能,這些都是Tomcat特有的功能。
Undertow的優勢:
高性能:Undertow基于非阻塞I/O和異步處理,能夠提供更高的性能和更好的并發處理能力。它在高并發場景下尤其表現出色,能夠處理更多請求并提供更快的響應速度。
輕量級:Undertow的代碼庫相對較小,這使得它在資源占用和啟動時間方面具有優勢,特別適合需要快速啟動和低內存占用的應用場景。
更好的異步支持:Undertow提供了完善的異步支持,非常適合處理高并發的請求。
易于配置:Undertow提供了簡單易用的配置選項,使得開發者可以快速定制和部署應用程序。Spring Boot中的自動配置功能使得切換到Undertow變得非常簡單。
WebSocket支持:Undertow在WebSocket方面的實現更加輕量級和高效,這使得它在實時Web應用場景中更具優勢。
HTTP/2支持:Undertow支持HTTP/2協議,開發者可以利用HTTP/2的性能優勢,如頭部壓縮、服務器推送等。
總結:如果你的應用場景需要高性能、快速啟動和輕量級的服務器,Undertow可能是更好的選擇。而如果你需要一個成熟、功能豐富的Web服務器,且對資源占用和并發處理能力要求不是特別高,Tomcat則可能更適合你的需求。
大廠項目棄用Tomcat原因總結:在高并發系統中,Tomcat相對來說比較弱。在相同的機器配置下,模擬相等的請求數,Undertow在性能和內存使用方面都是最優的。并且Undertow新版本默認使用持久連接,這將會進一步提高它的并發吞吐能力。所以,如果是高并發的業務系統,Undertow是最佳選擇。
Undertow 是一個采用 Java 開發的靈活的高性能 Web 服務器,提供包括阻塞和基于 NIO 的非堵塞機制。Undertow 是紅帽公司的開源產品,是 Wildfly 默認的 Web 服務器。Undertow 提供一個基礎的架構用來構建 Web 服務器,這是一個完全為嵌入式設計的項目,提供易用的構建器 API,完全向下兼容 Java EE Servlet 3.1 和低級非堵塞的處理器。
Undertow的主要特點:
1.pom.xml中引入依賴
<!-- 啟動器依賴 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 移除Tomcat的依賴 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions></dependency><!-- 采用Undertow依賴 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId></dependency>
server: undertow: # 設置IO線程數, 它主要執行非阻塞的任務,它們會負責多個連接, 默認設置每個CPU核心一個線程 io-threads: 2 # 阻塞任務線程池, 當執行類似servlet請求阻塞操作, undertow會從這個線程池中取得線程,它的值設置取決于系統的負載 worker-threads: 1000 # 以下的配置會影響buffer,這些buffer會用于服務器連接的IO操作,有點類似netty的池化內存管理 # 每塊buffer的空間大小,越小的空間被利用越充分 buffer-size: 1024 # 是否分配的直接內存 direct-buffers: true
3.運行效果
本文鏈接:http://www.tebozhan.com/showinfo-26-100983-0.html大廠內幕:SpringBoot項目為何棄用Tomcat,轉投Undertow懷抱?
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com