企业级web应用服务器tomcat

devtools/2024/9/22 16:27:01/

一、WEB技术

1.1HTTP协议和B/S 结构

我们的操作系统之所以可以让程序并行的执行,源于操作系统有进程子系统,每个进程可以有多个线程,每个线程可以被CPU调度执行

客户端和服务端分属于不同的进程,跨主机的进程之间需要通信就得需要使用网络编程,最常见的网络编程接口是Socket。

Socket称为套接字,网络通信需要服务和客户两端,被动接受另一端请求并提供数据和计算的称为服务端,另一端成为客户端,这种Client/Server编程模式简称为C/S编程,往往使用传输层协议(tcp/udp)

网页是存储在WEB服务器端的文本文件,浏览器发起HTTP请求后,到达WEB服务器程序后,服务程序根据URL读取对应的HTML文件,并封装成HTPP响应报文给浏览器端。

起初网页主要指的是HTML、CSS等文件制作属于静态网页,后来因需求出现了CGI通用网关接口将用户请求使用程序动态生成的技术,称为动态网页技术。先后出现了ASP、PHP、JSP等技术。

1.2 前端三大核心技术

1.2.1 HTML

超文本标记语言,不同于一般的编程语言,由一个个的标签组成,各个标签各司其职,提供网页信息、负责文字、负责图片、负责网页布局使用各不同的标签。

超文本需要显示就得有软件能够呈现超文本定义的排版格式,例如显示:图片、表格,显示字体的大小、颜色,这个软件就是浏览器。

1.2.2 CSS(Cascading Style Sheets)层叠样式表

采用了模块化思想,每个模块都在CSS 2基础上分别增强功能。不同厂家的浏览器使用的引擎,对CSS的支持不一样,导致网页布局、样式在不同浏览器不一样。因此, 想要保证不同用户使用不同浏览器看到的网页效果一直非常困难。

1.2.3 JavaScript

简称JS,是一种动态的弱类型脚本解释性语言,和HTML、CSS并称三大WEB核心技术,2008年后随着chrome浏览器的V8引擎发布。 V8 JS引擎不是解释执行,而是本地编译,在V8引擎做了很多优化,JS程序在其上运行堪比本地二进制程 序。V8引擎使用C++开发,可以嵌入到任何C++程序中。基于V8引擎,2009年基于服务器javascript的运 行环境Node.js诞生,创建了第一版npm (Node.js包管理器和开源库生态系统), 提供了大量的库供程序员 使用。从此,便可以在服务器端真正大规模使用JavaScript编程了。也就是说 JavaScript 也可以真正称为 服务器端编程语言了,成为目前唯一的前,后端通用的语言。

同步

交互式网页,用户提交了请求,整个网页都需要重新渲染

异步

可以在不重新加载整个网页的情况下,对网页的某部分进行更新。Javascript 通过调用浏览器内置的WEB API中的 XMLHttpRequest 对象实现Ajax 技术。早期Ajax结合数据格式XML,目前更多的使用JSON。利用AJAX可 实现前后端开发的彻底分离,改变了传统的开发模式。

二 、WEB框架

2.1 web资源和访问

PC端或移动端浏览器访问

从静态服务器请求HTML、CSS、JS等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务 器请求图片资源显示

从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端

手机 App 访问

内置了HTML和JS文件,不需要从静态WEB服务器下载JS或者HTML,为的就是减少文件的发送。

2.2 后台应用架构

2.2.1 单体架构

传统架构(单机系统),一个项目一个工程:比如商品、订单、支付、库存、登录、注册等等,统 一部署,一个进程

all in one的架构方式,把所有的功能单元放在一个应用里。然后把整个应用部署到一台服务器上。 如果负载能力不行,将整个应用进行水平复制,进行扩展,然后通过负载均衡实现访问。

易于开发和测试:也十分方便部署;当需要扩展时,只需要将war复制多份,然后放到多个服务器上, 再做个负载均衡就可以了

如果某个功能模块出问题,有可能全站不可访问,修改Bug后、某模块功能修改或升级后,需要停 掉整个服务,重新整体重新打包、部署这个应用war包,功能模块相互之间耦合度高,相互影响,不适 合当今互联网业务功能的快速迭代

