三四年前更多地还是做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. ubuntu 16.04 gtx1060 显卡安装【转】

    本文转载自:https://blog.csdn.net/u010925447/article/details/79754044 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...

  2. # fabirc 配置多组服务器 密码与密钥一起使用 key_filename的设置

    环境说明 myv myv2 是配置在/etc/hosts 的两台 虚拟机 虚拟机ip. 参考英文文档 官方文档的例子不是给的很详细.. http://docs.fabfile.org/en/1.13/ ...

  3. 解决IE6已终止操作问题

    令人崩溃的IE6问题再次出现,打开某个页面时,弹出提示框“Internet Explorer无法打开Internet 站点...已终止操作”.    查了一下资料,感觉“因为js(一个比较复杂的js) ...

  4. linux(一)export的生命周期

    本文从shell执行的角度分析export变量的生命周期 # 只对当前shell环境起作用,比如通过不同的远程ssh就是不同的shell环境 export k=v 当运行一个.sh文件或者是shell ...

  5. c++之初级的消息队列及线程池模型

    1.最近项目不是很忙,结合之前看的一些开源代码(skynet及其他github代码)及项目代码,抽空写了一个简单的任务队列当做练习. 2.介绍: 1)全局队列中锁的使用:多线程下,全局队列需要加锁,本 ...

  6. 一切从Trade开始(转)

    taobao.trades.sold.get 取得交易列表 从店铺取得时间 taobao.shop.get (nick,field)shop.created 循环读取从开店时间到当前时间的所有交易 t ...

  7. 【Python】简单实现爬取小说《天龙八部》,并在页面本地访问

    背景 很多人说学习爬虫是提升自己的一个非常好的方法,所以有了第一次使用爬虫,水平有限,依葫芦画瓢,主要作为学习的记录. 思路 使用python的requests模块获取页面信息 通过re模块(正则表达 ...

  8. C++实现矩阵压缩

    C++实现矩阵压缩 转置运算时一种最简单的矩阵运算.对于一个m*n的矩阵M,他的转置矩阵T是一个n*m的矩阵,且T(i,j) = M(j,i). 一个稀疏矩阵的转置矩阵仍然是稀疏矩阵. 矩阵转置 方案 ...

  9. for each/in/of的解释and example

    for-of 循环:代码示例for (var value of myArray) {console.log(value);}循环的对象需为一个数组 无法记录索引 可以相应break.continue. ...

  10. Hibernate所用15个jar包

    Hbernate3.jar-------------------核心包antlr.jar----------------------------语言转换工具,hibernate用他将hql语句转换为s ...