性能调优 18. Tomcat整体架构及其设计精髓分析

1. Tomcat介绍

1.1. 介绍

‌‌‌  这边使用的是Tomcat9来做说明,本章节先对Tomcat架构和设计有个整体认识。后续章节会对Tomcat性能调优做说明。

‌‌‌  官方文档介绍


‌‌‌  https://tomcat.apache.org/tomcat-9.0-doc/index.html

1.2. Tomcat概念

‌‌‌  Tomcat是Apache Software Foundation(Apache软件基金会)开发的一款开源的Java Servlet容器。它是一种Web服务器,用于在服务器端运行Java Servlet和JavaServer Pages (JSP)技术。它可以为Java Web应用程序提供运行环境,并通过HTTP协议处理客户端请求。Tomcat也支持多种Web应用程序开发技术,例如JavaServer Faces (JSF)、Java Persistence API (JPA)等。总的来说,Tomcat是一款高效、稳定和易于使用的Web服务器

‌‌‌  Tomcat核心: Http服务器+Servlet容器

在这里插入图片描述

1.3. Tomcat目录结构

‌‌‌  Tomcat的解压之后的目录可以看到如下的目录结构。
在这里插入图片描述

‌‌‌  bin
		bin目录主要是用来存放tomcat的脚本,如startup.sh , shutdown.sh
		
	conf
		catalina.policy: Tomcat安全策略文件,控制JVM相关权限,具体可以参考java. security.Permission
		
		catalina.properties : Tomcat Catalina行为控制配置文件,比如Common ClassLoader
		
		logging.properties : Tomcat日志配置文件, JDK Logging	
		
		server.xml : Tomcat Server配置文件
		
		GlobalNamingResources :全局JNDI资源
		
		context.xml :全局Context配置文件
		
		tomcat-users.xml : Tomcat角色配置文件
		
		web.xml : Servlet标准的web.xml部署文件, Tomcat默认实现部分配置入内:
			org.apache.catalina.servlets.DefaultServlet
			org.apache.jasper.servlet.JspServlet
			
	lib
		公共类库
		
	logs
		tomcat在运行过程中产生的日志文件

	webapps
		用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序

	work
		用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件
  ‌‌

1.4. web应用部署的三种方式

‌‌‌‌‌‌  Tomcat的web应用支持war包部署,文件夹部署,描述符部署。

1.4.1. war包部署和文件夹部署

‌‌‌  默认情况下,项目war包和文件夹拷贝到webapps目录下就行。war包会自动解压成war包名称的文件夹。
‌‌‌  
‌‌‌  该目录跟Host标签的appBase有关。
‌‌‌


‌‌‌  //指定appBase 
‌‌‌  <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

‌‌‌  autoDeploy:表示支持热部署。

1.4.2. 描述符部署

‌‌‌  在server.xml 的Context标签下配置Context。比如下面这样,比较常用的描述符部署。


‌‌‌  <Context docBase="D:\mvc" path="/mvc" reloadable="true" />

‌‌‌  path:指定访问该Web应用的URL入口(context-path)。

‌‌‌  docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径。

‌‌‌  reloadable:如果这个属性设为true,支持热加载,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。

1.4.3. 比较特殊的部署

‌‌‌  在$CATALINA_BASE/conf/[enginename]/[hostname]/ 目录下(默认conf/Catalina/localhost)创建xml文件,文件名就是contextPath。比如创建mvc.xml,path就是/mvc。

‌‌‌  这种方式不需要重启应用,就可以部署应用


‌‌‌  <Context docBase="D:\mvc" reloadable="true" />

‌‌‌  注意

‌‌‌  想要根路径访问,文件名就设置为ROOT.xml。

2. Tomcat整体架构分析

‌‌‌  Tomcat 要实现 2 个核心功能:

‌‌‌  处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化

‌‌‌  加载和管理 Servlet,以及具体处理 Request 请求。

‌‌‌  因此 Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理。

2.1. Tomcat架构图

‌‌‌  Tomcat的架构分为以下几个部分:

