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

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

猜你喜欢

转载自www.cnblogs.com/changyu521/p/11765852.html
今日推荐