特别是对于一个大型应用,我们不可能吧所有内容都放在一个应用里面,我们如何维护、如何分工 合作都是问题。如果项目庞大,管理难度大

web应用服务器:开源的tomcat、jetty、glassfish。商用的有weblogic、websphere、Jboss

2.2.2 微服务

属于SOA(Service Oriented Architecture)的子集

核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一 个微服务提供单个业务功能

技术角度讲就是一种小而独立的处理过程,类似与进程的概念,能够自行单独启动或销毁

各个模块/服务,各自独立出来,"让专业的人干专业的事",独立部 署。分布式系统中,不同的服务可以使用各自独立的数据库。

服务之间采用轻量级的通信机制(通常是基于HTTP的RESTful API)

微服务设计的思想改变了原有的企业研发团队组织架构,使得团队组织架构的划分更倾向于垂直架构。

微服务的实现框架有多种,不同的应用架构,部署方式也有不同

2.2.3 单体架构和微服务比较

微服务的优点

每个服务足够内聚,足够小,代码容易理解

开发简单、开发效率提高

微服务是松耦合的

微服务能使用不同的语言开发

易于和第三方集成

微服务允许你利用融合最新技术

每个微服务都有自己的存储能力

微服务缺点

增加了开发、测试、运维、监控等的复杂度

引入了分布式事务和异步补偿机制,为设计和开 发带来一定挑战

开发人员和运维需要更强的技术能力处理分布式系统的复杂性

不适用于小型应用会增加其成本

常见的微服务框架

Dubbo:一款高性能的Java RPC服务框架,微服务生态体系中的一个重要组件,将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信,内部协调使用Zookeeper,实现服务注册、服务发现和服务治理

Spring cloud:一个完整的微服务解决方案,相当于Dubbo的超集,微服务框架,将单体应用拆分为粒度更小的单一功能服务,基于HTTP协议的REST(Representational State Transfer 表述性状态转移)风格实现模块间通信

三 、tomcat的功能介绍

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和 并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还是一个Servlet和 JSP容器

3.1 安装 Tomcat

node1上

首先是安装java环境

[root@node1 ~]# dnf install java-1.8.0-openjdk.x86_64 -y

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

[root@node1 ~]# cd /usr/local/

创建一个软连接方便执行后续操作

[root@node1 local]# ln -s apache-tomcat-9.0.93 tomcat

[root@node1 local]# cd tomcat/

[root@node1 tomcat]# ls

bin           conf             lib      logs    README.md      RUNNING.txt  webapps

BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work

[root@node1 tomcat]# cd bin/

[root@node1 bin]# ls

bootstrap.jar                 configtest.sh     shutdown.sh

catalina.bat                  daemon.sh         startup.bat

catalina.sh                   digest.bat        startup.sh

catalina-tasks.xml            digest.sh         tomcat-juli.jar

ciphers.bat                   makebase.bat      tomcat-native.tar.gz

ciphers.sh                    makebase.sh       tool-wrapper.bat

commons-daemon.jar            setclasspath.bat  tool-wrapper.sh

commons-daemon-native.tar.gz  setclasspath.sh   version.bat

configtest.bat                shutdown.bat      version.sh

执行java的启动脚本

[root@node1 bin]# ./startup.sh

再查看一下端口号

[root@node1 bin]# netstat -antlupe | grep java

tcp6       0      0 :::8080                 :::*                    LISTEN      0          119613     20217/java

tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      0          119631     20217/java

浏览器访问172.25.254.10:80

3.2 tomcat的文件结构和组成

bin        服务启动、停止等相关程序和文件

conf        配置文件

lib        库目录

logs        日志目录

webapps        应用程序,应用部署目录,相当于nginx的默认发布目录

work jsp        编译后的结果文件,建议提前预热访问

3.3 生成tomcat的启动文件

生成配置文件

[root@node1 conf]# vim /usr/local/tomcat/conf/tomcat.conf

JAVA_HOME=/etc/alternatives/jre_openjdk

生启动文件

