优化思路
- 分流。再牛逼的机器也抵挡不住高级别的并发。
- 限流。毕竟秒杀商品有限,防刷的前提下没有绝对的公平,根据每个服务的负载能力,设定流量极限。
- 缓存。尽量不要让大量请求穿透到DB层,活动开始前商品信息可以推送至分布式缓存。
- 异步。分析并识别出可以异步处理的逻辑,比如日志,缩短系统响应时间。
- 主备。如果有条件做好主备容灾方案也是非常有必要的(参考某年锤子的活动被攻击)。
- 部署模型进行优化。最后,为了支撑更高的并发,追求更好的性能,可以对服务器的部署模型进行优化,部分请求走正常的秒杀流程,部分请求直接返回秒杀失败,缺点是开发部署时需要维护两套逻辑。
分层优化
- 前端优化。活动开始前生成静态商品页面推送缓存和CDN,静态文件(JS/CSS)请求推送至文件服务器和CDN。
- 网络优化。如果是全国用户,最好是BGP多线机房,减少网络延迟。
- 应用服务优化。Nginx最佳配置、Tomcat连接池优化、数据库配置优化、数据库连接池优化。
代码中可能用到的知识点
- 如何搭建SpringBoot微服务
- ThreadPoolExecutor线程池的使用
- ReentrantLock和Synchronized的使用场景
- 数据库锁机制(悲观锁、乐观锁)
- 分布式锁(RedissLock、Zookeeper)
- 进程内消息队列(LinkedBlockingQueue、ArrayBlockingQueue、ConcurrentLinkedQueue)
- 分布式消息队列(Redis、Kafka)
- AOP实现切面锁
- Disruptor高效队列
- 商品详情页静态化