深入拆解Tomcat & Jetty / 从源码角度深度探索Java中间件
李号双
eBay技术主管
 
  • 课程目录
  • 课程介绍
  • 开篇词 | Java程序员如何快速成长?

    弄懂了Tomcat和Jetty,Java Web开发对你来说就已经毫无“秘密”可言。

  • 01 | Web容器学习路径

    作为专栏更新的第1篇文章,我想和你谈谈什么是Web容器,以及怎么学习Web容器。

  • 02 | HTTP协议必知必会

    如果你想深入理解Tomcat和Jetty的工作原理,我认为理解HTTP协议的工作原理是学习的基础。

  • 03 | 你应该知道的Servlet规范和Servlet容器

    Servlet、Servlet接口、Servlet容器、Servlet规范,你都搞清楚了吗?

  • 04 | 实战:纯手工打造和运行一个Servlet

    今天我们抛弃IDE、拒绝框架,自己纯手工编写一个Servlet,并在Tomcat中运行起来。

  • 05 | Tomcat系统架构(上): 连接器是如何设计的?

    今天我们来分析Tomcat的设计思路,看看Tomcat的设计者们是如何设计它的架构。

  • 06 | Tomcat系统架构(下):聊聊多层容器的设计

    在Tomcat里,容器就是用来装载Servlet的。那Tomcat的Servlet容器是如何设计的呢?

  • 07 | Tomcat如何实现一键式启停?

    Tomcat是如何用一种通用的、统一的方法,来管理组件的生命周期,达到汽车“一键启动”那样的效果呢?

  • 08 | Tomcat的“高层们”都负责做什么?

    今天我们来了解一下Tomcat的“高层”,看看它们如何管理下层组件的生命周期,并且给下层组件分配任务。

  • 09 | 比较:Jetty架构特点之Connector组件

    Servlet容器并非只有Tomcat一家,你还了解其他的架构设计思路吗?今天我们就来看看Jetty的设计特点。

  • 10 | 比较:Jetty架构特点之Handler组件

    Jetty的Handler在设计上非常有意思,可以说是Jetty的灵魂,Jetty通过Handler实现了高度可定制化。

  • 11 | 总结:从Tomcat和Jetty中提炼组件化设计规范

    今天我来总结一些Tomcat和Jetty组件化的设计思想,或许从中我们可以得到一些启发。

  • 12 | 实战:优化并提高Tomcat启动速度

    今天我针对Tomcat 8.5和9.0版本,给你几条优化并提高Tomcat启动速度的建议,你可以现学现用。

  • 13 | 热点问题答疑(1):如何学习源码?

    对于Java后端开发来说,有不少经典的开源框架和中间件值得学习,今天我就来聊聊如何学习它们的源码。

  • 14 | NioEndpoint组件:Tomcat如何实现非阻塞I/O?

    今天我会先说说各种I/O模型的区别,然后重点分析Tomcat的NioEndpoint组件是如何实现非阻塞I/O模型的。

  • 15 | Nio2Endpoint组件:Tomcat如何实现异步I/O?

    BIO是我们最熟悉的同步阻塞,NIO是同步非阻塞,那NIO.2又是什么呢?NIO已经足够好了,为什么还要NIO.2呢?

  • 16 | AprEndpoint组件:Tomcat APR提高I/O性能的秘密

    今天我会讲解AprEndpoint组件的工作过程,并在原理的基础上分析APR是如何提升性能的。

  • 17 | Executor组件:Tomcat如何扩展Java线程池?

    为了提高处理能力和并发度,Tomcat扩展了原生的Java线程池,来满足Web容器高并发的需求。

  • 18 | 新特性:Tomcat如何支持WebSocket?

    今天我会介绍WebSocket的工作原理,以及作为服务器端的Tomcat是如何支持WebSocket的。

  • 19 | 比较:Jetty的线程策略EatWhatYouKill

    根据Jetty的官方测试,EatWhatYouKill这个线程策略将吞吐量提高了8倍,你知道它是如何实现的吗?

  • 20 | 总结:Tomcat和Jetty中的对象池技术

    一个比较大、比较复杂的Java对象,创建、初始化和GC都需要耗费CPU和内存资源,为了减少开销,我们可以使用对象池技术。

  • 21 | 总结:Tomcat和Jetty的高性能、高并发之道

    Tomcat和Jetty中用到了大量的高性能、高并发的设计,今天我们就来聊聊这些设计的门道。

  • 22 | 热点问题答疑(2):内核如何阻塞与唤醒进程?

    学习Tomcat连接器组件的设计,最重要的是各种I/O模型及其实现,而I/O模型跟操作系统密切相关。

  • 23 | Host容器:Tomcat如何实现热部署和热加载?

    要在运行的过程中升级Web应用,如果你不想重启系统,实现的方式有两种:热加载和热部署。

  • 24 | Context容器(上):Tomcat如何打破双亲委托机制?

    Tomcat通过Context组件来加载管理Web应用,今天我会分析Tomcat的类加载机制以及工作中遇到的加载异常。

  • 25 | Context容器(中):Tomcat如何隔离Web应用?

    今天我们来学习一下Tomcat的类加载器的设计,以及如何通过设计多层次的类加载器来解决加载问题。

  • 26 | Context容器(下):Tomcat如何实现Servlet规范?

    Web容器最重要的职能就是把Servlet规范的“三兄弟”创建出来,并在适当的时候调用它们的方法。

  • 27 | 新特性:Tomcat如何支持异步Servlet?

    假如你的Web应用需要长时间来处理请求,那么Tomcat线程一直不回收,会占用系统资源,在极端情况下会导致“线程饥饿”。

  • 28 | 新特性:Spring Boot如何使用内嵌式的Tomcat和Jetty?

    我们如何向SpringBoot中的Tomcat注册Servlet或者Filter呢?我们又如何定制内嵌式的Tomcat?

  • 29 | 比较:Jetty如何实现具有上下文信息的责任链?

    今天我们来分析一下Jetty中ScopedHandler的实现原理,以及如何实现链式调用的“回溯”。

  • 30 | 热点问题答疑(3):Spring框架中的设计模式

    在专栏的热点问题答疑第三篇,我想跟你分享一些我对设计模式的理解。

  • 31 | Logger组件:Tomcat的日志框架及实战

    今天我们就来看看Tomcat的日志模块是如何实现的。默认情况下,Tomcat使用自身的JULI作为内部的日志处理系统。

  • 32 | Manager组件:Tomcat的Session管理机制解析

    今天我们从Session的创建、清理以及事件通知这几个方面来了解Tomcat的Session管理机制。

  • 33 | Cluster组件:Tomcat的集群通信原理

    今天我们来看看Tomcat集群通信的原理和配置方法,最后通过官网上的一个例子来了解下Tomcat集群到底是如何工作的。

  • 特别放送 | 如何持续保持对学习的兴趣?

    如果你觉得源码太复杂了,似乎有种学不动的感觉,那一定请你打开今天的文章,看看号双讲如何持续保持对学习的兴趣。

  • 34 | JVM GC原理及调优的基本思路

    在对GC调优的过程中,我们不仅需要知道GC的原理,更重要的是要熟练使用各种监控和分析工具,具备GC调优的实战能力。

  • 35 | 如何监控Tomcat的性能?

    专栏上一期我们分析了JVM GC的基本原理以及监控和分析工具,今天我们接着来聊如何监控Tomcat的各种指标。

  • 36 | Tomcat I/O和线程池的并发调优

    上一期我们谈到了如何监控Tomcat的性能指标,在这个基础上,今天我们接着聊如何对Tomcat进行调优。

  • 37 | Tomcat内存溢出的原因分析及调优

    作为Java程序员,我们几乎都会碰到OutOfMemoryError异常,你知道有哪些原因可能导致JVM抛出这个异常吗?

  • 38 | Tomcat拒绝连接原因分析及网络优化

    我们在实际工作中经常碰到网络通信方面的错误和异常,需要理解异常背后的原理,才能更快更精准地定位问题,从而找到解决办法。

  • 39 | Tomcat进程占用CPU过高怎么办?

    今天我们来看一下Tomcat进程的CPU使用率过高怎么办,以及怎样一步一步找到问题的根因。

  • 40 | 谈谈Jetty性能调优的思路

    关于Jetty的性能调优,分为操作系统层面和Jetty本身的调优,我们今天来看一看它们具体是怎么做的。

  • 41 | 热点问题答疑(4): Tomcat和Jetty有哪些不同?

    如果把Tomcat比作一位工作多年的成熟工程师,那Jetty更像是一位年轻的后起之秀,脑子转得很快,可塑性也很强。

  • 结束语 | 静下心来,品味经典

    从专栏上线发布到现在,不知不觉三个月时间过去了,感谢你的一路陪伴,今天到了说再见的时候。

