企业级WEB应用服务器TOMCAT

tomcat的功能和原理

Tomcat的功能

Apache Tomcat是一个开源的Java Servlet容器,它实现了Java EE(Java Platform, Enterprise Edition)的部分技术规范,包括Java Servlet、JavaServer Pages(JSP)、Java Expression Language(EL)和Java WebSocket等。Tomcat主要用于托管Java Web应用程序,它提供了一个用于执行Java代码的环境,并能够处理HTTP请求和响应。

Tomcat的工作原理

Tomcat的工作原理基于两个核心组件:连接器(Connector)和容器(Container)。连接器负责处理客户端的网络请求,将HTTP请求转换为Servlet API可以理解的请求对象,并将响应从Servlet返回给客户端。容器则负责管理Servlet的生命周期,调用Servlet的服务方法来处理请求。

Tomcat的容器层次结构包括Engine、Host、Context和Wrapper。Engine是顶层容器,可以包含多个Host;Host代表虚拟主机,可以包含多个Context;Context代表Web应用上下文,包含多个Wrapper;Wrapper是最底层的容器,代表一个Servlet。

请求在Tomcat中的处理流程如下:

  1. 连接器接收客户端的HTTP请求。
  1. 请求被封装成ServletRequest对象,并传递给容器。
  1. 容器根据请求的URL和Servlet映射关系找到对应的Servlet。
  1. 如果Servlet尚未加载,则使用反射机制创建Servlet实例并调用其init方法进行初始化。
  1. 接着调用Servlet的service方法来处理请求,并将处理结果封装成ServletResponse对象。
  1. 响应通过连接器返回给客户端。

Tomcat还提供了其他功能,如会话管理、安全性、JMX管理接口、JSP编译和预编译等。通过这些功能,Tomcat能够提供一个全面的环境来部署和运行Java Web应用程序

tomcat的安装

安装java环境

root@tomcat \~# yum install java-1.8.0-openjdk.x86_64 -y

解压安装包

root@tomcat \~# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/

root@tomcat \~# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat #软连接

root@tomcat \~# /usr/local/tomcat/bin/startup.sh #启动Java

生成tomcat的主配置文件

root@tomcat \~# useradd -s /sbin/nologin -M tomcat

root@tomcat \~# chown -R tomcat.tomcat /usr/local/tomcat/

root@tomcat \~# vim /lib/systemd/system/tomcat.service

root@tomcat \~# systemctl daemon-reload

root@tomcat \~# systemctl enable --now tomcat

tomcat负载均衡实现

Tomcat负载均衡功能

Tomcat本身不直接提供负载均衡功能,但可以通过与其他软件结合使用来实现。负载均衡是指将进入的网络请求或服务负载分配到多个服务器上,以提高应用程序的可用性和处理能力。在Tomcat的场景中,负载均衡通常用于将用户请求分发到多个Tomcat实例,从而优化资源使用和提高系统的并发处理能力。

Tomcat负载均衡原理

负载均衡可以通过多种技术实现,包括硬件负载均衡器和软件负载均衡器。在软件层面,可以使用Apache HTTP服务器结合mod_proxy模块,或者使用专门的负载均衡软件如Nginx或HAProxy来实现对Tomcat服务器的负载均衡。这些负载均衡器可以根据不同的算法(如轮询、最少连接、IP哈希等)来决定将请求发送到哪个Tomcat实例。

在nginx主机中,需要使用cookiehash来进行调用,需要cookie hash来对JSESSIONID进行匹配

vim /usr/local/nginx/conf.d/php.conf

在浏览器中访问<www.timinglee.org/test.jsp>

先访问10:

写入内容

刷新后访问20:

memcached 操作命令

下载memcached和telnet

dnf install memcached -y

dnf install telnet -y
五种基本 memcached 命令执行最简单的操作。这些命令和操作包括:
set #修改
add #添加
replace #覆盖
get #查看
delete #删除

修改
set leekey 0 60 5
test1
STORED
get leekey
VALUE leekey 0 5
test1
END
add leekey1 0 60 4
test
删除
delete leekey
DELETED
get leekey
END
get leekey1
VALUE leekey1 0 3
lee

session 共享服务器

Session共享是指在多个服务器之间共享同一个用户的会话数据。当用户通过负载均衡或其他方式访问不同的服务器时,这些服务器能够获取和更新相同的会话信息,实现会话数据的一致性。这对于构建具有水平扩展性的Web应用程序或负载均衡环境非常重要3。

Session共享的原理

Session共享的底层原理通常依赖于以下几个关键技术点:

  1. 共享存储后端:多个服务器使用同一个共享存储后端,如数据库或分布式缓存系统,这个共享存储后端可以被所有服务器访问到。
  1. SESSION标识符传递:当用户访问其中一个服务器时,该服务器会生成一个唯一的SESSION标识符,并将其存储在用户的浏览器中,通常通过cookie来实现。该标识符用于在共享存储后端中识别用户的会话数据。
  1. 服务器间的会话数据访问:当用户请求到达其他服务器时,这些服务器会检查请求中的SESSION标识符,并使用它来访问共享存储后端,获取用户的会话数据。
  1. 数据一致性:当一个服务器修改了用户的会话数据时,它会将更新后的数据存储回共享存储后端。其他服务器在下次访问时将能够获取到最新的会话数据,确保了会话数据在不同服务器之间的一致性

在两台tomcat中下载memcache

dnf install memcached -y

下载jar包

将jar包复制到tomcat下

cd jar/

cp * /usr/local/tomcat/lib

在tomcat1中配置

root@tomcat-1 \~# vim /usr/local/tomcat/conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"

failoverNodes="m1"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

在tomcat2中配置

root@tomcat-2 tomcat# vim /usr/local/tomcat/conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"

failoverNodes="m2"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

测试:

在浏览器中访问<www.timinglee.org/test.jsp>

然后随便写入东西,写入的内容会被memcached记录

关闭10tomcat

服务自动变为20,且之前再在10写的东西还在

相关推荐
小码哥_常4 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮6 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
学长毕设7 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
她说可以呀8 小时前
Vue插槽
前端·javascript·vue.js
qq_448011168 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
zzu123zsw8 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
aixingpan8 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_958352909 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
源码集结号9 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场9 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算