‌‌‌  1. Connector:Tomcat的连接器,用于接收请求并将其发送给容器。

‌‌‌  2. Container:Tomcat的容器,负责管理Servlet、JSP和静态资源的生命周期。

‌‌‌  3. Engine:Tomcat的引擎,管理容器的生命周期和分配请求。

‌‌‌  4. Host:Tomcat的主机,可以管理多个Web应用程序。

‌‌‌  5. Context:Tomcat的上下文,用于管理单个Web应用程序的配置信息。

‌‌‌  6. Servlet:Tomcat的Servlet,负责处理请求并生成响应。

‌‌‌  7. JSP:Tomcat的JSP,用于动态生成Web内容。

‌‌‌  总的来说,Tomcat的架构是一个分层的架构,每一层都有其自己的功能和职责。该架构可以提高Tomcat的性能和可维护性,并使得Tomcat可以支持大量的Java Web应用程序。

‌‌‌  其中四大容器分别是Engine,Host,Context,Wrapper。其标准实现分别有StandardEngine,StandardHost,StandardContext,StandardWrapper,都实现了org.apache.catalina.Container接口。

在这里插入图片描述

2.2. Tomcat核心组件详解

2.2.1. Server 组件

‌‌‌  指的就是整个 Tomcat 服务器,包含多组服务(Service),负责管理和启动各个Service,同时监听8005端口发过来的 shutdown 命令,用于关闭整个容器

2.2.2. Service组件

‌‌‌  每个 Service 组件都包含了若干用于接收客户端消息的 Connector 组件和处理请求的 Engine 组件。 Service 组件还包含了若干 Executor 组件,每个 Executor 都是一个线程池,它可以为 Service内所有组件提供线程池执行任务。 Tomcat 内可能有多个 Service,这样的设计也是出于灵活性的考虑。通过在Tomcat 中配置多个 Service,可以实现通过不同的端口号来访问同一台机器上部署的不同应用

在这里插入图片描述

2.2.3. 连接器Connector组件

‌‌‌  Tomcat 与外部世界的连接器,监听固定端口接收外部请求,传递给 Container,并将Container处理的结果返回给外部。连接器对 Servlet 容器屏蔽了不同的应用层协议及 I/O 模型,无论是 HTTP还是 AJP,在容器中获取到的都是一个标准的 ServletRequest 对象。

2.2.4. 容器Container组件

‌‌‌  容器,顾名思义就是用来装载东西的器具,在 Tomcat 里,容器就是用来装载 Servlet 的。

‌‌‌  Tomcat 通过一种分层的架构,使得 Servlet 容器具有很好的灵活性。Tomcat 设计了 4 种容器,分别是 Engine、Host、Context 和 Wrapper。这 4 种容器不是平行关系,而是父子关系

‌‌‌  Engine:引擎,Servlet 的顶层容器,用来管理多个虚拟站点,一个 Service 最多只能有一个 Engine。

‌‌‌  Host:虚拟主机,负责 web 应用的部署和 Context 的创建。可以给 Tomcat配置多个虚拟主机地址,而一个虚拟主机下可以部署多个 Web 应用程序。

‌‌‌  Context:Web 应用上下文,包含多个 Wrapper,负责 web 配置的解析、管理所有的 Web 资源。一个Context对应一个 Web 应用程序

‌‌‌  Wrapper:表示一个 Servlet,最底层的容器,是对 Servlet 的封装,负责 Servlet 实例的创建、执行和销毁

在这里插入图片描述

2.3. 结合Server.xml理解Tomcat架构

‌‌‌  以通过 Tomcat 的 server.xml 配置文件来加深对 Tomcat 架构的理解。Tomcat 采用了组件化的设计,它的构成组件都是可配置的,其中最外层的是 Server,其他组件按照一定的格式要求配置在这个顶层容器中。

		<Server> //顶层组件,可以包括多个Service
			<Service> //顶层组件,可包含一个Engine,多个连接器
				<Connector/>//连接器组件,代表通信接口
					<Engine>//容器组件,一个Engine组件处理Service中的所有请求,包含多个Host
						<Host> //容器组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值