为什么写《Tomcat内核设计剖析》
三四年前更多地还是做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内核设计剖析》的更多相关文章
- 《Tomcat内核设计剖析》京东评论过百
到京东看了下<Tomcat内核设计剖析>评论都一百多了,上个月也第二次印刷了,这里看下好评.中评和差评. 好评: 中评 对于中评,请看 为什么<写Tomcat内核设计剖析>,就 ...
- 《Tomcat内核设计剖析》勘误表
<Tomcat内核设计剖析>勘误表 书中第95页图request部分印成了reqiest. 书中第311页两个tomcat3,其中一个应为tomcat4. 书中第5页URL应为URI. 书 ...
- SQLServer内核架构剖析 (转载)
SQL Server内核架构剖析 (转载) 这篇文章在我电脑里好长时间了,今天不小心给翻出来了,觉得写得很不错,因此贴出来共享. 不得不承认的是,一个优秀的软件是一步一步脚踏实地积累起来的,众多优秀的 ...
- 【读书笔记】《Linux内核设计与实现》进程管理与进程调度
大学跟老师做嵌入式项目,写过I2C的设备驱动,但对Linux内核的了解也仅限于此.Android系统许多导致root的漏洞都是内核中的,研究起来很有趣,但看相关的分析文章总感觉隔着一层窗户纸,不能完全 ...
- 《linux内核设计与实现》实践之模块及深入
<linux内核设计与实现>实践之模块及深入 写在前面的话. 基础模块部分我已经做完了,设计到的知识点无非就是,编写模块代码,编写Makefile文件,加载模块和卸载模块部分.由于大家都 ...
- 《Linux内核设计与实现》CHAPTER17阅读梳理
<Linux内核设计与实现>CHAPTER17阅读梳理 [学习时间:3.5hours] [学习内容:设备类型,模块,内核对象,sysfs] 个人思考部分见[]标出的部分 一.课堂讲解整理& ...
- 《Linux内核设计与实现》课本第三章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有 ...
- 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳
<Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...
- 《Linux内核设计与实现》读书笔记 - 目录 (完结)
读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: < ...
随机推荐
- Scrapyd 项目爬虫部署
scrapyd是一个用于部署和运行scrapy爬虫的程序,它允许你通过JSON API来部署爬虫项目和控制爬虫运行 scrapyd是一个守护进程,监听爬虫的运行和请求,然后启动进程来执行它们 安装扩展 ...
- ubifs文件系统挂载时提示ubi0: MTD device 5 is write-protected, attach in read-only mode
答:笔者遇到的这种情况是由于分区表未与nor flash的物理擦除块边界对齐而导致的,因此调整分区表即可解决此问题
- linux按照进程名杀掉进程
1.按照进程名杀掉进程 ps -ef | grep sftp | grep mysql |grep -v grep | awk '{print("kill -9 ", ...
- 秒懂算法1——冒泡排序,及一种小改进(C#实现)
算法思路: 重复走访每两个相邻元素,比较大小交换位置,直至排序完成. 有兴趣电话可以看一下这个[冒泡排序踢踏舞]的视频,很形象的演示了排序过程,额呵呵~~ 性质: 冒泡排序是一种原地排序(只有常数个元 ...
- 使用maven命令进行打包,部署项目到远程仓库
如果要部署项目到远程仓库, 方法一:配置pom.xml: <distributionManagement> <repository> <id>releases< ...
- 安装GoMap
参考:https://github.com/ehrudxo/GoMap 1.依赖go包安装 gorm包安装 直接在github首页搜索gorm,找到对应的gorm包: 然后打开本机cmd命令行窗口,切 ...
- ColKang v1.0
/* *2015.3.31 14:00更新 *上午刚写完这篇博客,下午就读到迭代器了.C++ primer中讲迭代器那节说道了->符号的意思,即(*ptr). 及将指针解引用之后再调用成员函数 ...
- Java虚拟机组成详解
导读:详细而深入的总结,是对知识“豁然开朗”之后的“刻骨铭心”,想忘记都难. Java虚拟机(Java Virtual Machine)下文简称jvm,上一篇我们对jvm有了大体的认识,进入本文之后我 ...
- SQL使用CASE 语句
CASE 语句可以在SELECT 子句和ORDER BY 子句中使用 CASE语句分为两种Case Simple Expression and Case Search Expression Case ...
- ArcMap加载在线地图
SimpleGIS 小小的SimpleGIS除了提供6大地图让人喜爱之外,更有其他的能耐同样让你爱不释手. 功能1:作为出图底图地图提供商中Bing.天地图两家提供的地图是无偏移的地图,所以可直接应用 ...