1. 正常秒杀购买流程
2. 高并发发生在哪
红色部分表示可能发生高并发的点,绿色部分表示没有影响。
3.
CDN的理解:内容分发网络,加速用户获取数据的系统,部署在里用户最近的网络节点上,如果命中CDN则不用访问后端服务器,一般用作静态资源的缓存
4. 获取服务器时间不必优化,访问一次内存(Cacheline)大约10ns
5. 秒杀地址接口分析
无法使用CDN缓存,因为秒杀地址是不断变化的,但是适合服务器端缓存: Redis等,一致性维护成本低
6. 秒杀操作的优化分析
秒杀按钮的操作,所有的写操作包括对核心数据的访问无法使用CDN缓存,不能在缓存里面去减库存,所有用户去缓存减库存会产生不一致的问题,通过mysql的事务保持数据的一致性,一行数据竞争
7. 其他方案分析
8. 秒杀操作解决方案,mysql 事务操作+行级锁
事务:
Start Transaction
update 库存数量
insert 购买明细
Commit
java控制事务行为分析:
优化方向:行级锁在Commit之后释放,如何减少行级锁的持有时间就成了优化方向
优化思路:将客户端逻辑放到Mysql服务端,避免网络延迟和GC影响
9. 优化总结
前端控制:暴露接口,按钮防重复
动静数据分离:CDN缓存,后端缓存
事务竞争优化:减少事务锁时间