web服务器:Tomcat和Undertow的一些对比和选型建议

背景:

        在Java EE应用服务器中我们使用最多的是Tomcat,但是由Red Hat公司开源并且JBoss赞助的嵌入式Undertow在性能和内存使用方面都优于Tomcat,那我们该如何抉择呢?以下是个人的一些看法。


Tomcat服务器: 

1.介绍:

        a.Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成;

        b.Tomcat 是 Apache 基金下的一个轻量级的Servlet 容器,支持 Servlet 和 JSP。Tomcat 具有 Web 服务器特有的功能,包括 Tomcat管理和控制平台、安全局管理和 Tomcat 阀等;

        c.Tomcat 本身包含了 HTTP 服务器,因此也可以视作单独的 Web服务器;

        d.由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。 

2.特点: 

        a.部署简单:Tomcat中的应用程序是一个WAR(WebArchive)文件。WAR是Sun提出的一种Web应 用程序格式,与JAR类似,也是许多文件的一个压缩包,只需将你的WAR放到Tomcat的Webapp目录下,Tomcat会自动检测到这个文件,并将其解压。另外Tomcat也提供了一个应用管理器,通过这个应用,辅助于Ftp,你可以在远程通过Web部署和撤销应用;

        b.安全管理:安全管理Tomcat提供Realm支持。Realm类似于Unix里面的group。在Unix中,一个group对应着系统的一定资源,某个group不能访问不属于它的资源,通过Realm可以方便地对访问某个应用的客户进行验证。在Tomcat中,还可以利用Servlet2.提供的事件监听器功能,来对应用程序或者Session实行监听,进行身份权限控制。Tomcat也提供其他的一些特征,如与SSL集成到一块,实现安全传输;

        c.易操作:基于Tomcat的开发其实主要是JSP和Servlet的开发,开发JSP和Servlet非常简单,可以用普通的文本编辑器或者IDE,然后将其打包成WAR即可;

        d.集成方便:Tomcat也可以与其他一些软件集成起来实现更多的功能。如与JBoss集成起来开发EJB,与Cocoon(Apache的另外一个项目)集成起来开发基于XML的应用,与OpenJMS集成起来开发JMS应用。除了提到的这几种外,可以与Tomcat集成的软件还有很多。


Undertow服务器: 

 1.介绍:

        a.Undertow 是 Red Hat 公司的开源产品,它完全采用 Java 语言开发,是一款灵活的高性能 Web 服务器,支持阻塞 IO 和非阻塞 IO;

        b.由于 Undertow 采用 Java 语言开发,可以直接嵌入到 Java 项目中使用。同时,Undertow 完全支持 Servlet 和 Web Socket,在高并发情况下表现非常出色;

        c.Undertow是JBoss赞助的一个Web服务器,是Wildfly应用程序服务器中的默认Web服务器。

2.特点: 

        a.非常轻量级,Undertow核心在1Mb以下。它在运行时也是轻量级的,有一个简单的嵌入式服务器使用少于4Mb的堆空间。

        b.支持HTTP升级,允许多个协议通过HTTP端口进行多路复用。

        c.提供对Web套接字的全面支持,包括JSR-356支持。

        d.提供对嵌入式servlet的支持。还可以在同一部署中混合Servlet和本机Undertow非阻塞处理程序。

        e.可以嵌入在应用程序中或独立运行,只需几行代码。

        f.通过将处理程序链接在一起来配置Undertow服务器。它可以对各种功能进行配置,方便灵活。

        g.底层基于 XNIO,和 Netty 设计类似,使用 NIO 作为网络交互的方式,并且使用直接内存作为网络传输的 buffer,减少业务的 GC。

        h.由于基于这种异步框架,所以配置也是交由链式Handler配置和处理请求,可以最小化按需加载模块,无须加载多余功能。

3.架构: 

        a.Undertow 是基于 Java XNIO,Java XNIO 是一个对于 JDK NIO 类的扩展,和 netty 的基本功能是一样的,但是 netty 更像是对于 Java NIO 的封装,Java XNIO 更像是扩展封装;

        b.Undertow的架构是组合式的,可以通过组合各种小型的目的单一的处理程序来构建Web服务器。所以可以很灵活地的选择完整的Java EE servlet 3.1容器或初级非阻塞程序处理;

        c.Undertow的设计是可以完全可嵌入的,具有简单易用的编译接口;

        d.Undertow的生命周期完全由嵌入的应用程序控制。

        e.重点需要理解,Undertow中没有任何容器的概念。Undertow应用程序是由多个处理程序组合而来的,它通过嵌入的方式来管理所有这些处理程序的生命周期。这是一个专门的设计决定,以便给予嵌入应用更多的控制权。当然这种设计会产生一个问题,如果你有处理程序,需要在服务器停止时清理一下它使用的资源。Undertow 服务器基本上由三部分组成,一个(或多个)XNIO 工作实例,一个或多个连接器,以及一个处理传入请求的处理程序链。 


总结: 

        在高并发系统中,Tomcat相对来说比较弱。在相同的机器配置下,模拟相等的请求数,Undertow在性能和内存使用方面都是最优的。并且Undertow新版本默认使用持久连接,这将会进一步提高它的并发吞吐能力。所以,如果是高并发的业务系统,Undertow是最佳选择。而且Undertow支持嵌入式开发当然tomcat也支持嵌入式,但是对这对开发者有一定技术要求。对于并发性能要求不是特别高的话tomcat 完全可以胜任,且tomcat经过长时间优化也经得住考验,且使用tomcat 不用过多关注内部细节均有tomcat 自身来管理,这也是相比嵌入式的优势,由于tomcat优秀的稳定性以及丰富的文档资料,广泛的使用人群,从而在开源领域受到最广泛的青睐。


基于springboot框架下的引用: 

        1.Tomcat服务器:springboot本身内嵌了Tomcat,所以不需要再引入,可直接用。

        2.Undertow服务器:

        <!--1.移除内置的tomcat服务器-->
        <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>
        <!--2.导入undertow服务器依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值