作为一名Java Web开发工程师,不知道你是否有过下面这些经历:

  • 对一些Java技术感觉似懂非懂?
  • 不知道怎么把Java技术用到实际的项目中?
  • 给你一个业务场景,拿不出靠谱的设计方案?
  • Spring框架层面的问题不知道如何定位和修复?
  • 性能调优没思路?

这其中的很多问题其实最终都指向经验不足、设计能力有待提高,没有深刻理解Web的工作原理。而Web容器Tomcat或Jetty,作为重要的系统中间件,连接着浏览器和你的Web应用,并且支撑着Web程序的运行,可以说,弄懂了Tomcat和Jetty的原理,Java Web开发对你来说就毫无秘密可言

那么再换个角度,从一名Java Web开发工程师的成长来看,每个人都会经历:

  • 维护老项目。
  • 实现一个小模块。
  • 独立设计一个子系统。
  • 负责整体的架构方案。

你会发现其中个人的成长可能都会从Tomcat或Jetty开始,逐步积累经验,提高设计能力,最终成长为一名架构师。而且作为初学者,想要找准方向突破深度,Tomcat和Jetty也是非常好的选择。

当然,如果你现在是一名运维或者中间件开发乃至架构师,同样的,每天的工作多少都离不开与Tomcat或Jetty打交道,它总是会在不同场合以不同问题的形式出现在我们面前。

