主题:【原创】身为码农,为12306说两句公道话 -- 代码狗
文章基本是按科普的笔法来写的(例如用绑钱的竹竿比喻抢票插件),意在帮助非技术人员理解12306的复杂。但也有一些不恰当的描述,比如超卖的问题,其实不是两个线程同时拿到了锁。
是因为淘宝的秒杀,查库存在Tair(类似memcached)里,减库存在MySQL里。下单的程序要先更新MySQL,再更新Tair里的库存数(如果Tair保证不down机,就可以先更新Tair再更新DB了,甚至全部在Tair里),这两个操作不是原子的,也不能做成DB事务(因为超出了DB的范围,再考虑分布式DB中间层,读写分离的Proxy),所以在更新数据库和Tair缓存之间那一瞬间,就有可能超卖。
如果没有MySQL,全都在Tair里操作,是不会超卖的,也可保证较好的性能。如果全在MySQL里,MySQL自己的锁会保证事务的原子性,但性能就差不少了。12306应该是全在内存DB里读写库存的,应该不存在超卖的问题。
感谢批评指正,我也只是曾经在淘宝写过几天代码,技术不行,只是比同事更善于写科普文章一些。
- 相关回复 上下关系8
🙂乃不怕铁总被口水淹死吗? 2 土拨鼠yuanap 字124 2014-01-11 02:23:28
🙂这篇技术上值得商榷 12 吹西门的雪 字545 2014-01-10 07:55:39
🙂这个问题不错 3 whyshanghai 字475 2014-01-11 05:00:06
🙂锁的描述确实不对
🙂原来更外行 4 whyshanghai 字749 2014-01-11 22:02:42
🙂ssd硬盘就相当于是内存盘了 铁手 字0 2014-01-15 12:19:53
🙂铁。。。。手! 1 whyshanghai 字454 2014-01-16 00:09:30
🙂你错了,12306比你想象的要专业多了 4 吹西门的雪 字71 2014-01-12 07:52:47