java 高并发操作实例-秒杀

java 高并发操作实例-秒杀

业务大致流程:

java 高并发操作实例-秒杀

系统时间获取

1. 原因

1.1 用户会大量刷新页面

1.2 CDN存放的是大量的静态页面,静态css,js资源

Tips:CDN的理解:内容分发网络

1.2.1 用来加速用户获取数据的系统上面

1.2.2 部署用户最近的网络节点上面-城域网,主干网络

1.2.3 命中CDN不需要访问后端服务器

1.2.4 互联网自己搭建或租用

  1. 获取系统时间的接口不要进行优化
  2. 秒杀地址接口的分析
  3. 1.表现
  4. 1.1 无法使用CDN的缓存
  5. 1.2 适合服务器端的缓存:redis等
  6. 1.3 一致性维护成本比较低

2.原因

2.1 cdn寄存在网络节点上面,然而秒杀接口的数据又是动态的,所以无法进行cdn的缓存

3.解决方法

java 高并发操作实例-秒杀

4.优弱势分析

4.1 mysql的弱势

4.1.1 java控制事务行为分析—串式循环,等待行锁的操作

4.2 网络延迟

4.3 GC的延迟

5.解决方案点

5.1 行级锁在commit之后释放

5.2 优化方向减少行级锁持有时间

5.3 具体方案

5.3.1 把客户端的逻辑放在mysql服务器,避免网络延迟和GC的影响

5.3.2 定制mysql的方案:update /auto_commit/ 需要修改mysql源码

5.3.3 使用存储过程:整个事务在mysql端进行完成

  1. 总结
  2. 6.1 前端控制:暴露接口,防按钮重复
  3. 6.2 动静态数据:cdn缓存,后端缓存
  4. 6.3 事务竞争优化:减少事务锁时间
java 高并发操作实例-秒杀


分享到:


相關文章: