一、项目部署
1. 部署逻辑
因为是前后端分离开发、所以部署到服务器上前后端要分别部署。
- nginx:使用
web服务
做前端页面浏览的服务器。反向代理
用来做发送后端数据接口请求的地址转发。 - tomcat:用来做后端服务器。
大致逻辑: 浏览器端输入url地址 —> 请求web服务器前端页面 —> 发送ajax请求 —> 访问反向代理 —> 请求后端接口 —> 返回数据给反向代理 —> 返回给浏览器。
这里使用80端口表示请求的是前端页面、90端口请求的是后端接口。
2. 部署运行后台项目
部署之前将配置文件的mysql访问的ip改为本地127.0.0.0,因为项目和mysql安装在同一个服务器上所以直接访问本地端口即可。
将java项目打包、将打包好的jar包上传到服务器中。
打包好后target下会有打包好的jar包、将他上传到服务器上。
安装jdk
上传好之后就是运行了、但要保证有没有jdk环境,没有就去安装。
阿里云centos 7下安装jdk
运行项目
将资料中
上传到与jar包相同文件目录下、使用sh startup.sh运行即可。startup.sh内容如下
然后访问接口测试即可、启动成功。
3. 部署前端页面
安装nginx
参考:centOS7.6安装nginx
将页面上传到ngin中的html文件夹下
上传之后将前端项目中的js文件夹下的common访问的ip地址改成90端口的代理端口
配置nginx
配置反向代理和webserver
注释掉nginx中的server配置
改为如下配置
# 前端服务器的配置
server {
listen 80;
location / {
alias /usr/local/nginx/html/seckill-site/;
index seckill.html
}
}
# 后端接口的反向代理max_fails=3表示请求三次连接不上就不再请求这个url、fail_timeout=30s表示超过30s表示超时请求失败。
upstream myserver {
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
}
server {
listen 90;
server_name _;
location / {
proxy_pass http://myserver;
}
}
配置好之后重启nginx
cd到nginx所在目录下、使用./nginx -s reload命令重启
访问http://你的服务器id,数据显示在页面上表示配置成功。
二、压测
压测之前先使用top -h命令查看average(有三个数分别表示的是1分钟、5分钟、15分钟的负载状态)的属性状况
我们的目的是让这三个参数接近2、2表示负载差不多满了、超过2服务器会宕机。
还要看的就是各个进程占cpu的状态不能超过100%。
1. jemeter的安装配置
安装 :安装只要下载好压缩包解压就可以了。
配置:安装好了之后更改下配置文件的编码、不该就会乱码。
启动:安装配置好之后就是启动了、启动在解压目录下的bin文件夹中
使用:先在上面的option中修改为中文模式。
- 右击test plan创建一个线程组。
- 配置线程数、10秒50个线程、循环次数10次也就是100秒500个线程
- 添加取样器http请求、配置请求的端口
- 添加结果树和聚合报告
2. 压测
商品详情压测
配置请求的商品详情端口
配置好之后单击run启动
启动后结果树中会有请求的结果
聚合报告中会有本次压测的数据统计、吞吐量、平均请求时间等等。
压力测试之后使用top -h查看各个系统资源使用的状态、发现明显提升了。
下单操作压测
下单操作要登录才能测试、所以测试时我们可以携带cookie去测试。请求参数要有商品的id、数量活动id
配置下单操作测试
不同的就是多了一个cookie管理器用来模拟登录
run进行测试、结果树数据请求成功测试成功
查看聚合报告、测试的相关报告也显示出来了。
上面只发了一个请求,成功后再更改线程相关配置即可。
三、总结
面试时可以说自己通过压力测试优化通过什么方式优化了某些模块、将他的吞吐量什么的从多少提高到了多少、这样说会让面试官觉得你有理有据、而不是凭感觉去优化的就会很虚。
面试需要复习的八股文:
- 部署时linux用到的一些命令。
- mysql主从复制。
- 数据库的分布式事务。