也谈谈12306网站面对大压力下的技术改进方案

今天(1月15)上12306订火车票,照说这个日子才买票的人应该不是很多了,登录很顺利,1次就OK,可是选好票后提交订单时总是提示“当前提交订单的人太多”之类的信息,尝试了几十次都如此,只好作罢。前几天 在CSDN看过一些好友对12306网站的改进建议,这时想起来,突然领悟到12306之所以陷入如此恶性循环的地步,关键在于不应该把订票结果按同步的方式来解决,而应该以异步队列的方式来实现,请看看我分析的对不对。

 

先看一个假设:铁道部的买票订票系统核心功能应该是启用多年了,而网络订票只能算一个外围子系统,网络订票提交的订单要获得结果只能调用核心功能的API来实现。

 

有了这个假设,如果还采用实时同步的方式让网络订票系统不加限制的去调用API,那只能被堵死,为了保障核心功能的正常运行,只能把超过并发承受力的请求以“当前提交订单的人太多”加以拒绝了,这或许就是12306的现状。

 

这个现状显然很糟糕,订票订单越是提交不成功,大家越拼命提交,造成恶性循环。

 

获得订票结果这一环节如果采用异步队列的方式呢?我觉得是可行的。按每个火车发站建立1-n个队列,网络订票首先提交到相应的队列,成功进入队列就算提交订单成功,队列处理后台按顺序把订单数据以API的方式去获得订票结果,把这一结果再写入订单数据,同时以短信的方式通知订票者,订票者也可以通过查询获得结果,订到票了再在规定时限内进行支付。为了缓解支付压力,还可以搞个铁付宝,先闲暇时充值,高峰时从铁付宝余额进行支付。

 

这一异步队列方式好处多多:1.免去订票者徒劳的不断提交,提交订单后耐心等待即可;2.按提交订单时间先后顺序排队增加公平性;3.可以按火车发站进行分布式部署,缓解压力。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值