导读
为什么要学习Tomcat的设计思路,对我们这些 crud 工程师有用吗?现代背景下,我们不仅可以学到Tomcat的架构,学会从宏观上怎么去设计一个复杂系统,怎么设计顶层模块,以及模块之间关系。
Tomcat总体架构
Tomcat主要实现了2个核心功能:
- 处理Socket连接,负责网络字节流与Request和Response对象的转化
- 加载和管理Servlet,以及具体处理Request请求
因此Tomcat设计了两个核心组件:
- 连接器(Connector):负责对外交流
- 容器(Container):负责内部处理
Tomcat支持哪些I/O模型呢?
- NIO:非阻塞I/O,采用Java NIO类库实现
- NIO.2:异步I/O,采用JDK 7最新的NIO.2类库实现
- APR:采用Apache可移植运行库实现,是C/C++编写的本地库
Tomcat支持哪些应用层协议呢?
- HTTP/1.1:大部分Web应用采用的访问协议
- AJP:用于和Web服务器集成(如Apache)
- HTTP/2:HTTP 2.0大幅度地提升了Web性能
Service
Tomcat为支持多种I/O模型和应用层协议,一个容器可能对接多个连接器。
但单独的连接器或容器都无法对外提供服务,需组装起来才能正常工作,组装后的整体称为Service组件。
Service只是在连接器和容器外面多包了一层,把它们组装在一起。
Tomcat内可能有多个Service,通过在Tomcat中配置多个Service,可实现通过不同端口号访问同一台机器上部署的不同应用。
最顶层是Server(即一个Tomcat实例)。