游玩攻略

12306积分是如何计算的,12306网如何查余票

优去网

2023-08-23 | 农家乐预订

分享


车票售卖特点,有一张车票卖出去就会影响到整个列车线的票数:北京开往广州的一趟列车有人买了石家庄到郑州的票,同时意味着出发点在北京-石家庄,目的地是郑州-广州的所有情况都会少一张票。1.最low的方法。每次查询车票时候都算一遍各个站点的票数,取最小值。假设一共3站,北京,石家庄,广州,共10个座位。有人要查询北京-广州的票:已经卖出了北京-石家庄9张票,石家庄-广州1张票,取中间车站的最小值10-9=1,剩一张。这样如果是20站查看两头车站的余票就要计算19次再找最小值。为什么说它low呢?因为票数不多但是查看余票的人太多!而且人都不傻,在没票时候还会刷新!所以来一次访问计算20次,10万人加上每个黄牛开10台电脑用来刷票,瞬间访问数达到100W,想要1秒内都得到响应需要1秒计算2000W次。2.稍微好一点的方法。票被买走时候把每个车站余票计算一下存储起来(Nosql,redis,memcache),查看余票时候直接返回这个结果。同样每秒100W访问,但是只有1000人在这秒买到了票,计算余票时候只需要1000*20=20W次,省下了1800W次的运算。3.更“实际”一点的方法。每隔1秒同步一次数据状态,而不是每次操作。假设12306每次查余票需要更新1k数据,一般单个网卡1G带宽,理论能同时支持12.8W的访问量,100W人都要看就至少有8个服务器在工作,方法2中,余票需要存放8份的话就需要1000*8=8000次更新。还要考虑各个地区访问的不均等性,电信,网通,铁通等线路,整体列车余票情况数据量也有几十K,所以1秒8000次更新也几百兆的流量了。但是如果每隔1秒同步当前的数据状态就好很多,这样变成了1*8=8次,更新数据库传输总量1M/s左右,差不多吧?