一 WEB技术
(1)HTTP协议和B/S 结构
操作系统有进程子系统,使用多进程就可以充分利用硬件资源。进程中可以多个线程,每一个线程可以 被CPU
调度执行,这样就可以让程序并行的执行。这样一台主机就可以作为一个服务器为多个客户端提 供计算服务。
客户端和服务端往往处在不同的物理主机上,它们分属不同的进程,这些进程间需要通信。跨主机的进 程间通信需要使用网络编程。最常见的网络编程接口是Socket
。
Socket
称为套接字,本意是插座。也就是说网络通讯需要两端,如果一端被动的接收另一端请求并提供 计算和数据的称为服务器端,另一端往往只是发起计算或数据请求,称为客户端。
这种编程模式称为
Client/Server
编程模式,简称
C/S
编程。开发的程序也称为
C/S
程序。
C/S
编程往往使用 传输层协(TCP/UDP
),较为底层,比如:
QQ
,迅雷
,
云音乐
,
云盘
, foxmail
,
xshell
等
1990
年
HTTP
协议和浏览器诞生。在应用层使用文本跨网络在不同进程间传输数据,最后在浏览器中将服 务器端返回的HTML
渲染出来。由此,诞生了网页开发。
网页是存储在
WEB
服务器端的文本文件,浏览器发起
HTTP
请求后,到达
WEB
服务程序后,服务程序根据 URL读取对应的
HTML
文件,并封装成
HTTP
响应报文返回给浏览器端。
起初网页开发主要指的是
HTML
、
CSS
等文件制作,目的就是显示文字或图片,通过超级链接跳转到另一 个HTML
并显示其内容。 后来,网景公司意识到让网页动起来很重要,傍着SUN
的
Java
的名气发布了
JavaScript
语言,可以在浏览 器中使用JS
引擎执行的脚本语言,可以让网页元素动态变化,网页动起来了。 为了让网页动起来,微软使用ActiveX
技术、
SUN
的
Applet
都可以在浏览器中执行代码,但都有安全性问 题。能不能直接把内容直接在WEB
服务器端组织成
HTML
,然后把
HTML
返回给浏览器渲染呢?
最早出现了
CGI
(
Common Gateway Interface
)通用网关接口,通过浏览器中输入
URL
直接映射到一个 服务器端的脚本程序执行,这个脚本可以查询数据库并返回结果给浏览器端。这种将用户请求使用程序 动态生成的技术,称为动态网页技术。先后出现了ASP
、
PHP
、
JSP
等技术,这技术的使用不同语言编 写的程序都运行在服务器端,所以称为WEB
后端编程。有一部分程序员还是要编写
HTML
、
CSS
、
JavaScript
,这些代码运行在浏览器端,称为
WEB
前端编程。合起来称为
Browser/Server
编程,即
B/S
编程。
(2)前端三大核心技术
1.HTML
HTML
(
HyperText Markup Language
)超文本标记语言,它不同于一般的编程语言。超文本即超出纯
文本的范畴,例如:描述文本颜色、大小、字体等信息,或使用图片、音频、视频等非文本内容。
HTML
由一个个的标签(标记)组成,这些标签各司其职,有的提供网页信息,有的负责文字,有的负责
图片,有的负责网页布局,所以一个
HTML
文件,是由格式标签和数据组成。
2.CSS(Cascading Style Sheets)层叠样式表
HTML
本身为了格式化显示文本,但是当网页呈现大家面前的时候,需求
HTML
提供更多样式能力。这使
得
HTML
变得越来越臃肿。这促使了
CSS
的诞生。
1994
年,
W3C
成立,
CSS
设计小组所有成员加入
W3C
,并努力研发
CSS
的标准,微软最终加入。
1996
年
12
月发布
CSS 1.0
。
1998
年
5
月发布
CSS 2.0
CSS 3
采用了模块化思想,每个模块都在
CSS 2
基础上分别增强功能。所以,这些模块是陆续发布的。
不同厂家的浏览器使用的引擎,对
CSS
的支持不一样,导致网页布局、样式在不同浏览器不一样。因此,
想要保证不同用户使用不同浏览器看到的网页效果一直非常困难。
3.JavaScript
Javascript
简称
JS
,是一种动态的弱类型脚本解释性语言,和
HTML
、
CSS
并称三大
WEB
核心技术,得到 了几乎主流浏览器支持。
二 WEB框架
1. web资源和访问
2.PC 端或移动端浏览器访问
从静态服务器请求
HTML
、
CSS
、
JS
等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务
器请求图片资源显示
从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端
3.手机 App 访问
内置了
HTML
和
JS
文件,不需要从静态
WEB
服务器下载
JS
或
HTML
。为的就是减少文件的发送,现代前 端开发使用的JS
文件太多或太大了
有必要就从图片服务器请求图片,从业务服务器请求动态数据
客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。
三 tomcat的功能介绍
如图所示:
Tomcat
服务器是一个免费的开放源代码的
Web
应用服务器,属于轻量级应用服务器,在中小型系统和 并发访问用户不是很多的场合下被普遍使用,Tomcat
具有处理
HTML
页面的功能,它还是一个
Servlet
和 JSP容器 起始于SUN
公司的一个
Servlet
的参考实现项目
Java Web Server
,开发者是
James Duncan Davidson
, 在1999
年,将项目贡献给了
apache
软件基金会(
ASF
),和
ASF
现有的项目
JServ
合并,并开源成为顶级 项目
Tomcat
仅仅实现了
Java EE
规范中与
Servlet
、
JSP
相关的类库,是
JavaEE
不完整实现。
1999
年发布初始版本是
Tomcat 3.0
,实现了
Servlet 2.2
和
JSP 1.1
规范。
Tomcat 4.x
发布时,内建了
Catalina
(
Servlet
容器)和
Jasper
(
JSP engine
)等
当前
Tomcat
的正式版本已经更新到
9.0.x
版本,但当前企业中主流版本为
8.x
和
7.x
(1)安装 Tomcat
1.安装java环境
yum install java-1.8.0-openjdk.x86_64 -y
2.安装并启动tomcat
1.tar zxf apache-tomcat-9.0.91.tar.gz -C /usr/local/ 解压安装包
2.ln -s /usr/local/apache-tomcat-9.0.91/ /usr/local/tomcat
3./usr/local/tomcat/bin/startup.sh 启动tomcat
3.查看端口
netstat -antlupe | grep java
4.访问tomcat
输入172.25.254.100:8080
注意这里一定要加8080端口号
(2)tomcat的文件结构和组成
1.目录说明
bin
服务启动、停止等相关程序和文件
conf
配置文件
lib
库目录
logs
日志目录
webapps
应用程序,应用部署目录,相当于
nginx
的默认发布目录
work jsp
编译后的结果文件,建议提前预热访问
2.查看tomcat相关目录和文件
ls /usr/local/tomcat/
(3)生成tomcat的启动文件
1.生成tomcat的主配置文件
vim /usr/local/tomcat/conf/tomcat.conf(编辑主配置文件)
JAVA_HOME=/etc/alternatives/jre_openjdk
2.生成启动文件
编辑配置文件
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
重启服务
systemctl daemon-reload
systemctl enable --now tomcat
四 结合反向代理实现
tomcat
部署
如图所述:
standalone
模式,
Tomcat
单独运行,直接接受用户的请求,不推荐。
反向代理,单机运行,提供了一个
Nginx
作为反向代理,可以做到静态由
nginx
提供响应,动态
jsp
代
理给
Tomcat
LNMT
:
Linux + Nginx + MySQL + Tomcat
LAMT
:
Linux + Apache
(
Httpd
)
+ MySQL + Tomcat
前置一台
Nginx
,给多台
Tomcat
实例做反向代理和负载均衡调度,
Tomcat
上部署的纯动态页面更
适合
LNMT
:
Linux + Nginx + MySQL + Tomcat
多级代理
LNNMT
:
Linux + Nginx + Nginx + MySQL + Tomcat
(4)利用 nginx 反向代理实现
如图所示:
利用
nginx
反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个
tomcat
主机
利用
nginx
指令
proxy_pass
可以向后端服务器转发请求报文
,
并且在转发时会保留客户端的请求报文中的 host首部
客户端:
node1和node2端:
将jsp文件复制到tomcat的目录下
cp test.jsp /usr/local/tomcat/webapps/ROOT/
在nginx主机中做
vim /usr/local/nginx/conf.d/vhosts.conf
location ~ \.jsp$ {
proxy_pass http://172.25.254.10:8080;
}
测试:
在浏览器中访问信息
www.xl.org/test.jsp
(5)实现tomcat中的负载均衡
动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压
力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是
Load Balance
负载
均衡。
当单机
Tomcat
,演化出多机多级部署的时候,一个问题便凸显出来,这就是
Session
。而这个问题的由
来,都是由于
HTTP
协议在设计之初没有想到未来的发展。
1 .HTTP的无状态,有连接和短连接
无状态:
指的是服务器端无法知道
2
次请求之间的联系,即使是前后
2
次请求来自同一个浏览器,也
没有任何数据能够判断出是同一个浏览器的请求。后来可以通过
cookie
、
session
机制来判断。
浏览器端第一次
HTTP
请求服务器端时,在服务器端使用
session
这种技术,就可以在服务器端
产生一个随机值即
SessionID
发给浏览器端,浏览器端收到后会保持这个
SessionID
在
Cookie
当
中,这个
Cookie
值一般不能持久存储,浏览器关闭就消失。浏览器在每一次提交
HTTP
请求的
时候会把这个
SessionID
传给服务器端,服务器端就可以通过比对知道是谁了
Session
通常会保存在服务器端内存中,如果没有持久化,则易丢失
Session
会定时过期。过期后浏览器如果再访问,服务端发现没有此
ID
,将给浏览器端重新发
新的
SessionID
更换浏览器也将重新获得新的
SessionID
有连接:
是因为它基于
TCP
协议,是面向连接的,需要
3
次握手、
4
次断开。
短连接:
Http 1.1
之前,都是一个请求一个连接,而
Tcp
的连接创建销毁成本高,对服务器有很大的
影响。所以,自
Http 1.1
开始,支持
keep-alive
,默认也开启,一个连接打开后,会保持一段时间
(可设置),浏览器再访问该服务器就使用这个
Tcp
连接,减轻了服务器压力,提高了效率。
服务器端如果故障,即使
Session
被持久化了,但是服务没有恢复前都不能使用这些
SessionID
。
如果使用
HAProxy
或者
Nginx
等做负载均衡器,调度到了不同的
Tomcat
上,那么也会出现找不到
2.实战:tomcat负载均衡的实现
在nginx主机中配置:
vim /usr/local/nginx/conf.d/vhosts.conf
重启服务
nginx -s reload
测试结果:
用不同浏览器打开的会话不同
四、Memcached
(1)概念
Memcached
只支持能序列化的数据类型,不支持持久化,基于
Key-Value
的内存缓存系统
memcached 虽然没有像redis
所具备的数据持久化功能,比如
RDB
和
AOF
都没有,但是可以通过做集群同步的方式, 让各memcached
服务器的数据进行同步,从而实现数据的一致性,即保证各
memcached
的数据是一样 的,即使有任何一台 memcached
发生故障,只要集群中有一台
memcached
可用就不会出现数据丢 失,当其他memcached
重新加入到集群的时候
,
可以自动从有数据的
memcached
当中自动获取数据并 提供服务。
Memcached
借助了操作系统的
libevent
工具做高效的读写。
libevent
是个程序库,它将
Linux
的
epoll
、 BSD类操作系统的
kqueue
等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥高 性能。memcached
使用这个
libevent
库,因此能在
Linux
、
BSD
、
Solaris
等操作系统上发挥其高性能。
Memcached
支持最大的内存存储对象为
1M
,超过
1M
的数据可以使用客户端压缩或拆分报包放到多个 key中,比较大的数据在进行读取的时候需要消耗的时间比较长,
memcached
最适合保存用户的 session实现
session
共享。
Memcached
存储数据时
, Memcached
会去申请
1MB
的内存
,
把该块内存称为一个
slab,
也称为一个
page;
Memcached
支持多种开发语言,包括:
JAVA,C,Python,PHP,C#,Ruby,Perl
等;
Memcached
官网:
http://memcached.org;
(2)memcached的安装与启动
1.安装memcachd(没有客户端)
dnf install memcached -y
vim /etc/sysconfig/memcached
重启服务
systemctl start memcached.service
netstat -antlupe | grep memcached
查看端口
dnf install telnet -y
dnf install telnet -y
下载远程登录软件
(3)操作命令
五种基本
memcached
命令执行最简单的操作。这些命令和操作包括:
set
add
replace
get
delete
#前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令,都使用如下所示的语法:
command <key> <flags> <expiration time> <bytes>
<value>
#参数说明如下:
command set/add/replace
key key 用于查找缓存值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节数
value 存储的值(始终位于第二行)
#增加key,过期时间为秒,bytes为存储数据的字节数
add key flags exptime bytes
五、tomcat的session会话保持
当新用户发请求到Tomcat1时, Tomcat1生成session返回给用户的同时,也会同时发给memcached2备 份。即Tomcat1 session为主session,memcached2 session为备用session,使用memcached相当于 备份了一份Session
(1)复制所有jar文件到/usr/local/tomcat/lib/
#node1 编辑主配置文件
[root@tomcat-node1 lib]# 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"
/>
#node2端
[root@tomcat-node2 lib]# 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"
/>
(2)测试
1.
在两台
tomcat
都开启的情况下:
2.
在
n1
被停止后继续提交信息看是否可以读取到之前的会话信息
结果如下:
到这里分享就结束啦!