zoukankan      html  css  js  c++  java
  • Jetty 与 Tomcat的竞争


    Jetty
    基本架构:
      Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个

    可扩展性和非常灵活的应用服务器。它有一个基本数据模型,这个数据模型就

    是 Handler(处理器),所有可以被扩展的组件都可以作为一个 Handler,添

    加到 Server 中,Jetty 就是帮你管理这些 Handler。Jetty 中另外一个比不可少

    的组件是 Connector,它负责接受客户端的连接请求,并将请求分配给一个处

    理队列去执行。

    下图是 Jetty 的基本架构图,整个 Jetty 的核心组件由 Server 和 Connector 两个

    组件构成,整个 Server 组件是基于 Handler 容器工作的,它类似与 Tomcat 的

    Container 容器。


         Jetty 中还有一些可有可无的组件,我们可以在它上做扩展。如 JMX,我们可以定义一些

    Mbean 把它加到 Server 中,当 Server 启动的时候,这些 Bean 就会一起工作。

           从上图可以看出整个 Jetty 的核心是围绕着 Server 类来构建,Server 类继承了 Handler,

    关联了 Connector 和 Container,Container 是管理 Mbean 的容器。

    整个 Jetty 的所有组件的生命周期管理是基于观察者模板设计,它和 Tomcat 的管理是类似的。

     


    jetty 的体系结构:
           前面所述 Jetty 主要是基于 Handler 来设计的,Handler 的体系结构影响着

    整个 Jetty 的方方面面。下面总结了一下 Handler 的种类及作用:

           Jetty 主要提供了两种 Handler 类型,一种是 HandlerWrapper,它可以将一

    个 Handler 委托给另外一个类去执行,如我们要将一个 Handler 加到 Jetty 中,

    那么就必须将这个 Handler 委托给 Server 去调用。配合 ScopeHandler 类我们

    可以拦截 Handler 的执行,在调用 Handler 之前或之后,可以做一些另外的事情,

    类似于 Tomcat 中的 Valve(阀门);另外一个 Handler 类型是 HandlerCollection,

    这个 Handler 类可以将多个 Handler 组装在一起,构成一个 Handler 链,方便我们做扩展。


    Jetty与 Tomcat 的比较:
         Tomcat 和 Jetty 都是作为一个 Servlet 引擎应用的比较广泛,可以将它们

    比作为中国与美国的关系,虽然 Jetty 正常成长为一个优秀的 Servlet 引擎,

    但是目前的Tomcat 的地位仍然难以撼动。相比较来看,它们都有各自的优点

    与缺点。

         Tomcat 经过长时间的发展,它已经广泛的被市场接受和认可,相对 Jetty

    来说 Tomcat 还是比较稳定和成熟,尤其在企业级应用方面,Tomcat 仍然是

    第一选择。但是随着 Jetty 的发展,Jetty 的市场份额也在不断提高,至于原因

    就要归功与 Jetty 的很多优点了,而这些优点也是因为 Jetty 在技术上的优势

    体现出来的。


    架构上的比较:
    从架构上来说,显然 Jetty 比 Tomcat 更加简单,Jetty 的架构从前面的分析可知,

    它的所有组件都是基于 Handler 来实现,当然它也支持 JMX。但是主要的功能扩

    展都可以用 Handler 来实现。可以说 Jetty 是面向 Handler 的架构,就像 Spring

    是面向 Bean 的架构,iBATIS 是面向 statement 一样,而 Tomcat 是以多级容器

    构建起来的,它们的架构设计必然都有一个“元神”,所有以这个“元神“构建的其它

    组件都是肉身。


    性能上的比较:

    单纯比较 Tomcat 与 Jetty 的性能意义不是很大,只能说在某种使用场景下,它表现

    的各有差异。因为它们面向的使用场景不尽相同。从架构上来看 Tomcat 在处理少数

    非常繁忙的连接上更有优势,也就是说连接的生命周期如果短的话,Tomcat 的总体

    性能更高。

    而 Jetty 刚好相反,Jetty 可以同时处理大量连接而且可以长时间保持这些连接。例如

    像一些 web 聊天应用非常适合用 Jetty 做服务器,像淘宝的 web 旺旺就是用 Jetty 作

    为 Servlet 引擎。

    另外由于 Jetty 的架构非常简单,作为服务器它可以按需加载组件,这样不需要的组件

    可以去掉,这样无形可以减少服务器本身的内存开销,处理一次请求也是可以减少产生

    的临时对象,这样性能也会提高。另外 Jetty 默认使用的是 NIO 技术在处理 I/O 请求上

    更占优势,Tomcat 默认使用的是 BIO,在处理静态资源时,Tomcat 的性能不如 Jetty。


    特性上的比较:
    作为一个标准的 Servlet 引擎,它们都支持标准的 Servlet 规范,还有 Java EE 的规范也

    都支持,由于 Tomcat 的使用的更加广泛,它对这些支持的更加全面一些,有很多特性

    Tomcat 都直接集成进来了。但是 Jetty 的应变更加快速,这一方面是因为 Jetty 的开发社

    区更加活跃,另一方面也是因为 Jetty 的修改更加简单,它只要把相应的组件替换就好了,

    而 Tomcat 的整体结构上要复杂很多,修改功能比较缓慢。所以 Tomcat 对最新的 Servlet

    规范的支持总是要比人们预期的要晚。

  • 相关阅读:
    C++ std::map::erase用法及其陷阱
    写在分类之首-----to do list!
    Gradle系列教材(译)
    Android进阶-UIL分析
    ArrayList源码解析
    Android进阶-MVP
    高质量代码-树的子结构
    高质量代码-并和链表
    高质量代码-翻转链表
    高质量代码-链表中倒数第k个结点
  • 原文地址:https://www.cnblogs.com/changyu521/p/11765852.html
Copyright © 2011-2022 走看看