Tomcat是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,Tomcat是为JAVA开发服务的(这边插一嘴,JAVA是世界上最好的语言),基于JDK环境运行(如果你使用ps看是看不到Tomcat的进程,只有JDK的进程),从开发视角,Tomcat是作为Servlet容器,无论是他的两大核心Connector和Container,还是说它的三大组件WEB/JSP/Servlet全都是服务于Servlet。
上面我们说到了三大组件,这三大组件分别是WEB、JSP、Servlet,我们了解下三个组件的作用
| 名称 | 作用 |
|---|---|
| WEB | 完成Web服务器的功能 |
| JSP | 用于将 JSP 动态网页翻译成 Servlet 代码 |
| Servlet | Catalina是Servlet的容器 |
WEB: 1.接收或响应请求
2.展示动态页面
3.作为出入口
JSP:页面发送请求并且携带这jsp的jar包,JSP读到jar包会识别jsp格式,读取<%><%>里面的java代码,翻译成Servlet请求交给Servlet 响应
Servlet: Servlet读取到JSP丢给的请求读取项目中的servlet层,在servlet层调用services层再通过services层调用Dao层(负责数据库的查询)

前面都说了,大体上来讲Tomcat就是Servlet的容器,而Catalina就是Tomcat的核心组件
先上图:
      Nginx作为静态页面的容器,遇到动态请求就会通过反向代理到Tomcat处理,Tomcat调用Java类的代码从数据库中获取数据,当然中间还有一步就是从缓存中获取数据,缓存中如果有直接从缓存中拿,如果缓存中没有先从数据库中读取,在将常用的数据放在缓存中方便复用,当然我们从图中可以看见多台Tomcat主机其实就是最基础的集群的概念
上面我们能看到Tomcat并非是只能和Nginx相互绑定,我们其实可用使用多台Tomcat和Nginx绑定,Nginx反向代理Tomcat集群可用对Tomcat集群完成负载均衡和动静分离
1.负载均衡
Nginx通过反向代理到多台Tomcat主机,可用对请求进行选择转发到压力较小的主机上(别逮着一只羊使劲的薅),其中Nginx负载均衡大体上分为五种模式
(1).rr 每个请求都将注意分发到Tomcat服务器上,当其中有主机无法连接上,超过了最大失败次数时,就会出现失效时间(fail_timeout 默认为10秒),在这段时间这台服务器的权重会失效变为0,十秒钟之后会重新恢复权重,或者还有一种比较严重的情况,所有主机全无了,集群直接开摆将全部恢复权重(当然能不能用另说)
(2).least_conn 优先将客户端请求调度到当前连接最少的服务器
(3).ip_hash 某个ip 的请求定向到同一台后端web机器中,这样一来这个ip 下的客户端和某个后端 web机器就能建立起稳固的session,这样的机制能够让某一客户机在相当长的一段时间内只访问固定的后端的某台真实的web服务器,这样会话就会得以保持,在网站页面进行login的时候就不会在后面的web服务器之间跳来跳去了,也不会出现登录一次的网站又提醒重新登录的情况。(一般不用,主要是这玩意他会导致访问不均匀,至于对hash机制感兴趣的我后面可以附个hash的链接https://blog.csdn.net/Beyond_2016/article/details/81286360)
(4).fair 按后端服务器响应时间分配请求,响应时间短的优先分配(能者多劳,这边有感而发,企业里要学会摸鱼,就像这个模式一样,你越积极干的活越多)
(5).url_hash 和上面ip_hash差不多,这玩意是按url的hash结果分配,每个url定向到一个后端服务器,和上面一样也会造成分配不均的问题
2.动静分离
很简单的一个道理,Nginx的优势是啥,轻量化没用动态页面解释器,它处理静态页面比较快,而Tomcat它的传输速度比较慢但是它能跑JAVA的servlet阿,这玩意又不需要下载大量的资源,只要负责处理后端任务返回就行了,静态页面在Nginx,动态交互请求在Tomcat,这就叫动静分离
众所周知,是个服务刚装下来可用性都不太行,需要我们对其调教下由于Tomcat的运行依赖于JVM,从虚拟机的角度把Tomcat的优化分为外部环境调优 JVM 和 Tomcat 自身调优两部分
1.Tomcat 配置文件参数优化
maxThreadsTomcat可创建最大线程数,默认为200,我们可用适当调高点
minSpareThreads最小空闲线程数,Tomcat 启动时的初始化线程数,表示即使没有人使用也开这么多空线程等待,默认值为10,我们可用调高点让他多准备点待用
maxSpareThreads最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。默认值是-1(无限制),一般不需要指定。
URIEncoding指定 Tomcat 容器的 URL 编码格式,Tomcat 语言编码格式这块不如其它 Web 服务器软件配置方便,需要分别指定。
connnectionTimeout网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以。
enableLookups是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。
disableUploadTimeout 上传时是否使用超时机制。应设置为 true。
connectionUploadTimeout上传超时时间,毕竟文件上传可能需要消耗更多的时间,该参数需要根据自己的业务需要自行调整,以使 Servlet 有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。
acceptCount指定当所有可以使用的处理请求的线程都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个。
compression是否对响应的数据进行 GZIP 压缩,off 表示禁止压缩、on 表示允许压缩(文本将被压缩)、force 表示所有情况下都进行压缩,默认值为 off。压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,因而节省带宽。
compressionMinSize表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048。
compressableMimeType压缩类型,指定对哪些类型的文件进行数据压缩。
noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩。
2.JVM优化
https://blog.csdn.net/weixin_51867896/article/details/124540997
1.安装Tomcat,首先我们需要安装JDK环境然后再安装Tomcat


2.创建Tomcat目录,并且将tomcat解压好的文件位移到Tomcat目录
mv apache-tomcat-9.0.16 /usr/local/tomcat
3.配置Tomcat环境变量并刷新环境
vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_BASE=/usr/local/tomcat
export TOMCAT_HOME=/usr/local/tomcat
##这个是刷新环境
source /etc/profile.d/tomcat.sh
4.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
##添加启动环境变量
vim /usr/local/tomcat/bin/startup.sh
export CATALINA_BASE=$CATALINA_BASE
export CATALINA_HOME=$CATALINA_HOME
export TOMCAT_HOME=$TOMCAT_HOME
##添加关闭环境变量
vim /usr/local/tomcat/bin/shutdown.sh
export CATALINA_BASE=$CATALINA_BASE
export CATALINA_HOME=$CATALINA_HOME
export TOMCAT_HOME=$TOMCAT_HOME
5.启动副本并查看是否启动
1.什么是虚拟主机
虚拟主机就是单台Tomcat上配置两个项目,两个之间相互不影响,这些就是虚拟主机
2.虚拟主机的配置:
1.首先配置Service.xml文件 第一个服务配完,配置第二个服务和上一个一样的


2.配置域名IP映射关系
3.我们测试试验结果,访问不同的虚拟主机

完成!