Tomcat系统架构简介

# Tomcat系统架构图

tomcat-architecture

从架构图可以看出,顶层组件Server代表一个Tomcat Server实例,一个Server中有一个或者多个Service,每个Service有多个Connector,以及一个Engine

ConnectorEngine是Tomcat最核心的两个组件。

Connector负责处理网络通信,以及应用层协议(HTTP,AJP)的解析,生成标准的ServletRequestServletResponse对象,然后传递给Engine处理。每个Connector监听不同的网络端口。

Engine代表整个Servlet引擎,可以包含多个Host,表示它可以管理多个虚拟站点。Host代表的是一个虚拟主机,而一个虚拟主机下可以部署多个Web应用程序,Context表示一个Web应用程序。Wrapper表示一个Servlet,一个Web应用程序中可能会有多个Servlet

从Tomcat的配置文件server.xml也能看出Tomcat的系统架构设计。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<Server>
  <Service>
    <Connector />
    <Connector />
    <Engine>
      <Host>
      </Host>
    </Engine>
  </Service>
</Server>

# Connector

我们再仔细看一下Connector的内部实现。

connector

  • Endpoint 负责网络通信
  • Processor 实现应用层协议(HTTP,AJP)解析
  • Adapter 将Tomcat的Request/Response转换为标准的ServletRequest/ServletResponse

Tomcat的网络通信层支持多种 I/O 模型:

  • NIO:使用Java NIO实现
  • NIO.2:异步I/O,使用JDK NIO.2实现
  • APR:使用了Apache Portable Runtime (APR)实现

endpoint

Tomcat实现支持了多种应用层协议:

  • HTTP/1.1
  • HTTP/2
  • AJP:二进制协议,Web Server和Tomcat之间的通信协议

processor

Processor解析网络字节流生成Tomcat的Request对象后,会调用Adapter.service(request, response)方法。AdapterServlet引擎的入口,Adapter负责将Tomcat的Request对象转换为标准的ServletRequest,然后再调用Servlet引擎的service方法。

adapter

# ProtocolHandler

Tomcat允许一个Engine对接多个Connector,每个Connector可以使用不同的 I/O 模型,实现不同的应用层协议解析。Connector屏蔽了 I/O 模型和协议的区别,传递给Engine的是标准的ServletRequest/ServletResponse对象。

由于 I/O 模型和应用层协议解析可以自由组合,Tomcat使用ProtocolHandler实现这种组合。各种组合都有相应的具体实现类。比如:Http11NioProtocol 和 AjpNio2Protocol。

tomcat-ProtocolHandler

关于NioEndpointNio2Endpoint组件的内部实现,会在后续文章进行分析。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus