阿里云飞天发布时刻,领先大模型限免,超7000万 tokens免费体验 了解详情
写点什么

Google App Engine 转向了 Jetty

  • 2009-08-23
  • 本文字数:2300 字

    阅读完需:约 8 分钟

一开始 Google App Engine 将 Apache Tomcat 作为其 Web Server/Servlet 容器,但最后却转向了 Jetty 。一石激起千层浪,随之而来的是开发者社区无数的质疑之声:为何做此决定?Tomcat 有什么问题么?鉴于此,InfoQ 采访了 Webtide 团队(Jetty 背后的公司)一探究竟。

InfoQ:Google App Engine 为何选择 Jetty 而放弃了 Tomcat,或是其他的服务器?

Google 之所以选择 Jetty,主要是看中了其大小和灵活性。在云中,服务器大小是非常重要的,因为你可能会在 10 秒内运行几千个 Jetty 实例(就像 Google 那样),这样如果每个服务器能省下 1MB,那么 10 秒内就会省下上 GB 的内存(省下的内存可供应用使用),这相当可观。

Jetty 还具有可插拔和可扩展的特质,这样 Google 就能最大限度地对其进行定制了。他们已经插入了自己的 HTTP 连接器、Google 认证以及 Session 集群了。这些特性说明 Jetty 不仅适合于云环境,对嵌入式设备如电话和机顶盒等也同样适用。

InfoQ:Jetty 是个高效的 Java Servlet 容器,其背后的秘诀是什么呢?

在开发 Jetty 之际,我们并未打算将其做成一个完全的应用服务器。我们将每个特性都设计成可插拔的,这样如果不需要某个特性,那它就不会加载到内存中,同时也不会加载到请求处理的调用链中。如果不需要 Session 就可以移除 Session 处理器,这样我们连会话 Cookie 都不用找了,大大节省了时间。在每秒处理几千个请求的情况下,任何微小的查找所产生的代价都是高昂的。

我们并不认为仅仅通过设计就能得到优化的代码,每当有人说起现在的 JVM 在优化和垃圾收集方面有多么棒时,我们都对其持保留态度。也许他们说的对,但不管怎样,我们依然可以对精心编写的代码进行优化,当然了,最好的手段就是避免创建对象。比如说,我们在 Jetty 中使用了并发技术,但却并没有使用常见的标准并发数据结构,因为这会创建太多的对象。因此,相对于并发链表,我们采用了二重并发锁循环数组(dual concurrent lock circular arrays),这样无需创建对象就能享受到非阻塞并发带来的好处。

InfoQ:现在很多开发者都在使用 Jetty 并觉得它很棒,你们是如何做到这一点的呢?

现在 Jetty 已经内建在很多框架中了,比如 GWT、Scala/Lift、Grails、JRuby 等等不一而足。这样如果你使用了上面这些技术就能随时随地使用 Jetty 了。同时,jetty-maven 插件对于广大开发者来说也是一个非常棒的工具,凭借该插件,Web 应用无需将组件打成 War 包就能运行了。我们可以直接编辑源代码和测试结果而无需构建 War 包。凭借 Jetty 的嵌入式特性,我们可以轻松编写一个 main 方法,然后直接在 IDE、调试器或是分析器中执行。

InfoQ:在处理客户端——服务器请求时,Jetty 有什么独到的方式?

现在 Jetty 已经成为第二代异步服务器了。这两年来我们一直在致力于异步请求的处理上,现在这已经成为我们的核心架构的一部分了。有些容器增加了对异步 Servlet 的支持,但在我看来,事实并不像表面看起来的那么简单。我们的异步 HTTP 客户端重用了异步 HTTP 引擎,这样就能以可伸缩的方式生成请求并处理响应了。

如前所述,我们通过一种可扩展、可插拔的处理器机制来处理请求,这样就可以分别对待(忽略、使用抑或是扩展)Web 应用所提供的各种特性。

InfoQ:能否介绍一下还有哪些地方使用了 Jetty,应用规模如何?

Zimbra/Yahoo 将 Jetty 作为 Web Mail 服务器为上百万用户提供服务,上百万开发者使用的 Eclipse IDE 嵌入了 Jetty,hadoop map/reduce 集群(运行在上千个节点集群上,同时还保持有排序 1TB 数据的记录)也使用了 Jetty。我们还有 J2ME 的移植版以及本地的交叉编译,这样就能运行在移动电话、家庭路由以及 Java card 上了!请查看 http://docs.codehaus.org/display/JETTY/Jetty+Powered 以了解其他使用 Jetty 的项目。

InfoQ:Jetty 未来的路线图如何?

目前的当务之急就是发布 Jetty 7.0.0 以履行我们加入 Eclipse 基金会时的承诺。Jetty 7 将支持 Servlet 3.0 的众多特性但却不会使用新的 API,也不需要 Java 1.6。在这之后,我们将发布 Jetty 8,它将使用 Servlet 3.0 和 Java 1.6,同时 Jetty 还将一如既往地紧跟 Web 2.0 领域的变化脚步并不断创新。现在我们提供了 Firefox 3.5 的跨域 Ajax 支持并应用在 cometd 中。不久的将来,我们还会提供 WebSocket 和 BWTP 支持。对 Google Wave 及相关协议的支持也已经提到了议事日程上,优先级还是非常高的。

