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

为什么选择Tomcat?对于多数Java开发者,很多Web容器都是基于Tomcat的,同时Tomcat也最多人在使用,所以选定了Tomcat。

另外,互联网研发人员都必须要深入掌握一个Web服务器,比如tomcat,比如nginx,比如apache。

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

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

当我深入Tomcat源码后,发现从整体上理解一个中间件的思想和局部了解是完全不同的,整体上的把握更能体会设计者的思想及能更好地品味优秀的设计思想,以及你有些设计你也会觉得设计的不足。源码的精读和泛读是完全不同的概念,比如后来工作上用到了jmeter,我就看了jmeter的源码,用到lucene就看了lucene的源码,用了hazelcast就看hazelcast源码,同时也会看jdk怎么实现就,用到cobar就看它的实现,用netty就会看netty实现,类似的还有zookeeper和hbase等。但没有一个是能够达到自己理想的精读状态,所以索性深入一个,那就是Tomcat。

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

综合上面几点,想着那就自己写一本吧。

对于快餐式的IT世界,花时间去深入研究源码设计值不值得?仁者见仁智者见智,从工作的角度上看,研究的东西都应该更好服务于自己工作,或者是服务于自己未来工作的方向,提升工作效率。而有时,慢就是快,现在花的时间都让后面能走得更快。

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

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

为什么写《Tomcat内核设计剖析》的更多相关文章

  1. 《Tomcat内核设计剖析》京东评论过百

    到京东看了下<Tomcat内核设计剖析>评论都一百多了,上个月也第二次印刷了,这里看下好评.中评和差评. 好评: 中评 对于中评,请看 为什么<写Tomcat内核设计剖析>,就 ...

  2. 《Tomcat内核设计剖析》勘误表

    <Tomcat内核设计剖析>勘误表 书中第95页图request部分印成了reqiest. 书中第311页两个tomcat3,其中一个应为tomcat4. 书中第5页URL应为URI. 书 ...

  3. SQLServer内核架构剖析 (转载)

    SQL Server内核架构剖析 (转载) 这篇文章在我电脑里好长时间了,今天不小心给翻出来了,觉得写得很不错,因此贴出来共享. 不得不承认的是,一个优秀的软件是一步一步脚踏实地积累起来的,众多优秀的 ...

  4. 【读书笔记】《Linux内核设计与实现》进程管理与进程调度

    大学跟老师做嵌入式项目,写过I2C的设备驱动,但对Linux内核的了解也仅限于此.Android系统许多导致root的漏洞都是内核中的,研究起来很有趣,但看相关的分析文章总感觉隔着一层窗户纸,不能完全 ...

  5. 《linux内核设计与实现》实践之模块及深入

     <linux内核设计与实现>实践之模块及深入 写在前面的话. 基础模块部分我已经做完了,设计到的知识点无非就是,编写模块代码,编写Makefile文件,加载模块和卸载模块部分.由于大家都 ...

  6. 《Linux内核设计与实现》CHAPTER17阅读梳理

    <Linux内核设计与实现>CHAPTER17阅读梳理 [学习时间:3.5hours] [学习内容:设备类型,模块,内核对象,sysfs] 个人思考部分见[]标出的部分 一.课堂讲解整理& ...

  7. 《Linux内核设计与实现》课本第三章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有 ...

  8. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

  9. 《Linux内核设计与实现》读书笔记 - 目录 (完结)

    读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: < ...

随机推荐

  1. 使用ThinkPHP5连接数据库

    1.在application的database.php中设置数据库信息. return [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' =&g ...

  2. localAddress

    $(function(){ <% out.println("/** ip:"+request.getLocalAddr()+"("+request.get ...

  3. MR案例:定制InputFormat

    数据输入格式 InputFormat类用于描述MR作业的输入规范,主要功能:输入规范检查(比如输入文件目录的检查).对数据文件进行输入切分和从输入分块中将数据记录逐一读取出来.并转化为Map的输入键值 ...

  4. openwrt生成的镜像放在哪里

    答:1.打包好之后是放在build_dir/target-$(cross-compile-toolchan-name)/linux-$(chip-series-name)_$(chip-arch)/t ...

  5. 从零开始玩转JMX(三)——Model MBean

    Model MBean 相对于Standard MBean,Model MBean更加灵活.如果我们不能修改已有的Java类,那么使用Model MBean是不错的选择. Model MBean也是一 ...

  6. Linux段错误及GDB Coredump调试方法

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation Fa ...

  7. python学习笔记glob模块

    python有许多的类库,现将学习记录下来,以供以后回顾复习: 1.glob模块 用于文件名操作,匹配指定目录下的文件,返回的是目录加文件名,常用的有两个函数: glob(pattern),返回匹配的 ...

  8. 解决 对路径bin\roslyn..的访问被拒绝

    使用visual studio开发,一重新编译就会报错: 对路径“bin\roslyn\System.Reflection.Metadata.dll”的访问被拒绝 一开始的解决办法就是把bin下的文件 ...

  9. P3600 随机数生成器

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  10. linux文件的一些特殊权限

    一些特殊权限 虽然我们通常看到一个八进制的权限掩码用三位数字来表示,但是从技术层面 上来讲,用四位数字来表示它更确切些. 为什么呢?因为,除了读取,写入,和执 行权限之外,还有其它的,较少用到的权限设 ...