Jetty和Tomcat,哪个更好?

2019 年 5 月 13 日 余晟以为

Java是编程语言的常青树,但是Java做Web开发的容器却是五花八门。商用软件的WebLogic和WebSphere估计如今一般人不太知道了,但开源软件里的Tomcat、Jetty却是路人皆知。

经常有初学者会问:Tomcat和Jetty,到底哪个好?言下之意,大概是怕自己一不小心上错了船,日后走了弯路。

通常来说,Jetty短小精干,Tomcat老当益壮,两者没有绝对的优劣之分。从Servlet的角度出发,两者是同一标准的不同实现。更有意思的是,Jetty逐渐在向大而全发展,而Tomcat在不断瘦身。

不过对于初学者,这些区别都不那么重要,重要的是理解Java Web开发的技术栈,以及学习Jetty、Tomcat中的多线程、网络编程等等技术点。

如果你是一个热衷于技术的 Java 程序员,今天为你分享一位大佬的学习经历,可以让你在众多 Java 开发人员中脱颖而出。

这位大佬,我介绍一下:

李号双,eBay 技术主管,2009 年毕业后加入惠普,先后负责分布式企业级应用的开发与架构设计,以及容器化上云。

2018 年加入 eBay, 参与 eBay 付款系统 2.0 的设计与研发,负责可靠性和高可用部分,系统采用定制版的 Tomcat 运行大规模微服务实例,并且通读过 Tomcat 源码,具有丰富的线上问题定位和调优经验。

以下是他的分享:

很多「过来人」都会告诫新人,编程没有捷径可走,不花费几年时间经过大量的实践和刻意练习怎么能领悟编程的精髓呢?

我曾经也是一名“刻苦”的新人,直到后面才体会到,其实在 Java 的学习上,同样也逃不开”二八原则“,即掌握 20% 的知识,就能解决 80% 的问题

这一点也是我工作很久之后才悟出来的,这种思维方式让我在之后的 Java 学习路上受益很大。

我先来讲讲自己的经历。

十年前,我在实习做嵌入式系统开发,开发语言是 C 和 C++。出于我个人兴趣爱好,当时我想转 Java,学了一段时间后,发 现 Java 上手还挺快,API 比较齐全,也不需要自己来管理内存,感觉比 C 语言高级。

毕业后我顺利地找到了一个 Java 开发的工作,入职后我的工作主要是实现一些小模块,很多时候通过代码的复制粘贴,再稍微改改就能完成功能,这样的状态大概持续了一年。

在这个过程中,我对 Java 语法更加熟悉了,也“背”过一些设计模式,用过一些 Web 框架,但是很少有机会将一些 Java 的高级特性运用到实际项目中,因此对它们的理解也是模糊的

那时候如果让我独立设计一个系统,我会感到非常茫然,不知道从哪里下手;对于 Web 框架,我也只是知道这样用是可以的,但却不知道它背后的原理是什么。

而且,在我脑子里没有一张 Java Web 开发的全景图,举个例子,我不知道浏览器的请求是怎么跟 Spring 中的代码联系起来的。

后来我分析发现,我的知识体系在广度和深度上都有问题。然而 Java 知识体系很庞大,我到底该专注于哪一方面?

接着,我注意到了像 Tomcat 和 Jetty 这样的 Web 容器,觉得它们很神奇,只需要把 Web 应用打成 WAR 包放到它的目录下,启动起来就能通过浏览器来访问了。

那 Web 容器究竟是如何工作的?带着这份好奇心,我决定选择 Tomcat 来深入研究

学习了Tomcat的原理之后,我发现Servlet技术是Web开发的原点,几乎所有的Java Web框架(比如Spring)都是基于Servlet的封装,从Servlet规范的角度来看,Spring应用其实就是一个Servlet,而Tomcat和Jetty这样的Web容器,负责加载和运行Servlet。

你可以通过下面这张图来理解 Tomcat/Jetty 在 Web 开发中的位置:



随着学习的深入,我还发现 Tomcat 和 Jetty 中用到不少 Java 高级技术,比如 Java 多线程并发编程、Socket 网络编程以及反射等等。

之前我仅仅只是了解这些技术,为了面试也背过一些题,但是总感觉“知道”和“会用”之间存在一道鸿沟。

通过对 Tomcat 和 Jetty 源码的学习,我学会了在什么样的场景下去用这些技术,这一点至关重要

在理解了 Web 容器以及 JVM 的工作原理后,我开始解决线上的疑难杂症,并且尝试对线上的 Tomcat 进行调优。性能的提升也是实实在在的成果,我也因此得到了同事们的认可

总之,在这个过程中,我逐渐建立起了自己的知识体系,也开始独立设计一个系统,独立解决技术难题,也就是说我渐渐具备了独当一面的能力,而这正是高级程序员或者架构师的特质。

概括一下,独当一面的能力,离不开技术的广度和深度

后来我才发现,这种能力其实是我在深入学习 Tomcat 的过程中才逐渐拥有的,这就是回归到我开头说的观点:掌握 20% 的知识,就能解决 80% 的问题

人的精力是有限的,广度和深度该如何权衡呢?我建议找准一个点先突破深度,而 Tomcat 和 Jetty 就是非常好的选择。


以上就是李号双的 Java 学习之路,希望对大家有所启发。


李号双最近跟极客时间合作推出了《深入拆解 Tomcat & Jetty》这门课程,把他当年学习 Java 的这种思维方式沉淀成一套可复制的实战方法。市面上 Tomcat 的靠谱资料太少了,终于等来极客时间上了这门课。