[root@node1 conf]# vim /lib/systemd/system/tomcat.service

 [Unit]

 Description=Tomcat

 #After=syslog.target network.target remote-fs.target nss-lookup.target

 After=syslog.target network.target

 [Service]

 Type=forking

 EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf

 ExecStart=/usr/local/tomcat/bin/startup.sh

 ExecStop=/usr/local/tomcat/bin/shutdown.sh

 PrivateTmp=true

 User=tomcat

 Group=tomcat

 [Install]

 WantedBy=multi-user.target

创建用户和设置权限

[root@node1 conf]# useradd -s /sbin/nologin -M tomcat

[root@node1 conf]# cd

[root@node1 ~]# ls /usr/local/tomcat/ -ld

drwxr-xr-x 9 root root 220 Aug 21 11:47 /usr/local/tomcat/

[root@node1 ~]# chown -R tomcat.tomcat /usr/local/tomcat/

启动服务

[root@node1 ~]# systemctl daemon-reload

[root@node1 ~]# systemctl enable --now  tomcat

Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /usr/lib/systemd/system/tomcat.service.

查看一下进程

[root@node1 ~]# ps aux | grep tomcat

root       30380  1.2  5.9 2560400 106864 pts/0  Sl   12:23   0:02 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

root       31493  0.0  0.1 221664  2244 pts/0    S+   12:26   0:00 grep --color=auto tomcat

 再通过浏览器访问一下

tomcat和启动文件同步到node2上

[root@node1 ~]# rsync -ar /usr/local/apache-tomcat-9.0.93 root@172.25.254.20://usr/local

[root@node1 ~]# rsync -ar /lib/systemd/system/tomcat.service root@172.25.254.20:/lib/systemd/system/tomcat.service

node2上

创建tomcat用户并设置权限

[root@node2 ~]# useradd -s /sbin/nologin -M tomcat
[root@node2 ~]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@node2 ~]# cd /usr/local/

创建软连接

[root@node2 local]# ln -s apache-tomcat-9.0.93 tomcat

[root@node2 ~]# systemctl daemon-reload
[root@node2 ~]# systemctl enable --now tomcat
[root@node2 ~]#  netstat -aultupe | grep java

[root@node2 ~]# netstat -aultupe | grep tomcat

[root@node2 ~]# ps aux | grep tomcat

再通过浏览器访问一下20主机

四、实现tomcat中的负载均衡

