為什么很多SpringBoot開發(fā)者放棄了Tomcat,選擇了Undertow
前言
在 SpringBoot 框架中,我們使用最多的是 Tomcat,這是 SpringBoot 默認(rèn)的容器技術(shù),而且是內(nèi)嵌式的 Tomcat。
同時(shí),SpringBoot 也支持 Undertow 容器,我們可以很方便的用 Undertow 替換 Tomcat,而 Undertow 的性能和內(nèi)存使用方面都優(yōu)于 Tomcat,那我們?nèi)绾问褂?Undertow 技術(shù)呢?本文將為大家細(xì)細(xì)講解。
SpringBoot 中的 Tomcat 容器
SpringBoot 可以說(shuō)是目前最火的 Java Web 框架了。它將開發(fā)者從繁重的 xml 解救了出來(lái),讓開發(fā)者在幾分鐘內(nèi)就可以創(chuàng)建一個(gè)完整的 Web 服務(wù),極大的提高了開發(fā)者的工作效率。Web 容器技術(shù)是 Web 項(xiàng)目必不可少的組成部分,因?yàn)槿?Web 項(xiàng)目都要借助容器技術(shù)來(lái)運(yùn)行起來(lái)。
在 SpringBoot 框架中,我們使用最多的是 Tomcat,這是 SpringBoot 默認(rèn)的容器技術(shù),而且是內(nèi)嵌式的 Tomcat。
SpringBoot 設(shè)置 Undertow
對(duì)于 Tomcat 技術(shù),Java 程序員應(yīng)該都非常熟悉,它是 Web 應(yīng)用最常用的容器技術(shù)。我們最早的開發(fā)的項(xiàng)目基本都是部署在 Tomcat 下運(yùn)行,那除了 Tomcat 容器,SpringBoot 中我們還可以使用什么容器技術(shù)呢?
沒(méi)錯(cuò),就是題目中的 Undertow 容器技術(shù)。SrpingBoot 已經(jīng)完全繼承了 Undertow 技術(shù),我們只需要引入 Undertow 的依賴即可,如下圖所示。
配置好以后,我們啟動(dòng)應(yīng)用程序,發(fā)現(xiàn)容器已經(jīng)替換為 Undertow。
那我們?yōu)槭裁葱枰鎿Q Tomcat 為 Undertow 技術(shù)呢?
Tomcat 與 Undertow 的優(yōu)劣對(duì)比
Tomcat 是 Apache 基金下的一個(gè)輕量級(jí)的 Servlet 容器,支持 Servlet 和 JSP。Tomcat 具有 Web 服務(wù)器特有的功能,包括 Tomcat 管理和控制平臺(tái)、安全局管理和 Tomcat 閥等。Tomcat 本身包含了 HTTP 服務(wù)器,因此也可以視作單獨(dú)的 Web 服務(wù)器。
但是,Tomcat 和 ApacheHTTP 服務(wù)器不是一個(gè)東西,ApacheHTTP 服務(wù)器是用 C 語(yǔ)言實(shí)現(xiàn)的 HTTP Web 服務(wù)器。Tomcat 是完全免費(fèi)的,深受開發(fā)者的喜愛(ài)。(2020年最新的常問(wèn)企業(yè)面試題大全以及答案)
Undertow 是 Red Hat 公司的開源產(chǎn)品, 它完全采用 Java 語(yǔ)言開發(fā),是一款靈活的高性能 Web 服務(wù)器,支持阻塞 IO 和非阻塞 IO。由于 Undertow 采用 Java 語(yǔ)言開發(fā),可以直接嵌入到 Java 項(xiàng)目中使用。同時(shí), Undertow 完全支持 Servlet 和 Web Socket,在高并發(fā)情況下表現(xiàn)非常出色。
我們?cè)谙嗤瑱C(jī)器配置下壓測(cè) Tomcat 和 Undertow,得到的測(cè)試結(jié)果如下所示:
QPS 測(cè)試結(jié)果對(duì)比:
Tomcat
Undertow
內(nèi)存使用對(duì)比:
Tomcat
Undertow
通過(guò)測(cè)試發(fā)現(xiàn),在高并發(fā)系統(tǒng)中,Tomcat 相對(duì)來(lái)說(shuō)比較弱。在相同的機(jī)器配置下,模擬相等的請(qǐng)求數(shù),Undertow 在性能和內(nèi)存使用方面都是最優(yōu)的。并且 Undertow 新版本默認(rèn)使用持久連接,這將會(huì)進(jìn)一步提高它的并發(fā)吞吐能力。所以,如果是高并發(fā)的業(yè)務(wù)系統(tǒng),Undertow 是最佳選擇。
最后
SpingBoot 中我們既可以使用 Tomcat 作為 Http 服務(wù),也可以用 Undertow 來(lái)代替。Undertow 在高并發(fā)業(yè)務(wù)場(chǎng)景中,性能優(yōu)于 Tomcat。所以,如果我們的系統(tǒng)是高并發(fā)請(qǐng)求,不妨使用一下 Undertow,你會(huì)發(fā)現(xiàn)你的系統(tǒng)性能會(huì)得到很大的提升。