秒杀功能

nginx 转发配置

背景

在秒杀活动功能点上,后端服务并不是单机完成,有多个服务集群部署,解决大量请求,前端统一请求到ngixn,有nginx做代理转发,负载均衡,默认轮询策略。

秒杀主要使用技术

nginx + springboot + redis + lua + LinkedBlockingDeque + 锁 + mysql

初始化:定时任务 LTS 初始化数据到redis中
秒杀:lua 脚本 +redis 保证预减库存的原子性 以及快速响应用户
队列:秒杀成功的记录 在缓存中 以及队列中 进行异步处理 ,加锁保证DB数据库减库存以及秒杀成功日志下单成功 一致性

详见代码:https://gitee.com/Sir-yuChen/backstage_ant.git

nginx配置文件

#简单配置

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}



http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
	##
    # Gzip 压缩配置
    ##
    #是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。
     #gzip  on;
	#为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。
	 #gzip_disable "msie6";
	 
	# 命名不要用下划线 400异常
    upstream backstage-ant {
		#weight=3 权重	max_fails=5	重试次数	fail_timeout=10s 超时时间
		server	localhost:8083; # 后端本地服务及端口
		server	localhost:8082;
		server	localhost:8080;
    }

    server {
        listen       8088;
        server_name  backstage_ant.com;
		
		location / {
			# 转发的地址 与upstream 的命名一致
		    proxy_pass http://backstage-ant;
			 #Proxy Settings
			proxy_http_version 1.1;
		    proxy_set_header X-Client-IP $remote_addr;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection "upgrade";
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 10m; 
            client_body_buffer_size 128k; 
            proxy_connect_timeout 90; 
            proxy_send_timeout 90; 
            proxy_read_timeout 90; 
            proxy_buffer_size 4k; 
            proxy_buffers 4 32k; 
            proxy_busy_buffers_size 64k; 
            proxy_temp_file_write_size 64k;
			
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

秒杀功能压测

压测工具:jmeter
测重点:

后端服务为集群部署

是否能保证秒杀高并发请求

是否能避免超卖问题

队列是否处理秒杀成功记录

数据库是否生成订单

以及秒杀成功记录,减库存

秒杀大致流程图(只考虑了部分问题)

image-20220221161413133

springboot 本地启动多个相同服务

工具:idea
image-20220221161843251

posted @ 2022-02-21 16:23  Mr*宇晨  阅读(138)  评论(1编辑  收藏  举报