[root@node1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/

[root@node2 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/

[root@nginx ~]# cd /usr/local/nginx/conf.d/

[root@nginx conf.d]# vim tomcat.conf

upstream tomcat {

    hash $cookie_JSESSIONID;

    server 172.25.254.10:8080;

    server 172.25.254.20:8080;

}

server {

    listen *:80;

    server_name www.jcl.org;

    root /data/web/html;

    index index.html;

    location ~ \.jsp$ {

        proxy_pass http://tomcat;

    }

}

[root@nginx conf.d]# nginx -s reload

在不同浏览器上访问测试www.jcl.org/test.jsp

五 、Memcached

5.1 Memcached简介

可以通过做集群同步的方式, 让各memcached服务器的数据进行同步,从而实现数据的一致性,即保证各memcached的数据是一样 的,即使有任何一台 memcached 发生故障,只要集群中有一台 memcached 可用就不会出现数据丢 失,当其他memcached 重新加入到集群的时候,可以自动从有数据的memcached 当中自动获取数据并 提供服务。

5.2 memcached的安装与启动

[root@node1 ~]# dnf install memcached -y

[root@node1 ~]# vim /etc/sysconfig/memcached

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS="-l 0.0.0.0,::1"

[root@node1 ~]# scp /etc/sysconfig/memcached root@172.25.254.20:/etc/sysconfig/memcached

[root@node1 ~]# systemctl start memcached.service

六、session 共享服务器

6.1 msm 介绍

msm(memcached session manager)提供将Tomcat的session保持到memcached可以实现高可用。

Tomcat的Session管理类,Tomcat版本不同

        memcached-session-manager-2.3.2.jar

        memcached-session-manager-tc9-2.3.2.jar

Session数据的序列化、反序列化类

        官方推荐kyro

        在webapp中WEB-INF/lib/下

驱动类

        memcached(spymemcached.jar)

        Redis(jedis.jar)

6.2配置过程

[root@node1 jar]# ls
asm-5.2.jar                              minlog-1.3.1.jar
kryo-3.0.3.jar                           msm-kryo-serializer-2.3.2.jar
kryo-serializers-0.45.jar                objenesis-2.6.jar
memcached-session-manager-2.3.2.jar      reflectasm-1.11.9.jar
memcached-session-manager-tc9-2.3.2.jar  spymemcached-2.12.3.jar

[root@node1 jar]# cp * /usr/local/tomcat/lib/

[root@node1 jar]# scp * root@172.25.254.20:/usr/local/tomcat/lib/

[root@node1 jar]# vim /usr/local/tomcat/conf/context.xml

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

        memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"

        failoverNodes="n1"

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

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

[root@node1 jar]# scp /usr/local/tomcat/conf/context.xml root@172.25.254.20:/usr/local/tomcat/conf/context.xml

[root@node2 ~]# vim /usr/local/tomcat/conf/context.xml

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

        memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"

        failoverNodes="n2"

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

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

[root@node1 jar]# systemctl restart tomcat

[root@node2 ~]# systemctl restart tomcat

访问测试www.jcl.org/test.jsp

添加两条内容

停掉20主机的tomcat

[root@node2 ~]# systemctl stop tomcat

再访问测试www.jcl.org/test.jsp

添加第三条内容的时候可以看到之前的两条信息还在,因为20主机挂掉了,所以通过memcache自动跳转到10主机上


http://www.ppmy.cn/devtools/99605.html

相关文章

企业高性能web服务器知识点合集

文章目录 nginx源码编译安装平滑升级及版本回滚平滑升级版本回滚 服务启动脚本核心配置全局配置参数优化调整root与alias自定义错误日志自定义错误页面检测文件是否存在长链接配置下载服务器的配置 nginx高级配置nginx状态页面压缩功能变量内置变量自定义变量 nginx rewrite指令…

springboot如何解决跨域问题

在Spring Boot中解决跨域问题&#xff0c;通常的做法是配置CORS&#xff08;Cross-Origin Resource Sharing&#xff09;策略。CORS是一种机制&#xff0c;它使用额外的HTTP头部来告诉浏览器让运行在一个origin&#xff08;域&#xff09;上的Web应用被准许访问来自不同源服务器…

设计模式 - 软件设计原则(第三章)

目录 3&#xff0c;软件设计原则 3.1 开闭原则 3.2 里氏代换原则 3.3 依赖倒转原则 3.4 接口隔离原则 3.5 迪米特法则 3.6 合成复用原则 3、软件设计原则 在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#x…

密码生成器(HTML+CSS+JavaScript)

&#x1f30f;个人博客主页&#xff1a;心.c ​ 前言&#xff1a;前两天写了密码生成器&#xff0c;现在跟大家分享一下&#xff0c;大家如果想使用随便拿&#xff0c;如果哪里有问题还请大佬们给我指出&#xff0c;感谢支持 &#x1f525;&#x1f525;&#x1f525;专题文章&…

成都无人机飞手考证详解及前景分析

一、考证详解 1.1 考证背景与重要性 随着无人机技术的迅猛发展&#xff0c;无人机在航拍、农业、救援、物流等多个领域展现出广泛应用价值。为了规范无人机行业&#xff0c;保障公共安全和空域秩序&#xff0c;国家对无人机操作员实施了严格的资格认证制度。考取无人机飞手证…

深入解析 Linux 网络管理:带宽查询、防火墙配置与端口管理

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Unity3D 模型碰撞检测问题详解

前言 在Unity3D游戏开发中&#xff0c;模型碰撞检测是至关重要的一环&#xff0c;它负责处理物体之间的交互、触发事件以及物理效果的实现。通过精确的碰撞检测&#xff0c;游戏世界得以呈现出更为真实和动态的交互体验。本文将详细介绍Unity3D中的碰撞检测原理、技术实现以及…

Centos7升级Docker版本

前言&#xff1a;虚拟机安装Docker后&#xff0c;每隔一段时间&#xff0c;关闭Docker再重新启动&#xff0c;会出现启动不成功的情况&#xff0c;查找相关原因也未解决&#xff0c;尝试升级Docker版本&#xff0c;居然解决了。升级版本步骤如下&#xff08;不影响之前使用的镜…