论坛首页 Java企业应用论坛

讨论火车票订购网站架构

浏览 56154 次
精华帖 (6) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (5)
作者 正文
   发表时间:2012-01-05   最后修改:2012-01-05
想了想,如果是我做,我的方案是:摇号。
在开卖的前几天全部选好,提交申请,提前截止公布名单和序号,当然一个身份证只能排一个号,必须本人取票。
开卖当天按照某个随机数和公开原则算号,比如以海外股市的某个值为基准啊之类的。
算上号数的人将接到电话或短信通知付款,如果一段时间内不能支付,这张票将交给下一优先号数的人。
想依靠不稳定的网络来抢夺是浮云。
0 请登录后投票
   发表时间:2012-01-05  
jiuyuehe 写道
最主要的还是负载均衡吧,我觉得可以将数据分布到各个省的数据中心去,然后各做各的负载均衡!当然估计还是承受不了的,所以还需设置一个队列系统,让用户排队。最后限制在线时长!!!而不是一直说用户忙,用户多之类的!!


首先,你说的客人春运期间绝大多数都是买的跨省区的车票,真按省区分布数据,光余票的同步你系统就要死了
0 请登录后投票
   发表时间:2012-01-05  
所谓码农 写道
按10亿人口(当然网络购票绝对不会有10亿人)、售票高峰15天,每天12小时出票来计算,若每次都能购票成功,则每秒的理论并发为1543个(事实上1543的并发完全不需要多余的负载)。但若出现阻塞的情况,就会导致用户不停的刷新,从而导致系统更加繁忙。
要解决这个问题,可以从几个方面下手:
1.使用异步排队的方式(或者AJAX提交,提交完后把页面给锁了,直到服务器响应),当购票请求提交后提示用户“您正在排队,您前面有XXXX位。。”,当排队成功后,一天之内付款,购票成功!这样就可以避免购票者不断提交造成的压力。
2.提高系统并发,使用nginx作为HTTP服务器,据说nginx的并发高达3万,这个我没有具体测试,当然这个也取决于业务逻辑的复杂度。
3.缓存所有车票信息,提高查询的响应时间


你这个高峰期的计算逻辑本身就是错的
首先车票12天预售期是在15:00开卖,结果就是你这所谓的12小时出票的访问压力会基本上全部集中在15:00的前5分钟,后最多30分钟以内,特别是在15:00的前后5分钟,真按你的1543个并发去设计系统,那就等死去吧
3 请登录后投票
   发表时间:2012-01-05  
我觉得这个问题 淘宝的架构师比较有发言权
1 请登录后投票
   发表时间:2012-01-05  
aws 写道
所谓码农 写道
按10亿人口(当然网络购票绝对不会有10亿人)、售票高峰15天,每天12小时出票来计算,若每次都能购票成功,则每秒的理论并发为1543个(事实上1543的并发完全不需要多余的负载)。但若出现阻塞的情况,就会导致用户不停的刷新,从而导致系统更加繁忙。
要解决这个问题,可以从几个方面下手:
1.使用异步排队的方式(或者AJAX提交,提交完后把页面给锁了,直到服务器响应),当购票请求提交后提示用户“您正在排队,您前面有XXXX位。。”,当排队成功后,一天之内付款,购票成功!这样就可以避免购票者不断提交造成的压力。
2.提高系统并发,使用nginx作为HTTP服务器,据说nginx的并发高达3万,这个我没有具体测试,当然这个也取决于业务逻辑的复杂度。
3.缓存所有车票信息,提高查询的响应时间


你这个高峰期的计算逻辑本身就是错的
首先车票12天预售期是在15:00开卖,结果就是你这所谓的12小时出票的访问压力会基本上全部集中在15:00的前5分钟,后最多30分钟以内,特别是在15:00的前后5分钟,真按你的1543个并发去设计系统,那就等死去吧

首先买票的人绝对低于10亿,其次我只是提出一下解决问题的思路,不需要在数据上纠结,1543是理论值,实际上还会有查询、购票者还会不停的刷新,这些都是并发。
另外15:00是可以控制的,在售票方式上应尽量使其均衡,按地区分时段等
0 请登录后投票
   发表时间:2012-01-05  

预约,抽签。将实时刷票,改成预约然后8小时内等短信通知。

0 请登录后投票
   发表时间:2012-01-05  
要不,就凭(还是)一台sybase扛,想都别想~~
0 请登录后投票
   发表时间:2012-01-05  
paulwong 写道
所谓码农 写道
按10亿人口(当然网络购票绝对不会有10亿人)、售票高峰15天,每天12小时出票来计算,若每次都能购票成功,则每秒的理论并发为1543个(事实上1543的并发完全不需要多余的负载)。但若出现阻塞的情况,就会导致用户不停的刷新,从而导致系统更加繁忙。
要解决这个问题,可以从几个方面下手:
1.使用异步排队的方式(或者AJAX提交,提交完后把页面给锁了,直到服务器响应),当购票请求提交后提示用户“您正在排队,您前面有XXXX位。。”,当排队成功后,一天之内付款,购票成功!这样就可以避免购票者不断提交造成的压力。
2.提高系统并发,使用nginx作为HTTP服务器,据说nginx的并发高达3万,这个我没有具体测试,当然这个也取决于业务逻辑的复杂度。
3.缓存所有车票信息,提高查询的响应时间

那得多少台服务器?


不是所有车票,是“车次+票数”
0 请登录后投票
   发表时间:2012-01-05  
瞬间的访问量太大了
没有很好的解决方案
用队列的方式肯定不准确
只有改变卖票的策略.....
不过改变策略的话 估计群众也不答应了......
必须还是实时的,只有多多增加铁路的线路
0 请登录后投票
   发表时间:2012-01-05  
finallyException 写道
paulwong 写道
所谓码农 写道
按10亿人口(当然网络购票绝对不会有10亿人)、售票高峰15天,每天12小时出票来计算,若每次都能购票成功,则每秒的理论并发为1543个(事实上1543的并发完全不需要多余的负载)。但若出现阻塞的情况,就会导致用户不停的刷新,从而导致系统更加繁忙。
要解决这个问题,可以从几个方面下手:
1.使用异步排队的方式(或者AJAX提交,提交完后把页面给锁了,直到服务器响应),当购票请求提交后提示用户“您正在排队,您前面有XXXX位。。”,当排队成功后,一天之内付款,购票成功!这样就可以避免购票者不断提交造成的压力。
2.提高系统并发,使用nginx作为HTTP服务器,据说nginx的并发高达3万,这个我没有具体测试,当然这个也取决于业务逻辑的复杂度。
3.缓存所有车票信息,提高查询的响应时间

那得多少台服务器?

全国这么多人网络买票,每人扣1块钱出来也够他买服务器了。

这套系统别的没什么,就是缺排队系统。

PS:很明显,电话订票更靠谱。


上个F5多省心。不过上完F5估计某些人会贪污的更多了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics