为何写《Tomcat内核设计剖析》

三四年前更多地仍是作web业务开发,基本不关心web层如下的东西,可是每次出故障时面对现象都不能从脑子里造成由底层到应用层的完整的逻辑,每每只能分析到Web应用就没法继续往下,Web容器彻底就是一个黑盒,对于问题更多的是靠猜。举个简单的例子,应用忽然就不服务了,此时若是对Web容器模型熟悉就能够直接jstack打印虚拟机的栈进行分析。我我的接受不了这种用非完整性逻辑去分析事物的感受,因而想着仍是把Tomcat也一块儿搞定吧,处理故障时每每就能看到更本质的东西,并且还能对Tomcat进行定制。nginx

为何选择Tomcat?对于多数Java开发者,不少Web容器都是基于Tomcat的,同时Tomcat也最多人在使用,因此选定了Tomcat。程序员

另外,作互联网应用的人都必需要深刻掌握一个Web服务器,好比tomcat,好比nginx,好比apache。web

在我看来Web服务器将网络IO及线程并发处理还有协议等须要很经验很丰富的高级程序员才能处理的好的事都屏蔽掉了,抽象出了另一个高纬度的概念,大大下降了Web应用的开发难度,也提升了效率,但同时也让上层开发的人不多有机会了解下层的东西,这对于处理故障和性能分析是十分不利的。因此说Web服务器这个抽象有大利也有小弊。apache

怎么深刻?开始看《how tomcat works》,这本书很经典,它从0开始阐述了Tomcat如何工做,但这本书是基于Tomcat很老的版本,看完后我能了解大概的Tomcat机制,但我总以为正在的工业级Web容器还应该有不少细节是须要处理的,而正是这些细节才成就了Tomcat成为一个工业级的Web容器,而这本书并无涉及到Tomcat里面的细节处理及优秀的设计思想。tomcat

当我深刻Tomcat源码后,发现从总体上理解一个中间件的思想和局部了解是彻底不一样的,总体上的把握更能体会设计者的思想及能更好地品味优秀的设计思想,以及你有些设计你也会以为设计的不足。源码的精读和泛读是彻底不一样的概念,好比后来工做上用到了jmeter,我就看了jmeter的源码,用到lucene就看了lucene的源码,用了hazelcast就看hazelcast源码,同时也会看jdk怎么实现就,用到cobar就看它的实现,用netty就会看netty实现,相似的还有zookeeper和hbase等。但没有一个是可以达到本身理想的精读状态,因此索性深刻一个,那就是Tomcat。服务器

另外,我发现市面上缺乏分析Tomcat设计思想方向的书籍。网络

综合上面几点,想着那就本身写一本吧。并发

对于快餐式的IT世界,花时间去深刻研究源码设计值不值得?仁者见仁智者见智,从工做的角度上看,研究的东西都应该更好服务于本身工做,或者是服务于本身将来工做的方向,提高工做效率。而有时,慢就是快,如今花的时间都让后面能走得更快。源码分析

《Tomcat内核设计剖析》前面也说过它的特色,它主要是侧重于工业级Web容器的设计细节的剖析,而并不是是源码分析,因此里面基本不多有Tomcat的源码,正如书中前言说的“拒绝没养分的直接贴代码分析,而是升华到对Tomcat设计思想的剖析”。我我的以为看懂源码可能很简单,但要经过源码领会其中不少细节的设计思想却不容易,因此这不是一本分析源码的没养分的书。若是您预期是想看源码分析,那么这本书不适合您,请您不要购买。性能

最近看到有两位读者朋友给的中评,评论以下,其中我看到都有提到代码太泛,关于这点,“若是您预期是想看源码分析,那么这本书不适合您,请您不要购买。”。另外感谢第一位读者给的确定及建议。本书不少与博客如出一辙是由于博客其实就是编写本书时的一些章节,考虑到先发博客有错误或理解不到位的地方读者会提出来,这也能更好地保证书籍的质量,因此并非敷衍。

这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述
相关文章
相关标签/搜索