这个专栏的设计路线共分为四个阶段:

第一阶段:重学 Tomcat 和 Jetty 的必备基础

首先要学习一些基础知识,比如操作系统、计算机网络、Java 语言,面向对象设计、HTTP 协议以及 Servlet 规范等,帮你重新理解 HTTP 协议和Servlet 规范。

第二阶段:深刻掌握 Tomcat 和 Jetty 的整体架构

从 Tomcat 的 Jetty 的总体架构全貌逐步深入到各个组件,在这个过程中,重点关注组件的工作原理和设计思路,比如这个组件为什么设计成这样,设计者们当时是怎么考虑这个问题的。

然后通过源码的剖析,加深你的理解。更重要的是,帮你学会在真实的场景下如何运用 Java 技术

第三阶段:深入讲解连接器、容器和通用组件的详细设计和工作原理

连接器:

→ Tomcat 如何实现非阻塞和异步 I/O 通信、如何扩展 Java 原生线程池、如何支持 WebSocket;

→ 详解 Jetty 的线程策略 EatWhatYouKill;

→ 总结 Tomcat 和 Jetty 的对象池技术以及高并发高性能之道。

容器:

→ 讨论 Tomcat 的热加载热部署、类加载机制、Web 应用的隔离以及如何实现 Servlet 规范、如何实现异步 Servlet;

→ 探讨 Jetty 如何实现带有上下文信息的责任链;

→ 通过 Jetty 与 Tomcat 的对比,比较它们各自的设计特点,让你对选型有更深的理解。并且通过思考和总结,帮你从中提炼一些通用的设计原则,以及实现高性能高并发的思路。

通用组件:

→ 包括日志组件、Session 管理组件和集群通信组件。


第四阶段:从实战出发,解决工作中最常见的性能问题

在深入了解 Tomcat 和 Jetty 的工作原理之后,接着会从实战出发,带你看看如何监控 Tomcat 的性能,以及怎么从内存、线程池和 I/O 三个方面进行调优。

同时我还会分析和解决一些你在实际工作中可能会碰到的棘手问题,让你的 Web 程序飞起来

在这个过程中,还会解读 Servlet 最新技术及实际应用,比如 WebSocket 和异步 Servlet 等,会重点分析这些新技术是从何而来,以及 Tomcat/Jetty 是如何支持的。这些都是 Web 技术的最新动向,你可以在自己的工作中根据需要选用这些新技术

并且,你能体会到大神们是如何设计 Tomcat 和 Jetty 的,体会他们如何思考问题、如何写代码,教会你在真实的场景下如何运用 Java 技术,这些都能快速增加你的经验值。

如果你正在 Java Web 开发这条路上向着架构师的方向狂奔,相信有了它,你将会走的更快更好!

现在订阅有什么优惠?

限时 68元原价 99元,立省 31元!

△扫码试读或者订阅


两杯咖啡的价格,

提升你的开发效率两倍以上!

深入 Tomcat,提升 Java 开发广度,成为 20% 领先的技术人!

👇点击「阅读原文」,免费试看!

登录查看更多
8

相关内容

Java 是一门编程语言,拥有跨平台、面向对象、泛型编程等特性。
打怪升级!2020机器学习工程师技术路线图
专知会员服务
98+阅读 · 2020年6月3日
【2020新书】C++20 特性 第二版,A Problem-Solution Approach
专知会员服务
58+阅读 · 2020年4月26日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
说说我的老同事,前端大神程劭非
余晟以为
17+阅读 · 2019年1月14日
如何快速入门TensorFlow ?丨极客时间
InfoQ
4+阅读 · 2019年1月8日
136个Python 机器学习知识点让你受益终生!
PaperWeekly
8+阅读 · 2018年12月23日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
1年开发经验,25万年薪的1个捷径,98%Python程序员都不知道
机器学习算法与Python学习
7+阅读 · 2018年5月23日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
推荐系统这事,难不?难在哪里?
聊聊架构
7+阅读 · 2018年2月26日
Tensorflow 好差劲 !
云头条
8+阅读 · 2017年10月9日
Arxiv
5+阅读 · 2018年10月23日
Arxiv
7+阅读 · 2018年6月1日
Arxiv
6+阅读 · 2018年4月23日
Arxiv
6+阅读 · 2018年3月29日
Arxiv
6+阅读 · 2018年2月26日
Arxiv
5+阅读 · 2018年1月30日
VIP会员
相关VIP内容
打怪升级!2020机器学习工程师技术路线图
专知会员服务
98+阅读 · 2020年6月3日
【2020新书】C++20 特性 第二版,A Problem-Solution Approach
专知会员服务
58+阅读 · 2020年4月26日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
相关资讯
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
说说我的老同事,前端大神程劭非
余晟以为
17+阅读 · 2019年1月14日
如何快速入门TensorFlow ?丨极客时间
InfoQ
4+阅读 · 2019年1月8日
136个Python 机器学习知识点让你受益终生!
PaperWeekly
8+阅读 · 2018年12月23日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
1年开发经验,25万年薪的1个捷径,98%Python程序员都不知道
机器学习算法与Python学习
7+阅读 · 2018年5月23日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
推荐系统这事,难不?难在哪里?
聊聊架构
7+阅读 · 2018年2月26日
Tensorflow 好差劲 !
云头条
8+阅读 · 2017年10月9日
Top
微信扫码咨询专知VIP会员