Jetty9架构解析-Jetty介绍

1.1 简介


1.1.1. Jetty历史

      Jetty是当下非常流行的一款轻量级Java Web服务器和Servlet容器实现,它由Eclipse基金会托管,完全免费而且开放源代码,因此所有人均可以从其官网下载最新源代码进行研究。由于其轻量、灵活的特性,Jetty被广泛用于一系列知名产品,例如ActiveMQ、Maven、Spark、Google App Engine、Eclipse、Hadoop等等。
      Jetty的模块化架构非常适合嵌入式和微服务架构,而微服务架构是目前非常流行的软件架构风格,尤其是与云计算平台相结合的情况下。这使得Jetty越来越受到大家的关注。但是这并不意味着Jetty是一款新的Web服务器产品,相反,它的历史也非常久远,而且发展历程比Tomcat等要曲折的多。
      Jetty最初被称为“IssueTracker”和“MBServler”,顾名思义它是一个缺陷跟踪系统中的HTTP服务器组件。Jetty的初始版本由Mort Bay的Greg Wilkins开发于1995年。自1.x至6.1.x版本,Mort Bay持有Jetty的主要部分的版权,并作为Jetty的主要赞助商。2006年,Jetty的开发改为由Webtide(Mort Bay与合作伙伴的合资公司)主导。2009年,Intalio收购Webtide和Mort Bay,Jetty也因此变为Intalio旗下项目,该公司对外提供基于开源软件的产品和服务,因此雇佣了非常多的Jetty贡献者。2015年,Jetty的开发重新由Webtide接管,Jetty开发者从Intalio分离,并接管公司开源项目的所有权。现在,通过Jetty开源版本的服务支持,Webtide可以提供充足的资金以确保Jetty的持续发展。
      2000年之前,Jetty的源代码以及发布包由Mort Bay提供托管(发布版本1.x~2.x),2000至2005年,由SourceForge.net提供托管(发布版本3.x~5.x),2005~2009年,又改成由codehaus.org提供托管(发布版本6.x),2009年,Jetty的核心组件变为由Eclipse.org托管(发布版本7.x~9.x),2016年,Jetty代码库迁移到Github,但是仍在Eclipse IP Process 下开发。
      自从由Eclipse.org托管开始,Jetty获得了快速发展,无论是其架构特性还是使用程度。首先,在架构上Jetty完全组件化,符合OSGi规范 ,可以运行于主要的OSGi容器(Equinox和Felix)。不仅如此,Jetty还自己提供了一套完整的模块定义和加载方案,以实现其模块化管理(即便在独立运行的情况下)。其次,Eclipse IDE默认将Jetty集成到其WTP、PDE等发布包中,这样Web应用和Eclipse Plugin均可以方便的使用Jetty,如进行Web应用调试部署、发布OSGi HttpService以及开发基于OSGi的Web应用。
      当下云计算平台与微服务架构风格的流行,使得轻量级、模块化的Jetty越来越受到欢迎。Google提供的PaaS平台GAE即采用Jetty作为Web Server和Servlet容器。不仅如此,Jetty的架构也非常适合以命令脚本的形式批量构建、部署、运行Web应用实例,而不必安装多个服务器实例,这也大大提高了服务器的使用效率,尤其是在大规模的云计算环境下。
      除此之外,协议支持层面,Jetty在众多轻量级Java服务器中始终处于领跑者的位置,无论是WebSocket、SPDY还是HTTP/2,因此对于那些想研究、学习以及使用新协议的研发人员,Jetty无疑是一个不错的选择。
      由于Jetty良好的组件化设计,即便不使用Jetty的Web Server和Servlet容器,我们也可以以第三方库的形式在应用系统中使用Jetty组件提供的功能,如WebSocket、HttpClient。
      自从迁移到Eclipse.org后,Jetty发布了三个主要的版本,它们分别支持的HTTP协议、Servlet规范等的版本如下:

规范、JDK\版本 7.x 8.x 9.0.x 9.1.x 9.2.x 9.3.x
JDK 1.5 1.6 1.7 1.7 1.7 1.8
Servlet 2.5 3.0 3.0 3.1 3.1 3.1
JSP 2.1 2.1 2.2 2.3 2.3 2.3
HTTP/1.1
HTTP/2
WebSocket
JSR356
SPDY
FastCGI

1.1.2. Jetty许可

      Jetty自7.x开始采用双重许可,即同时采用Apache License 2.0和Eclipse Public License 1.0许可。在这两个许可条款下,Jetty可以免费用于商业用途及分发。

1.1.3. Jetty与Tomcat对比

      Tomcat作为最受欢迎的轻量级Java Web服务器和Servlet容器,其成名时间要大大早于Jetty,而且使用范围也要比Jetty广泛的多。但是两者诞生的时间却相差无几。Tomcat在2001年发布了其重要的里程碑版本4.0,由此开始被越来越多的人使用。而Jetty则是在2009年,直到改由Eclipse.org托管,其从架构上实现了组件化以及模块化,并且被集成到了Eclipse IDE中用于开发及测试环境,才逐渐被人们关注。随着组件化以及微服务的兴起,Jetty架构上的优势逐步显现,因此最近几年发展迅速。现在Jetty已经不单单是一款Java Web服务器和Servlet容器,而是一款功能强大的服务器工具集。它的很多特性都能很好的满足现在流行的服务端架构模式,包括开发、部署以及运维。
      Jetty与Tomcat相比,从功能特性上,主要的区别归纳起来有以下几点:

  • Jetty对协议及规范的支持上要领先于Tomat,如Jetty 9.3版本开始支持HTTP/2,而Tomcat 9版本才添加对HTTP/2的支持。

  • Jetty符合OSGi标准,可以运行于OSGi容器,以提供HTTP服务器,而Tomcat不支持。

  • Jetty提供了一种模块化方案以实现服务器的模块化管理,还可以自行远程下载并安装第三方模块,而Tomcat不支持。

  • Jetty高度模块化,而且完全采用Maven进行管理,因此我们可以随意在项目中引入并使用Jetty提供的一些工具包,如WebSocket,而Tomcat这方面比较欠缺,很难脱离其服务器环境去使用部分功能。

  • Jetty对第三方框架的集成要好于Tomcat,如支持通过Spring配置Jetty服务器、支持会话通过gcloud或者NoSQL数据库(MongoDB)管理。从这个角度讲,Jetty与现在主流的技术概念贴合更为紧密。

  • Jetty在本地库支持层面做得不如Tomcat,毕竟Tomcat构建之初的目的就是为Apache服务器提供Servlet容器支持,因此Tomcat从很早就开始支持APR,以此提升静态资源的访问性能,而Jetty则暂不支持。

      从架构上看,Tomcat的方案则更成熟,通过清晰的组件分层体系,Tomcat能够满足各种部署场景的需要。而Jetty的方案更轻量,非常容易即可为应用添加HTTP服务支持。
      综上,与Tomcat相比,Jetty更适合组件化应用,适合集成到应用系统中提供HTTP服务,适合以极轻量的方式管理及部署应用(如微服务)。而Tomcat则是以开源的方式提供了一个更为成熟的Web应用部署方案。

猜你喜欢

转载自blog.csdn.net/elinespace/article/details/52753709