栏目六:别再,吐槽了,12306,网站,接近,技巧,极限

我曾在淘宝写过一段时间代码,2012年在一家百强民企做电商副总,当时在极为艰苦的条件下带队开发了一个B2C网站,走支付宝和银联支付通道,年营业额千万级(当然实在太少了,我只是说这个网站投进了实际的运营)。

也就在那个时候,我对“12306”嗤之以鼻,感到他们做得太烂了,以为自己能带队花几百万元用半年时间做个好的出来。于是我狂妄地想做一个开源的订票系统给他们。我花了一个星期时间思考建立数据模型,思考到库存这一步的时候,我才发明,“12306”的库存复杂性比淘宝、京东高很多倍,运算量也大很多倍。传统的分布式数据库、缓存、负载均衡技巧并不能恰好满足“12306”的需求。

淘宝技巧的确比“12306”强大很多倍,淘宝现在的系统也是花了10倍于“12306”的钱、时间和人力才做起来的。根本原因还是铁路运力不能满足春运需求,淘宝也解决不了这个标题。

“12306”这一年来进步非常大。从前端动画验证码、分时段抢票,到后端往小型机、虚拟化、内存数据库的运用。可以说,这是中国官方部分做得最强大的网站(电商系统)。至于“12306”一期工程3个亿(含硬件)贵不贵我不评价,我只供给一个数字供参考:百度一年的研发用度(不含硬件)是10亿元,这来自百度财报。3亿元看起来好大一个数字,真用到超大型的电商系统、搜索引擎系统里面,实在也不算天文数字了。

你不知道的“秒杀”

为什么秒杀压力大,为什么“12306”的动态库存很复杂?

先说秒杀。

2013年12月25日前后,天猫搞了一个圣诞季积分兑换活动,持续几天。25日上午10时12分,放出了15000个天猫魔盒,从成交记载上看,19秒内全部抢完。

实际上,我也参加秒杀了,那天的标题特别简单——请输进×××汉字的拼音首字母,我5秒内答题完毕并提交订单,结果系统告诉我排队的人太多,挤不进往,并提示14秒后重试。人太多就是由于标题太简单了,门槛越低,5秒内挤进往的人也越多,假如标题换成“2克浓度为3%的U235在大亚湾核电站能发多少度电”,5分钟之内都不会有1万5千人跟我竞争。

我想,14秒以后哪还有我的事呀,于是重新答题秒杀,结果出现了服务器错误的页面。反复刷新几次,秒杀就已经结束了。

淘宝是什么技巧水平呢,淘宝有至少4000名技巧职员,至少4万台服务器(这是两年前的公然数据)。2013年11月11日成交额351亿元,2012年全年景交额超过1万亿元。

淘宝拥有各种自主研发团队:服务器、交换机;把持系统、Web服务器、Java语言虚拟机、数据库、负载均衡器、Java运行容器。淘宝还有数不清的开源项目和中间件,如高性能Java通讯中间件HSF、分布式数据库中间件TDDL、异步消息系统notify等等。

以淘宝这样的技巧水平,都还不能做到秒杀时让每个用户都没有拥挤感,为什么?

一是要尊重物理原理,一台服务器一秒钟能承受的计算量是有极限的,任你怎么优化,采用多高效的算法和编程语言,都突破不了某个极限,比喻说汽车发动机驱动的F1赛车至今也不能突破400公里的时速。

二是要考虑经济效益,“十一”黄金周的时候,北京主城区到八达岭长城的路堵得严严实实,但不能由于黄金周的高峰,就把这段路修成长安街那样10车道的高速公路,否则花费天文数字(“12306”那3个亿大概只够修1-3公里)修了一段路,平时晒谷子?

淘宝目前的硬件和带宽数目,已经超出日常运营的需求了,目的就是留出相当大的余量给大促销。

再说动态库存。

淘宝秒杀天猫魔盒的时候,只有一个商品(SKU),它的库存是15000个。有一个人秒杀到了,库存就减1,19秒卖完的,每秒要成功产生789个订单。想象一下,你在广场上卖火车票,一秒钟内有8万人举着钱对你喊:卖给我!

很多人都知道,比秒小的时间单位还有毫秒、皮秒、飞秒。但交易系统登记一个交易可不像电子绕着原子核跑一圈那么简单,它要做这些事:检查是否恶意访问、取到系统时间、取到顾客默认收货地址、核对顾客秒杀资格、天生订单号、把顾客ID系统时间订单号收货地址写进订单系统、扣除顾客天猫积分、商品库存减1、给顾客打标记(每人只能秒一个)等等。

每件事都要花费毫秒级别的时间,这些把持加起来的时间可能是接近1秒级别的,但由于淘宝的服务器比较强悍,而且采用了分布式和集群技巧,结果比1秒理想一点。但即使有1万台服务器,也不能把这个时间稀释成万分之一秒,由于,商品只有一种,它有15000个库存,对应的数据库记载只有一行,所有的交易请求都要到这里来处理。

能不能把这15000个拆分成5000个商品并分配到5000台服务器上呢?那样不就可以5000台服务器同时处理了吗?

上一篇:窃听技术进化史:从收音机到激光和网络

下一篇:AMD牵手宝莱坞 在印度电影节上颁布VR新技巧