背景
在秒杀活动功能点上,后端服务并不是单机完成,有多个服务集群部署,解决大量请求,前端统一请求到ngixn,有nginx做代理转发,负载均衡,默认轮询策略。
秒杀主要使用技术
nginx + springboot + redis + lua + LinkedBlockingDeque + 锁 + mysql
初始化:定时任务 LTS 初始化数据到redis中
秒杀:lua 脚本 +redis 保证预减库存的原子性 以及快速响应用户
队列:秒杀成功的记录 在缓存中 以及队列中 进行异步处理 ,加锁保证DB数据库减库存以及秒杀成功日志下单成功 一致性
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 Settingsproxy_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
测重点:
后端服务为集群部署
是否能保证秒杀高并发请求
是否能避免超卖问题
队列是否处理秒杀成功记录
数据库是否生成订单
以及秒杀成功记录,减库存
秒杀大致流程图(只考虑了部分问题)

springboot 本地启动多个相同服务
工具:idea

