企业级web应用服务器tomcat
创始人
2024-09-25 18:46:14
0

一、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

 

        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

        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主机上

相关内容

热门资讯

四分钟秒懂!WePOker开挂... 四分钟秒懂!WePOker开挂(作弊辅助挂)WePOker果然是有猫腻的(有挂教导);科技详细教程小...
玩家交流!微扑克专用辅助程序教... 1、让任何用户在无需AI插件第三方神器的情况下就能够完成在微扑克系统规律下的调试。2、直接的在微扑克...
十分钟技巧!AAPoKer辅助... 十分钟技巧!AAPoKer辅助(透视软件)AAPoKer果真是真的有挂的(有挂指点);AAPoKer...
科技揭秘!wpk德州测试外挂(... 1、让任何用户在无需AI插件第三方神器的情况下就能够完成在宝宝浙江游戏系统规律下的调试。2、直接的在...
8分钟透视!私人局wepoke... 一、8分钟透视!私人局wepoker到底确实有挂(透视挂)私人局wepoker果然是有挂的(有挂引导...
科技介绍!微扑克的辅助工具苹果... 科技介绍!微扑克的辅助工具苹果(透视)星悦广西麻将规律(有挂技巧)准备好在星悦广西麻将的高塔上攀登,...
十分钟秒懂!WPK作弊透视软件... 十分钟秒懂!WPK作弊透视软件(透视器)WPK原来是有挂的(有挂教导)准备好在WPK的高塔上攀登,扮...
第三方规律!wpk 辅助工具(... 第三方规律!wpk 辅助工具(软件透明挂)天天福建十三张可以开挂的(有挂总结)准备好在wepoke ...
十分钟了解!微扑克为一直输(软... 十分钟了解!微扑克为一直输(软件透明挂)欢乐达人暗宝友辅助工具的(有挂教学),亲,有的,ai轻松简单...
四分钟辅助!AAPoKer德州... 四分钟辅助!AAPoKer德州局辅助方法(透视插件)AAPoKer确实真的有挂的(有挂方式)是一款可...