三四年前更多地还是做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 12.10 用wubi安装到硬盘中

    wubi安装的优势: ubuntu可以像安装软件一样方便的安装.删除,不影响物理机的原有系统 这种方式安装的ubuntu不用担心功能会有所缺失,ubuntu所有的功能都在 和安装了双系统一样,没有什么 ...

  2. node实现rar格式压缩

    背景 由于公司的CMS系统里,只接受rar格式压缩的文件,所以没法直接使用nodejs里提供的zip压缩组件.只能从winRar软件入手了,但网上没有多少这方面相关的东西,所以下面也是自己尝试着在做. ...

  3. OGNL与ValueStack(VS)-N语法top语法(转)

    N语法[0]:<s:property value="[0]"/><br> N语法[1]:<s:property value="[1]&quo ...

  4. minSdk(API 21) > deviceSdk(API 17)解决

    运行一个开源的项目出现“minSdk(API 21) > deviceSdk(API 17)”的提示,因为我用的是手机是sdk(API17)的,而项目要求是最低版本是minSdk(API 21) ...

  5. LeetCode——Integer Replacement

    Question Given a positive integer n and you can do operations as follow: If n is even, replace n wit ...

  6. 浅谈const限定符

    什么是const限定符? Const限定符是我们通常所说的常量限定符,被const修饰的对象具有常量性质,只能读,不能写. 为什么使用const限定符? 用const变量取代“魔数”,代码更容易理解和 ...

  7. springMVC数据回显

    1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  8. jQuery基本筛选选择器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. Dubbo 和 Spring Cloud微服务架构 比较及相关差异

    你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构. 微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务, ...

  10. Vue 及框架响应式系统原理

    个人bolg地址 全局概览 Vue运行内部运行机制 总览图: 初始化及挂载 在 new Vue()之后. Vue 会调用 _init 函数进行初始化,也就是这里的 init 过程,它会初始化生命周期. ...