系统的水平扩展

系统的水平扩展

系统的水平扩展

秒杀升级

一、云端部署

1、配置jdk

vim ~/.bash_profile
# -----------------
JAVA_HOME=//usr/java/jdk1.8.0_65
PATH=$PATH:$JAVA_HOME/bin
# -----------------
source ~/.bash_profile

2、安装MySQL

# mysql 数据库的安装 没使用
yum install mysql* -y
yum install mariadb-server -y
systemctl start mariadb.service
yum -y install MariaDB-server MariaDB-client
systemctl start mariadb
systemctl enable mariadb
mysqladmin -u root password root

3、数据库备份

scp C:\Users\888\Desktop\seckillbetter.sql root@8.129.160.65://tmp/
mysql -uroot -proot < //tmp/seckillbetter.sql

4、maven 打包上传到阿里云

mvn clean package
scp seckill-0.0.1-SNAPSHOT.jar root@8.129.160.65:/tmp/

5、创建一个目录存jar文件

mkdir /var/www/seckill
mv /tmp/seckill-0.0.1-SNAPSHOT.jar /var/www/seckll
chmod -R 777 *

6、用外挂配置文件

java -jar seckill-0.0.1-SNAPSHOT.jar --spring.config.addition-location=/var/www/seckill/application.properties 

7、编写启动脚本

vim deploy.sh
nohup java -Xms400m -Xmx400m -XX:NewSize=200m -XX:MaxNewSize=200m -jar seckill-0.0.1-SNAPSHOT.jar --spring.config.addition-location=/var/www/seckill/application.properties 
chmod -R 777 *
./deploy.sh &

二、jmeter性能压测

1、需要的条件

  • 线程组
  • Http请求
  • 查看结果树
  • 聚合报告
# 查看该进程有多少线程
pstree -p 5240
# 查看多少数量
pstree -p 5240 | wc -l

2、服务器调优

# 四核八G properties
server.tomcat.accept-count=1000
server.tomcat.max-threads=800
server.tomcat.min-spare-threads=100
// config.java
@Component
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {

    @Override
    public void customize(ConfigurableWebServerFactory factory) {
        // 使用对应工厂定制化tomcat
        ((TomcatServletWebServerFactory)factory).addConnectorCustomizers(connector -> {
            Http11NioProtocol protocolHandler = (Http11NioProtocol) connector.getProtocolHandler();
            // 定制化参数
            // 定制化keepalivetimeout,设置30秒没有请求则服务器自动断开 keepalive
            protocolHandler.setKeepAliveTimeout(30000);
            // 当客户端发送超过10000个请求则自动断开keepalive连接
            protocolHandler.setMaxKeepAliveRequests(1000);
        });
    }
}

线程数量:4核 cpu 8G 内存单进程调度线程数 800 - 1000 以上后即花费巨大的时间在 cpu 调度上

等待队列长度:队列做缓冲池用,但也不能无限长,消耗内存,出队入队也消耗 cpu

3、MySQL的QPS问题

  • 主键查询:千万级数据= 1 ~ 10ms
  • 唯一索引查询:千万级别数据 = 10 ~ 100ms
  • 非唯一索引查询:千万级别数据 = 100 ~ 1000ms
  • 无索引:百万条数据 = 1000毫秒 +

4、MySQL的TPS问题

  • 非插入更新删除操作:同查询
  • 插入操作:1w ~ 10w TPS (依赖配置优化)
上一篇:springbot单机秒杀,锁与事务之间的大坑


下一篇:我用这个抢到了茅台