所以不管你是初学、已经在使用或是认为自己已经非常熟悉它们,都有必要重新深入进去,掌握其中的设计精髓,并为自己所用。

在这个专栏里,李号双将会详细剖析Tomcat和Jetty的架构设计和原理,梳理实践中经常遇到的问题,深入分析并提供解决方法;还会带你学习大神们如何“用”Java技术,帮你提升设计思维,解决你Java Web后端开发的“痛点”。

李号双,eBay技术主管,负责eBay付款系统的可靠性、稳定性和高可用,系统采用定制版的Tomcat运行大规模微服务实例。李号双非常熟悉Tomcat和Jetty的源码,具有丰富的线上问题定位和调优经验,曾在惠普从事企业级分布式系统的开发与架构设计,拥有丰富的容器化上云经验。

专栏分为6个模块,共41讲。

模块一,帮你重新理解HTTP协议和Servlet规范,为深入学习Servlet容器Tomcat和Jetty打下基础。

模块二,带你深刻掌握Tomcat和Jetty的整体架构,提炼它们的组件化设计要点,实战优化Tomcat启动速度。

模块三,深入讲解连接器的详细设计和工作原理,和你一起了解Tomcat如何实现非阻塞和异步I/O通信、如何扩展Java原生线程池、如何支持WebSocket;详解Jetty的线程策略EatWhatYouKill;总结Tomcat和Jetty的对象池技术以及高并发高性能之道。

模块四,详细分析容器的设计和工作原理,讨论Tomcat的热加载热部署、类加载机制、Web应用的隔离以及如何实现Servlet规范、如何实现异步Servlet;探讨Jetty如何实现带有上下文信息的责任链;总结Tomcat和Jetty运用的设计模式。

模块五,介绍通用组件的设计和工作原理,包括日志组件、Session管理组件和集群通信组件。

模块六,从实战出发,介绍JVM调优的原理、Tomcat性能监控以及如何对Tomcat进行调优,包括线程池和I/O的并发调优、内存调优和网络调优等。

限时福利

1.订阅后,分享专属海报,每邀请一位好友订阅,可以得到24元现金奖励

2.戳此添加社群管理员,进入技术交流&福利群