Web 业务介绍
Web 技术
B/S 架构即浏览器/服务器架构,客户端只需通过浏览器即可访问服务器提供的服务,无需安装专用客户端,具有部署简便、维护集中、跨平台等特点。HTTP 协议是 B/S 架构中浏览器与服务器之间的通信基础,作为一种无状态、无连接的应用层协议,它定义了请求与响应的规则,实现了客户端与服务端之间的数据传输与交互,支撑起绝大多数 Web 应用的运行。
前端三大核心技术是 HTML、CSS、JavaScript。
Web 框架
Web 资源和访问
从静态服务器请求 HTML、CSS、JS 等文件发送到浏览器端,浏览器端接收后渲染在浏览器上;从图片服务器请求图片资源显示。从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端。
后台应用架构
单体架构
- 传统架构(单机系统),一个项目一个工程:比如商品、订单、支付、库存、登录、注册等等,统一部署,一个进程。
- All in one 的架构方式,把所有的功能单元放在一个应用里。然后把整个应用部署到一台服务器上。
- 如果负载能力不行,将整个应用进行水平复制,进行扩展,然后通过负载均衡实现访问。
- 易于开发和测试:也十分方便部署;当需要扩展时,只需要将 war 复制多份,然后放到多个服务器上,再做个负载均衡就可以了。
- 如果某个功能模块出问题,有可能全站不可访问,修改 Bug 后、某模块功能修改或升级后,需要停掉整个服务,重新整体重新打包、部署这个应用 war 包,功能模块相互之间耦合度高,相互影响,不适合当今互联网业务功能的快速迭代。
- 特别是对于一个大型应用,我们不可能把所有内容都放在一个应用里面,我们如何维护、如何分工合作都是问题。如果项目庞大,管理难度大。
- Web 应用服务器:开源的 Tomcat、Jetty、Glassfish。商用的有 WebLogic、WebSphere、JBoss。
微服务
- 属于 SOA(Service Oriented Architecture)的子集。
- 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一个微服务提供单个业务功能,一个服务只做一件事。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。
- 从技术角度讲就是一种小而独立的处理过程,类似于进程的概念,能够自行单独启动或销毁。
- 微服务架构(分布式系统),各个模块/服务,各自独立出来,'让专业的人干专业的事',独立部署。分布式系统中,不同的服务可以使用各自独立的数据库。
- 服务之间采用轻量级的通信机制(通常是基于 HTTP 的 RESTful API)。
- 微服务设计的思想改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端、后端、DBA、测试分别有自己对应的团队,属于水平团队组织架构。而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责。但实际上在企业中并不会把团队组织架构拆分得这么绝对,垂直架构只是一种理想的架构。
- 微服务的实现框架有多种,不同的应用架构,部署方式也有不同。
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 不完整实现。
软件部署方式
下载安装包
close httpd service
[root@RS1 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz
部署 Tomcat
[root@RS1 ~]# yum install java-1.8.0-openjdk.x86_64 -y
[root@RS1 ~]# tar zxf apache-tomcat-9.0.115.tar.gz -C /usr/local
[root@RS1 ~]# cd /usr/local/
[root@RS1 local]# ls apache-tomcat-9.0.115 bin etc games include lib lib64 libexec sbin share src
[root@RS1 local]# mv apache-tomcat-9.0.115/ tomcat
[root@RS1 local]# cd tomcat/
[root@RS1 tomcat]# ls bin conf lib logs README.md RUNNING.txt webapps BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
制作 Tomcat 的启动脚本
[root@RS1 bin]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre
[root@RS1 bin]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=syslog.target network.target remote-fs.target nss-lookup.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@RS1 bin]# useradd -s /sbin/nologin -M tomcat
[root@RS1 bin]# chown tomcat.tomcat /usr/local/tomcat/ -R
[root@RS1 bin]# systemctl daemon-reload
将配置传到 R2 上
[root@RS2 ~]# yum install java-1.8.0-openjdk.x86_64 -y
[root@RS1 local]# scp -r tomcat [email protected]:/usr/local
[root@RS2 ~]# useradd -s /sbin/nologin -M tomcat
[root@RS2 ~]# chown tomcat.tomcat /usr/local/tomcat/ -R
[root@RS1 local]# scp /lib/systemd/system/tomcat.service [email protected]:/lib/systemd/system/tomcat.service
Nginx 与 Tomcat 整合
单体架构
[root@Nginx conf.d]# cd /usr/local/nginx/conf/conf.d/
[root@Nginx conf.d]# vim vhosts.conf
server {
listen 80;
server_name hhh.org;
location ~* \.jsp$ {
proxy_pass http://192.168.83.10:8080;
}
}
[root@Nginx conf.d]# nginx -s reload
[root@RS1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
[root@RS1 ~]# scp test.jsp [email protected]:/usr/local/tomcat/webapps/ROOT/
Tomcat 负载均衡
[root@Nginx conf.d]# vim vhosts.conf
upstream tomcat {
hash $cookie_JSESSIONID;
server 192.168.83.10:8080;
server 192.168.83.20:8080;
}
server {
listen 80;
server_name hhh.org;
location ~* \.jsp$ {
proxy_pass http://tomcat;
}
}
[root@Nginx conf.d]# nginx -s reload
Session 数据共享保持
Tomcat 加载模块
[root@RS1 ~]# unzip jar.zip
[root@RS1 ~]# cd jar/
[root@RS1 jar]# cp * /usr/local/tomcat/
[root@RS1 jar]# scp * [email protected]:/usr/local/tomcat/lib/
安装 Memcached
[root@RS1 jar]# dnf install memcached
[root@RS2 ~]# dnf install memcached -y
[root@RS1 ~]# vim /etc/sysconfig/memcached
[root@RS2 ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"
[root@RS1 ~]# systemctl restart memcached.service
[root@RS2 ~]# systemctl restart memcached.service
配置 Tomcat
[root@RS1 ]# vim /usr/local/tomcat/conf/context.xml
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!-- <Manager /> -->
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.83.10:11211,n2:192.168.83.20:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
</Context>
[root@RS2 ]# vim /usr/local/tomcat/conf/context.xml
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!-- <Manager /> -->
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.83.10:11211,n2:192.168.83.20:11211" failoverNodes="n2" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
</Context>
[root@RS1 ~]# systemctl restart tomcat.service
[root@RS2 ~]# systemctl restart tomcat.service

