西西河

主题:【原创】身为码农,为12306说两句公道话 -- 代码狗

共:💬137 🌺892 🌵3 新:
全看分页树展 · 主题 跟帖
家园 锁的描述确实不对

文章基本是按科普的笔法来写的(例如用绑钱的竹竿比喻抢票插件),意在帮助非技术人员理解12306的复杂。但也有一些不恰当的描述,比如超卖的问题,其实不是两个线程同时拿到了锁。

是因为淘宝的秒杀,查库存在Tair(类似memcached)里,减库存在MySQL里。下单的程序要先更新MySQL,再更新Tair里的库存数(如果Tair保证不down机,就可以先更新Tair再更新DB了,甚至全部在Tair里),这两个操作不是原子的,也不能做成DB事务(因为超出了DB的范围,再考虑分布式DB中间层,读写分离的Proxy),所以在更新数据库和Tair缓存之间那一瞬间,就有可能超卖。

如果没有MySQL,全都在Tair里操作,是不会超卖的,也可保证较好的性能。如果全在MySQL里,MySQL自己的锁会保证事务的原子性,但性能就差不少了。12306应该是全在内存DB里读写库存的,应该不存在超卖的问题。

感谢批评指正,我也只是曾经在淘宝写过几天代码,技术不行,只是比同事更善于写科普文章一些。

通宝推:敲门,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河