`
liss
  • 浏览: 842235 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Google 选择 Jetty, 放弃 Tomcat

阅读更多

Google 应用系统引擎最初是以 Apache Tomcat 作为其 webserver/servlet 容器的,但最终将切换到 Jetty 上。 这个决定让许多开发人员都诧异的想问:为什么要做这样的改变?Tomcat 有什么问题吗? 我们获得的一次访问 Webtide ——Jetty 背后的公司——里的这个团队的机会,得到了关于这个决定背后更详细的信息。

 

记者: 为什么Google选择Jetty作为其应用系统的引擎,而不是 Tomcat 或其他的?

 

Google选择Jetty的关键原因是它的体积和灵活性。 在云计算里,体积的因素是很重要,如果你运行几万个Jetty的实例(Google就是这样干的),每个server省1兆,那就会省10几个G的内存(或能够给其他应用提供更多的内存)。

Jetty 被设计成了可插拔和可扩展的特性,这样Google就可以高度的自定义它。 他们在其中替换了他们自己的HTTP connector,Google认证,以及他们自己的session集群。也真是奇怪,这个特性对于云计算来说是非常出色的,但同时也让Jetty非常适合嵌入小的设备中,例如手机和机顶盒。

 

记者: 是什么促使Jetty成为Java里出色的servlet容器?

 

我们在开发Jetty时,并没有想着要把它开发成一个全功能的应用server(尽管它是的)。每一项功能都考虑了可插拔性,所以,如果你不需要他,你就可以不把它加载到内存里,把它从request 处理调用链中去掉。如果你不需要sessons,你可以把session处理器拿掉,这样你就不要浪费资源去来回寻找session cookie了。当你每秒钟都有出来上千个请求时,这些微小的查找动作的开销是非常的大的。

 

我们也并没有想当然的企图通过设计就可以得到最优化的代码,我们是如同收集沙粒般,每次得到一些人告诉我们如何才能有好的JVMs优化和垃圾回收办法。这是真的,已经很小心的代码仍然能被优化,最后的效果就是避免创建新的对象。例如,我们在Jetty里使用并行处理技术,但我们并没有使用很多标准的并行处理数据结构,因为这需要创建太多的对象。所以,只是作为个例子,我们使用了双并行锁循环 arrays,而不是采用并行链式 lists,这样我们就能够在不创建对象的情况下,获得了非阻塞并行效果。

 

记者: 是什么使Jetty成为开发人员的一个有用的server平台的(例如:testing)?

 

Jetty 已经在一些流行框架中内置了,例如GWT,scala/lift,grails,Jruby等等,还有很多。如果你使用了这些技术,你就直接可以用Jetty了。 Jetty-maven 插件是另外一个非常优秀的开发工具,它能让web应用在不打包成war文件的情况下运行。源文件可以直接编辑,在不需要把它重新放进war文件的情况下获得测试结果。 Jetty嵌入式的特征让我们不再需要写通过写那些main方法、通过你的IDE,调试器或 profiler 来运行之类的无聊的事情。

 

记者: Jetty在处理 client-server 请求时有什么独特的地方吗?

 

Jetty 现在是一个第二代的异步处理server。 过去的两年里,我们让Jetty实现了处理异步请求的功能,这成了它核心架构的一部分。就像其他的支持异步serlets容器一样,我想,他们会发现这个东西并不是看起来的那么简单和容易。 我们的异步HTTP引擎被我们复用在了HTTP client 上,所以我们可以大量的降低request 和 responses 消耗。

同时,就像我之前提到过的,我们的请求处理器是可扩展和可插拔的,这让web application可以被单独省略掉,或者是单独使用,或者是进一步扩展的application。

 

记者: 有没有其他Jetty使用的案例,大的或小的?

 

使用Jetty的公司有像Zimbra/Yahoo,这意味着Jetty正作为web mail 服务器,为百万级的用户提供服务。 Eclipse IDE把它内置了进去,这意味着有成百万的开发者在桌面运行Jetty。 Jetty被 hadoop map/reduce cluster使用,在其上有几千个点的集群,处理着世界最大的TB级别的数据分类排序工作。 我们也有 J2ME 的接口,有本地编译器,所以我们可以在手机上,家用路由器和 Java cards 上运行。 更多的Jetty使用的例子可以参考 http://docs.codehaus.org/display/JETTY/Jetty+Powered

 

记者: Jetty的将来或蓝图是怎样的?

 

Jetty 最近的计划是发布 7.0.0 版本,这将会完全的迁移到eclipse foundation 下。 Jetty 7 将会支持很多 servlet 3.0 的特征,但是并不会使用新的API 和 不会依赖Java 1.6 。 Jetty 7后,很快我们会发布Jetty 8,这将会完全支持 servlet 3.0 和 Java 1.6,Jetty 会继续的创新 和跟踪各种web 2.0 里的其他的新成果。 我们现在已经能支持 Firefox 3.5 里的跨域Ajax功能,我们可以在cometd版本里使用这个。 我们很快就会增加对 WebSocket 和 BWTP 的支持。 对 Google wave 以及相关协议的支持的问题已经优先排到了我们的议事日程上了。

 

记者: Google/Jetty 还有其他的计划吗?

 

Google有他们自己下棋的棋局,我们并不清楚。 我们在JavaOne大会上曾经和App Engine开发者们有个简单的对话,我们愿意听他们任何的反馈和意见,用来改进Jetty的可嵌入性和可扩展性。

下面的跟Webtide团队的讨论中,我们询问了SpringSource 从Jetty转换到Tomcat的事情。

 

记者: 你们如何看待 SpringSource 把 Grails 从本来作为缺省容器的Jetty换成了Tomcat的事情?

 

原因是grails开发的领导感觉使用Tomcat能从内部的Tomcat开发人员哪里获得更好的”服务“。我猜测,他们把Grails的用户驱赶到某一个平台,以让SpringSource能更好的销售他们的技术支持服务。几年前我们看到了相同的事情,JBoss 雇佣了一下tomcat开发人员后把Jetty提出成了Tomcat,并最终和Mort Bay达成了商业合同。 很遗憾,这些商业协议对技术选择有如此大的影响,当相同的是,一些基础结构的工程也正聚集到也application server 为中心的队伍里来。

 rails将会继续同时支持对Jetty和Tomcat的集成,但会改成Tomcat为缺省服务。

 

这看起来是 SpringSource使用/攀附 Tomcat 的一个特别合适的论断。

分享到:
评论

相关推荐

    jetty,tomcat原理

    **Jetty与Tomcat原理详解** Jetty和Tomcat是两个广泛应用的Java Web服务器和Servlet容器,它们在处理HTTP请求、执行Java Servlets以及管理Web应用程序方面起着关键作用。了解这两个容器的工作原理对于开发者来说至...

    Jetty和tomcat比较.docx

    ### Jetty和Tomcat的比较 #### 相同点 - **Servlet引擎**: Tomcat和Jetty都是基于Java的Servlet容器,支持标准的servlet规范和JavaEE的规范。这意味着开发者可以在这些容器中部署和运行Java Web应用。 #### 不同...

    websocket+tomcat+jetty+netty

    总结来说,"websocket+tomcat+jetty+netty"这个主题涵盖了WebSocket协议及其在不同服务器框架中的实现。Tomcat、Jetty和Netty都是支持WebSocket的Java服务器平台,各有其优势和适用场景。理解这些技术可以帮助开发者...

    从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式

    Jetty、Tomcat和Mina都是Java领域中著名的Web服务器和应用服务器,它们在NIO架构上有着相似的设计模式。本文将从这三个框架中提炼出NIO构架网络服务器的经典模式,并逐一解析它们的核心机制。 首先,Jetty的NIO实现...

    how tomcat works和jetty-src和tomcat7-src

    【标题】"how tomcat works和jetty-src和tomcat7-src" 提及了三个关键概念:Tomcat的工作原理、Jetty源代码以及Tomcat 7的源代码。这些是Java Web服务器领域的核心元素,主要涉及到如何处理HTTP请求、部署Web应用...

    SpringBoot切换Tomcat容器,SpringBoot使用Jetty容器

    在Spring Boot框架中,开发者可以选择不同的嵌入式Web服务器作为应用程序的容器,其中最常见的是Tomcat和Jetty。本文将深入探讨如何在Spring Boot项目中从Tomcat切换到Jetty容器,以及这两个容器的特点和使用场景。 ...

    定时监控jetty,tomcat 等容器端口自动重启 windows版

    定时监控jetty,tomcat 等各种容器端口,自动重启服务,端口可以自己配置windows 的bat 脚本

    maven&struts2&jetty&tomcat

    该包适用于maven新手入门,因为作者本身也是一员maven新手,里面包括了maven的下载包,插件包,插件的配置,环境变量的设置,maven项目建立的详解及运行,里面集成了jetty,tomcat,struts2,当然还包括了直接运行jar包...

    maven-spring-springmvc-mybatis-mysql-jetty(tomcat)的demo

    构建的maven-spring-springmvc-mybatis-mysql-jetty(tomcat)小demo,可以在jetty和tomcat上跑起来,实现了最基本的请求响应的一整套流程。留存一下,为以后搭建新项目用。

    如何将xacs从jetty平台移植到tomcat平台

    这里我们选择使用 MySQL 作为数据库,使用 Java 1.7 作为开发语言,并使用 Tomcat 8.0.37 作为 Web 容器。 二、安装数据库 由于 XACS 默认使用 MySQL 数据库,所以我们需要安装 MySQL。在安装完成后,我们使用 ...

    服务器tomcat、jetty

    在选择Tomcat还是Jetty时,开发者通常会根据项目的规模、性能需求以及是否需要完整Java EE功能来决定。对于小型应用或需要快速原型开发的项目,Jetty可能是更好的选择;而对于大型企业级应用,Tomcat由于其广泛的...

    Servlet引擎:JBoss与Tomcat、Jetty协同工作

    ### Servlet引擎:JBoss与Tomcat、Jetty协同工作 #### 深入理解Servlet引擎:JBoss与Tomcat、Jetty的协同机制 在JavaWeb技术领域,Servlet引擎扮演着至关重要的角色,它们负责执行Servlet,处理HTTP请求并生成响应...

    Tomcat-JBoss-Weblogic-Jetty的区别和介绍

    Tomcat应用也算非常广泛的web 服务器,支持部分j2ee,免费,出自 apache基金组织 JBoss开源的应用服务器,比较受人喜爱,免费(文档要收费) weblogic应该说算是业界第一的app server,全部支持j2ee1.4, 对于...

    jetty嵌入式服务器必须的jar包

    jetty嵌入式服务器开发所必须的jar包,本人使用jetty版本为6.1.3,jar包总数为9个,来自jetty:commons-el-1.0.jar,jasper-compiler-5.5.15,jasper-compiler-jdt-5.5.15.jar,jasper-runtime-5.5.15.jar,jetty-...

    Eclipse SVN Jetty Tomcat jad 等常用插件

    "Eclipse SVN Jetty Tomcat jad 等常用插件"这个标题提到了几个在Java开发中非常关键的工具和组件,让我们一一解析它们: 1. **SVN(Subversion)**: - SVN是版本控制系统,用于跟踪和管理项目源代码的变更。在...

    linux和windows版本的tomcat和jetty

    本压缩包包含了不同平台——windows以及linux最新的tomcat版本,(包含:tomcat-5.5.36、tomcat-6.0.37、tomcat-7.0.47)。 和jetty-distribution-9.0.6.v20130930。 供java web开发人员去下载

    Jetty+Dojo+Tomcat的Comet配置

    jetty-6.1.9 jetty-util-6.1.9 servlet-api-2.5-6.1.9 全网搜索dojox.cometd实现WEBQQ,没有可以运行的源码包项目,搞了五天,分享给大家,真实可用,jar包就找了好久,花了5分,搞了5天5分。共10分。 付原作者地址...

    IntelliJ IDEA使用tomcat和jetty配置详解

    IntelliJ IDEA配置tomcat和jetty详解 IntelliJ IDEA是一款功能强大且流行的集成开发环境(IDE),广泛应用于Java开发领域。今天,我们将讨论如何在IntelliJ IDEA中配置tomcat和jetty服务器,以便更好地开发和调试...

Global site tag (gtag.js) - Google Analytics