为了账号安全,请及时绑定邮箱和手机立即绑定
  • CDN:Content Delivery Network,即内容分发网络。放置一些静态化资源,或者可以将动态数据分离,比如秒杀详情页,做成HTML放在cdn上,动态数据可以通过ajax请求后台获取。一些js依赖直接用公网的CDN,自己开发的一些页面也做静态化处理推送到CDN。用户在CDN获取到的数据不需要再访问我们的服务器,动静态分离可以降低服务器请求量。

    WebServer一般不直接对外访问,之前都会放置Nginx,Nginx是一个集群化的,部署在多个服务器上,用来做我们的Http服务器,响应客户请求。同时他还会为后端的Tomcat,Jetty这些servlet容器来做反向代理,以达到负载均衡的效果。

    Redis:做服务器端的缓存,利用Redis提供的API来达到热点数据的快速存取的过程。加速后台获取数据,减少数据库的请求量。

    MySQL:借助MySQL的事务来达到秒杀的数据的一致性和完整性。

    查看全部
    0 采集 收起 来源:系统部署架构

    2019-09-08

  • 11111

    查看全部
    0 采集 收起 来源:系统部署架构

    2019-09-08

  • Mark 调试代码

    查看全部
  • 更新库存的是热点操作,会出现行级锁,而插入购买记录的行为没有行级锁。可以先插入购买明细,可以避免因重复秒杀带来的不必要的更新库存操作,减少不必要的行级锁的占用。然后再去更新库存。代码中,根据热点商品竞争的结果,来决定下一步是rollback还是commit,降低了网络延迟和GC影响一半的时间

    插入操作放在前面,插入操作就是把秒杀单,用户id,电话组成一个组件,这个组件冲突的概率并不是很高,因为秒杀单在前头,还有用户的电话,组成一个唯一键,这个时候的网络延迟和GC是可以并行的,这个时候再去拿update减库存的rowLocl行级锁

    rowLock:  行级锁,锁的粒度最小,并发度最高,加锁慢

    最终目的:降低MySQL roollock的持有时间

    查看全部
  • 回顾事务执行

    秒杀操作通过mysql的事务来完成。


    查看全部
  • 详情页:做静态化放到CDN中,各个公司CDN不同,不细讲

    系统时间部分:new了一个对象,很简单很快,不用优化

    地址暴露接口(高并发点): 不方便做成静态放到CDN中,需要放到服务器端,通过逻辑去控制;但是该接口调用频繁,不希望放到数据库中-->使用redis优化.

    执行秒杀操作:高并发点

    查看全部
  • 优化:

    前端: 动静态数据做分离,减少请求与响应时间;按钮防重复,防止用户发送无效的重复请求,因为秒杀活动一般都会有购买数量的限制,敲的次数再多,最后还是要查看是否已购。影响了效率,可有前端代为处理并优化

    后端:使用CDN换存重要的静态资源等;在后端对活动结束时间、商品选购时间、业务的相关逻辑要求都放在后端代码中,并调用缓存来进行暂存,已减少对DB的直接操作,提高效率


        1,前端控制触发次数,比如限制控制按钮的触发

        2,使用CDN和缓存机制达到动静分离

        3,减少行级锁和GC的时间,将食物控制在mysql中进行,比如存储过程


    查看全部
  • 方法一:成本高,大公司使用

    方法二:放到服务器端完成,MySQL执行sql效率非常高

    查看全部
  • 99999

    查看全部
  • 异地机房延迟分析

    实际在20ms左右

    查看全部
  • 同城机房延迟分析

    查看全部
  • 优化方向是:

    查看全部
  • 不是MySQL慢,也不是Java慢。而是Java和数据库通讯之间会有网络延迟/GC,这些时间也要加在事务的执行周期里面。而同一行的事务是串性化的。

    第一个用户执行一次商品购买时,对DB的update减库存操作不是执行完就结束,后续还涉及到GC内存满了,等待自动回收过程中的网络响应的延迟问题;

    除此之外,用户的每一次购买操作都是一个具体的事务,其中还涉及到了用户个人的购买明细,可理解为淘宝的已购买这一项,而这又是一个insert 的操作,执行完后又或许可能再一次出现GC进行内存的清理而导致延迟,直到反应过来后,继续执行后续的事务提交commit或者失败后的回滚rollback

    而这时另一个用户的update 操作已经开始很久了超过了 4W分之一秒的理想时间,所以,实际秒杀项目中,需要对每一个用户的update时间,即行级锁的时间进行优化,因为,下一个用户还在等待,他后面或许还有一个它也在等待....哈士奇瞪着眼等着呢


    查看全部
  • 串行化操作

    查看全部
  • 压力测试下,一条update 可以 达到 4W 的 QPS ,等同于一件商品能在一秒内被销售掉 4W 件,这应该是理想值吧!

    那么,对于实际执行中的低效是什么原因?这才是并发中要优化的重点吧!


    查看全部

举报

0/150
提交
取消
课程须知
《Java高并发秒杀API》是系列课程,共四门课,分别为业务分析和DAO层,Service层,Web层和高并发优化。本门课程是第二门课程,学习前需要了解如下知识: 1、精通JavaWeb基础 2、熟悉SpringMVC、Spring和MyBatis框架 3、了解事务和存储过程的概念
老师告诉你能学到什么?
1、掌握秒杀业务 2、能够进行SpringMVC+Spring+MyBatis的整合开发 3、能够对秒杀业务的瓶颈有所了解 4、能够实现对秒杀业务的优化

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!