InfoQ:Google/Jetty 还有什么其他的计划么?

Google 的计划并未公之于众,因此我们也不得而知。在 JavaOne 上,我们曾与 App Engine 的一些开发者聊过。对于他们所提出的关于如何改进 Jetty 的嵌入性与扩展性等相关问题,我们会以最快的速度给予回应。

在随后与 Webtide 团队的讨论中,InfoQ 问到了关于 SpringSource 采用 Tomcat 而不是 Jetty 的缘由。

InfoQ:能否向我们解释一下 SpringSource 为何将 Tomcat 而不是 Jetty 作为 Grails 的默认容器

原因在于 Grails 的主力开发者认为一旦遇到问题,他们能从内部的 Tomcat 开发者那里获得更好的“服务”。我怀疑这是 SpringSource 的商业策略,他们将 Grails 用户赶到 Tomcat 上,这样就能向其兜售服务了。JBoss 也一样,几年前 JBoss 雇佣了几个 Tomcat 开发人员,同时他们与 MortBay 的合同也到期了,结果就用 Tomcat 替换掉了 Jetty。商业因素的影响要比技术大的多,我对此感到遗憾,但现在我们处于这样一个时代:基础项目正源源不断地融合到应用服务器中心了。

Grails 还会继续支持 Jetty 和 Tomcat 的集成,但默认是处于 Tomcat 托管模式下。

通过以上的讨论我们能看出这正是 SpringSource 与 Tomcat 之间的关系

查看英文原文: Google Chose Jetty for App Engine

2009-08-23 07:184650
用户头像

发布了 88 篇内容, 共 268.7 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

如何在 Apifox 中正确指定 query 参数?

Apifox

Java 程序员 Apifox API 接口工具

openGemini:顺势而动,蓄势而发

华为云开源

数据库 开源

数字化转型的“整体规划”有多重要?

优秀

低代码 数字化转型 数字化

强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

汀丶人工智能

人工智能 深度学习 强化学习 深度强化学习 6 月 优质更文活动

龙智携手Atlassian亮相DevOps国际峰会:释放团队潜力,以协作挑战不可能

龙智—DevSecOps解决方案

DevOps ITSM ITSM软件 工作管理

Typora绿化版

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

基于双层缓存(DLC)机制解决热点缓存并发重建问题

xfgg

Java' 6 月 优质更文活动

四大技巧,教你如何加速手动UI测试

龙智—DevSecOps解决方案

UI测试 用户界面测试

用简单的描述带你理解运算放大器

矜辰所致

运算放大器 6 月 优质更文活动

优化开发工作流的三大实用技巧,助力效率提升

龙智—DevSecOps解决方案

版本控制 版本管理

ModelBox实战开发:RK3568实现摄像头虚拟背景

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

IT自动化运维工具用哪款?需要考虑哪些因素?

行云管家

IT运维 自动化运维 IT自动化运维

模型当道 开源聚力|2023开放原子全球开源峰会开源大模型分论坛圆满收官

开放原子开源基金会

开源 大模型 开放原子全球开源峰会 开放原子

可观测性最佳实践 | 警惕!未知的风险正在摧毁你的系统

观测云

可观测性 运维监控 观测云 云原生可观测 可观测性用观测云

Seata Saga 模式快速入门和最佳实践

阿里巴巴云原生

阿里云 云原生 seata

即时通讯技术文集(第17期):社交软件红包技术专题 [共12篇]

JackJiang

网络编程 即时通讯 IM

NFTScan | 06.12~06.18 NFT 市场热点汇总

NFT Research

热点 NFT\

华为云邓明昆:云原生时代,以开源赋能数字化转型

华为云开源

开源 云原生 数字化

详解4种模型压缩技术、模型蒸馏算法

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

强化学习从基础到进阶-常见问题和面试必知必答[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

汀丶人工智能

人工智能 深度学习 强化学习 深度强化学习 6 月 优质更文活动

赋能中国软件,共筑开放生态|2023开放原子全球开源峰会软硬协同开源分论坛成功举办

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 软硬协同开源

【参考设计】2KW AC/DC数字电源方案

元器件秋姐

设计 电路 方案 电源 数字电源

LED透明屏和LED玻璃屏的区别

Dylan

分辨率 视频 图像 屏幕亮度 LED

观点碰撞燃爆会场|2023开放原子全球开源峰会区块链分论坛圆满落幕

开放原子开源基金会

区块链 开源 开放原子全球开源峰会 开放原子

618夏日“折”学家活动上线!开通表盘会员解锁百变腕间风格

最新动态

GPT-4满分通过MIT本科数学考试!这套提示词火了

Openlab_cosmoplat

算法 ChatGPT

Google App Engine转向了Jetty_Java_Craig Wickesser_InfoQ精选文章