爲何寫《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設計思想的剖析」。我我的以爲看懂源碼可能很簡單,但要經過源碼領會其中不少細節的設計思想卻不容易,因此這不是一本分析源碼的沒養分的書。若是您預期是想看源碼分析,那麼這本書不適合您,請您不要購買。性能

最近看到有兩位讀者朋友給的中評,評論以下,其中我看到都有提到代碼太泛,關於這點,「若是您預期是想看源碼分析,那麼這本書不適合您,請您不要購買。」。另外感謝第一位讀者給的確定及建議。本書不少與博客如出一轍是由於博客其實就是編寫本書時的一些章節,考慮到先發博客有錯誤或理解不到位的地方讀者會提出來,這也能更好地保證書籍的質量,因此並非敷衍。

這裏寫圖片描述
這裏寫圖片描述

這裏寫圖片描述
這裏寫圖片描述
相關文章
相關標籤/搜索