SpringBoot - 电商购物平台后端
项目内容
课程中借由“电商秒杀”案例,通过多种性能优化技术,总结了互联网项目中“秒杀”的经典性能优化方案技术,提供了统一的设计思维和思考方式,帮助同学们真正理解性能优化中每个技术的使用以及背后的原理。
E-commerce Website Backend built with Java/Spring Boot
- Developed an e-commerce website backend that includes an authentication system, shopping cart, and order modules and deployed on a Cloud Server(2 cores and 4GB memory).
- Implemented a simplified version of the single sign-on authentication method by using Redis/Token.
- Designed RESTful API for backend server enabling data to be stored in MySQL.
- Increased the max concurrent threads from 100 to 300 by modifying Tomcat configuration and performing a load test via JMeter.
- Utilized: Java, Spring Boot, Redis, MySQL, Tomcat, JMeter, Maven, Git.
分层设计
项目结构
云端部署
本机远程连接服务器
# 我的服务器ip 登录名@root
ssh root@116.62.21.206
# 输入密码
MySQL
启动MySQL服务
systemctl start mariadb.service
# 查看mysql 环境
ps -ef | grep mysql
# 或者查看3306端口
netstat -anp | grep 3306
连接MySQL@root
# 初始化 用户@root 密码初始化为root
mysqladmin -u root password root
# 尝试连接本地mysql
# 用户root 密码root
mysql -uroot -proot
导出本地数据库备份
将本机使用的数据库备份为.sql
文件
使用transmit传输到 root@116.62.21.206 //tmp/
目录下
创建至服务器的MySQL中
# 指向的管道操作
mysql -uroot -proot < //tmp/miaosha.sql
# 登录mysql检查
mysql -uroot -proot
show databases;
use miaosha;
show tables;
应用程序
Maven 打包
# 进入相关目录
cd miaoshaStable
# maven 打包
mvn clean package
cd target
ls
# miaosha-1.0-SNAPSHOT.jar是我们的打包文件
# classes maven-status
# generated-sources miaosha-1.0-SNAPSHOT.jar
# maven-archiver miaosha-1.0-SNAPSHOT.jar.original
上传
# 在target目录下使用scp指令上传
scp miaosha-1.0-SNAPSHOT.jar root@116.62.21.206:/tmp/
启动
# 创建新文件夹
cd //var/
mkdir www
cd www/
mkdir java
mv java miaosha # 改名
cd miaosha/
# 将jar包 移动到//tmp/miaosha 目录
mv //tmp/miaosha-1.0-SNAPSHOT.jar ./miaosha.jar
# 成功移动过来后,修改权限
chmod -R 777 *
# 测试启动
java -jar miaosha.jar
云服务器
配置安全组规则
开放2000-9999所有端口
{
"status": "success",
"data": {
"id": 1,
"name": "第一个用户",
"gender": 1,
"age": 30,
"telphone": "13521234859"
}
}
编写deploy.sh
脚本启动
如果需要外部配置
vim application.properties
# insert
server.port=xx
编写脚本
# 编辑脚本
vim deploy.sh
# 使用nohup指令 让程序基本退出也在运行
nohup java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar miaosha.jar
# 如果需要编写外部配置进行启动
nohup java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar miaosha.jar --spring.config.addition-location=/var/www/miaosha/application.properties
# 修改权限
chmod -R 777 *
# 使用脚本启动
./deploy.sh &
# 所有的输出追加到"nohup.out"
性能压测
安装JMeter
cd bin
# 启动 JMeter
sh jmeter
更改本地Hosts
sudo vim //etc/hosts
# insert
116.62.21.206 miaoshaserver
# 测试ping
ping miaoshaserver
JMeter 创建测试单元
- Thread Group 线程组
- HTTP Request
- View Results Tree 查看结果树
- Aggregate Report 聚合报告
# 找到对应进程的编号
ps -ef | grep java
# root 4482 4361 0 13:34 pts/1 00:00:00 grep --color=auto java
pstree -p 4482
# 查看对应的线程数量
pstree -p 4482 | wc -l
# 查看机器资源
top -H
压测5000线程 循环100次
配置 外部配置
# 在服务器root下
cd /var/www/miaosha
# 配置外部挂载文件
vim application.properties
server.tomcat.accept-count=1000
server.tomcat.max-connections=10000
server.tomcat.max-threads=500
server.tomcat.min-spare-threads=100
server.tomcat.keepAliveTimeOut=1800000
server.tomcat.maxKeepAliveRequests=100
-----------------------------------------
# 关闭原应用程序
kill xxx
# 重新启动
vim deploy.sh
./deploy.sh &
实战经验 在4核8g的ecs上最佳核心线程数是200 最大是800左右 超过了800性能不升级反降 折合到2核4g 则最佳核心线程数是100 最大不要超过400 否则cpu会浪费在线程调度的时间里
查看新启动的线程数
pstree -p 4629 | wc -l
# output: 118
# 开始压测后
pstree -p 4629 | wc -l
# output: 338
压测2000线程 循环100次