从一个问题开始谈秒杀业务场景

这个首先就是从一个知乎提问开始的。有一天我看到这么一个提问: 然后,排名第一的答案就是一个静态页面,一个告知用户当前访问人数过多,请稍后再试。当然,这在很多人看来都是一个笑话。不过,对于一个之前做过秒杀业务的人来说。这真的是一段非常精妙的代码,某种角度上来说,这可以解决90%的秒杀场景。不过,用户体验太差,尤其是那些看到 console 有信息就会高潮的人来说。 所以,这边就先抛砖,来讲下我对秒杀业务的理解。 对于秒杀来说,它和传统的商城系统有着本质的区别: 低廉价格 大幅推广 瞬时售空 一般是定时上架 流量时间短、瞬时并发量高 对于技术人员来说,我们其实常常会把注意力着重的放在第五点上,就是对于流量的处理。 其实,在我的观点里,初期就将全部的精力放在第五点的优化上,这并不是... [阅读全文]

一次 MySQL 调优经历

最近有一个朋友遇到一个问题,就是突然之间网站的响应时间变成了秒级,而且 MySQL 占用了大量的 CPU 资源。具体如下图: CPU 资源占用: 响应时间: 可以看到这一个很明显的异常值。所以,我就开始排查。一切都是常规的思路,连上服务器,然后看看当前都是些什么任务。 当前任务: 可以看到,基本上所有的 query 都是在等待表锁。然后查了下这张表的表结构,还有 select 和 update 的执行情况。 表结构: SELECT 语句执行情况: 以 SELECT x FR... [阅读全文]

MySQL的一个坑

PS:其实也不是坑吧,主要是之前没有关注这个东西 首先看一下坑的由来: 昨天运营那边反馈过来一个问题,就是手机端商品存在重复.然后开始排查,手机端的商品总数和PC上是一至的,但是手机端存在重复的商品,就意味着有的商品没有显示.已开始以为是缓存问题,在更新select的时侯,阿润老师的排序crond更新了排名,导致问题,但是后来取消了缓存,发现问题还在. 最后问题定为在数据库上,我执行了如下的sql语句(也是常用的分页代码): SELECT * FROM `a`.`b` WHERE `ab` <= 11 AND `ac` >= 12 AND `status` = 0 AND     `showType` IN (0, 2) ORDER BY `s` DESC LIMIT 100,20; S... [阅读全文]

MySQL的锁分析

首先,我就先假设读者们都是了解数据库隔离级别的人,对所谓的RR,RC,RU,Serializable都是耳熟能详的。 如果不明白,可以看看这几篇文章,写的都很清楚,详细。 数据库隔离级别 乐观锁和悲观锁 但是,知道了这些概念,我们怎么去优化我们的SQL语句呢。其实还有一小段路。 比如说,现在有这么两个SQL语句: select * from t1 where id = 10; delete from t1 where id = 10 MySQL会采用什么样的方式进行加锁处理,加什么样的锁? 某种情况下,这个问题可以这么回答: 对于SQL1,MySQL不进行加锁处... [阅读全文]