12306 抢票的糟糕体验

又到了一年一度的 12306 抢票时,和秒杀,抢购一样,这种事往往给人的体验非常差,去年经历过上海四月的应该深有感触。
我此前论述过随着网络带宽增加的速度超过 buffer 容量增加的速度,端到端拥塞控制将越来越不起作用,因为一个拥塞周期相对于反应时间来说,太短了,换句话说,来不及反应。抢购体验差也是这个原因。
排队时间,服务时间,从获取信息至排队的时间,这三者若在一个量级,体验就不会差,比如老年人早市上抢购新鲜打折鸡蛋。
时间是一个杠杆,被撬动的是公平,也就是信息差。
在前互联网时代,人们步行,乘车到达火车站售票大厅,排队,咨询售票员出票,这个时间在同一数量级,那些彻夜排队的人也受制于人的生理极限,最多不过比平均时间多几倍。换句话说,时间被较粗的粒度平滑了。
在互联网时代,排队时间和一个事务处理均 ms 记,而人的操作时间在尺度上要大 1000 倍,稍微犹豫半秒就会错过 上千次请求,与此相对,你去售票大厅的路上上趟厕所蹲半小时对结果也不会有太大影响。
为了尽量保留一点公平,分批放票是最简单的方法,但在每一次的放票点,依然存在抢购时间信息差问题。
信息差不仅被时间放大,还会被时间缩小,所谓全局同步。
有 100 件货,100 个人每人限购 1 件,在抢购的场景下,时间完全校准,100 人同时抢,第一次只有 1 人成功,99 人超时沮丧,剩余 99 人继续,98 人沮丧,如此类推,平均要沮丧 50 次才能抢到,但如果把超时预期放长一些,体验就会好很多。
类似 12306 购票这种系统,一次事务需要多次操作,在首次操作提交之前就把票池锁住非常不现实,这样排队时延将快速上升到几乎无限,而人们对网络的预期反应不会超过 10 秒,超时后重试往往是拥塞加剧的根源。
和直觉相反,票量和购票人数之比并没有小到很夸张,但上述例子表明,给人的感觉就好像只有 100 张票,而买票的人超过几百万。问题不在人数,也不在票量,而在购票系统。如果差距太大,铁路部门要做的是加车,而不是优化购票系统。
再次反转,由于我们的无座票和座票卖一个价格,这就降低了他们加车的动机,毕竟加车要费油费电,但凡无座票打个折,问题就解决了,因为他们总能算出一个点,加车的全价票收益减去成本达到最大,他们总会加车,从而每人回家有车坐。
火车票并不是稀缺资源,但购票系统给了人稀缺的感觉,火车票数量本就根据潜在购票人数决定,就像带宽也不是稀缺资源,但 capacity-search 营造了稀缺的氛围,同样,道路也不稀缺,只是突发流量造成拥堵,多等等,总会到家的。
对有限资源的突发需求量,要么等,要么扩容。我强调过,网络加速的唯一方案就是升级硬件带宽,而不是靠什么算法,购票也一样,加车才有票,但往往到了最后,都会加车的,很少有人因为买不到票而无法出行。

浙江温州皮鞋湿,下雨进水不会胖。

你可能感兴趣的:(网络协议)