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中的处理流程如下:
- 连接器接收客户端的HTTP请求。
- 请求被封装成ServletRequest对象,并传递给容器。
- 容器根据请求的URL和Servlet映射关系找到对应的Servlet。
- 如果Servlet尚未加载,则使用反射机制创建Servlet实例并调用其init方法进行初始化。
- 接着调用Servlet的service方法来处理请求,并将处理结果封装成ServletResponse对象。
- 响应通过连接器返回给客户端。
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
修改set leekey 0 60 5test1STOREDget leekeyVALUE leekey 0 5test1ENDadd leekey1 0 60 4test
删除delete leekeyDELETEDget leekeyENDget leekey1VALUE leekey1 0 3lee
session 共享服务器
Session共享是指在多个服务器之间共享同一个用户的会话数据。当用户通过负载均衡或其他方式访问不同的服务器时,这些服务器能够获取和更新相同的会话信息,实现会话数据的一致性。这对于构建具有水平扩展性的Web应用程序或负载均衡环境非常重要3。
Session共享的原理
Session共享的底层原理通常依赖于以下几个关键技术点:
- 共享存储后端:多个服务器使用同一个共享存储后端,如数据库或分布式缓存系统,这个共享存储后端可以被所有服务器访问到。
- SESSION标识符传递:当用户访问其中一个服务器时,该服务器会生成一个唯一的SESSION标识符,并将其存储在用户的浏览器中,通常通过cookie来实现。该标识符用于在共享存储后端中识别用户的会话数据。
- 服务器间的会话数据访问:当用户请求到达其他服务器时,这些服务器会检查请求中的SESSION标识符,并使用它来访问共享存储后端,获取用户的会话数据。
- 数据一致性:当一个服务器修改了用户的会话数据时,它会将更新后的数据存储回共享存储后端。其他服务器在下次访问时将能够获取到最新的会话数据,确保了会话数据在不同服务器之间的一致性
在两台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写的东西还在