论坛首页 Java企业应用论坛

讨论火车票订购网站架构

浏览 56157 次
精华帖 (6) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (5)
作者 正文
   发表时间:2012-01-05  
san皮 写道
hu437 写道
aws 写道
廖明华 写道
   采用内存数据库,将火车票的信息,采用文件存储,系统启动加载初始化文件,也可以通过web实现,将其最新的数据提交,按照高峰期每一天的最大数据量,提交到内存数据库(这个可以扩大,可以存放1亿等数据),每隔一段时间对内存数据进行过滤,进行异步存储,将已经卖出的票得信息进行数据迁移,同时在提交一部分新的火车票信息(可以考虑火车票预警信息方式)。在满足数据更新的同时,还能够保证在线用户数据的需求。购票者在进行购票的同时,对内存数据库的操作,速度会非常的快,每秒7W次并发应该是没有任何问题的,这个已经测试过。
   尽量在数据交互的中间环节,采用队列方式,可以缓存部分数据,采用异步交互的方式,可以缓解数据并发量大的问题。个人意见!


不行的,火车票不是商品,单纯论个数的
简单的说比如
仅有一张从上海到北京的票,如果有人买了从上海到南京,那么接下来就只剩下从南京到北京的可以买了
而铁路的线路图,算可以出的票和余票比这个例子要复杂至少几百个维度
而且这些都是实时的,还有各种事务和事务补偿问题
对数据的读和写的操作比你这个设想要复杂的多


根据我坐火车的经历貌似没有"如果有人买了从上海到南京,那么接下来就只剩下从南京到北京的可以买了" 这个情况

有人在南京下了,那这个位置就空了,在路上的谁抢到谁坐,火车站是不会再卖的了

我就有过经历,有次坐火车我的座就是刚有人下车腾出来的。
也碰到过好多拿着票对号找座的,那些座也好多是别人刚下车。



这个是算法问题
0 请登录后投票
   发表时间:2012-01-05  
zeeeitch 写道
mamingyaoqian 写道
zeeeitch 写道
所谓码农 写道
.使用异步排队的方式(或者AJAX提交,提交完后把页面给锁了,直到服务器响应),当购票请求提交后提示用户“您正在排队,您前面有XXXX位。。”



这个很好做吗,你想过没有?
假设10万人被堵在外面,在排队,每个人刷总数,数据库条件:“我前面”的,你知道10万人,每秒点击一次要多少台服务器才能扛住?

每秒10万次点击,查询我前面有xxxx位,每台服务器1000次/秒,就要100台了

每个人5秒点击一次,好2万次/秒,20台服务器


铁道部有钱的,兄弟。现在网上订票手续费5元,代售点买票5元,其他不说,光赚代理费都要上亿把。哎。。


讲的是设计,光有钱上服务器就行了?服务器多了就省事了?
服务器间协调就复杂了

有的人一讲设计就信口开河了

这个我要解释下,技术是必须的,我肯定不是讲光上服务器就行了。但是,服务器多了可以减轻技术压力,这个是肯定的。据说12306连集群都没舍得做,即使技术再牛硬件跟不上也搞不起来啊。

“服务器多了就省事了?”服务器间协调就复杂了” 这个我有点不认同,说的对就听听,说错了,多批评。我认为设计好的前提下,多增加服务器并不会增加复杂度。很简单你把系统设计成蜘蛛网的话就是服务器越多就越复杂,但是你要是设计成树型的也会复杂吗?比如现在一棵树(12306)系统特别慢,压力特别大,如果我复制2个系统出来,多种2棵树。
构成3系统的平台。包含分别只预售G,D,普通车系统,改动上只要增加一个统一的门户,多3个选择。协调上3个系统分别提供原来对应一种的服务。这样做会复杂吗? 无非多种了2棵树,多的是服务器代码架构上都不会改变什么。当然这样就需要原来3倍的服务器,不过承载能力*3不过分把。  欢迎点评,或许又是信口开合,但是我觉得这样做可以解决很多问题。


嘿嘿,还是那句话,系统设计,技术都很重要,我从来不否认。^-^
2 请登录后投票
   发表时间:2012-01-05   最后修改:2012-01-05
当然这么大的系统,肯定需要服务器群了。可能跑题了,前面是在说“排队页”这个东西,不要随便就撂下,10万人排队也是不好做的

谁能设计设计,多上服务器?  10万人一直在查询"我前面有多少人"。

首先我们得标识每个浏览器
1 不登录:保存sessionid或者其他能标识浏览器的东西
2 登录,那就用用户ID表示吧

这就是数据端,不管后台用DB还是内存,这个就不能分到多个服务器了,否则查询起来那就又要协调了。

看看查询负荷吧,
1 没有缓存的话,select count(*) from ... where time < mytime and online='t';

这个也算不小了

2 做了缓存,缓存多久更新,如何更新,缓存数据如何存储等等



看看如何确定人还在线吧,超时判断,多长时间超时;心跳?本来就是为了减少负荷,又引入心跳,这个负担不起啊


人不在线了,update xxx set online='f' where userid='...';

好吧这一下有Write了,负荷一下就上来了
0 请登录后投票
   发表时间:2012-01-05   最后修改:2012-01-05
yszy 写道
有高并发架构或者调优经验再说话,连个tomcat都用不好,还乱叫!tomcat并非1000杠杠的!人不行就不要怪路不平!

tomcat jboss apache,不做缓存,其实都差不多,纯页面响应也就由CPU来扛了。
做过几个千人系统,简单的一两条insert update的页面,双核服务器100次/秒,cpu就70%了,不敢上了。当然这100次是服务器受到的连续点击数,相当于500-1000人在线了
0 请登录后投票
   发表时间:2012-01-05  
查询不需要完全实时
查询和订票可以分开
可以按线路切分
进入订票流程后方考虑一致性
保证支付的有效性
......


不知道硬体支撑如何,不过使用友好度可以提升

0 请登录后投票
   发表时间:2012-01-05  
放在天津国家级计算机中心天河一号服务器上吧!
0 请登录后投票
   发表时间:2012-01-05  
这种架构还用讨论?
    支付宝去找个架构师 或者 去聚划算挖个 架构师过来。
    轻松应付了。
0 请登录后投票
   发表时间:2012-01-05  
hipx 写道
啥架构不架构的,民航的订票是跑在单台过亿的大型机上,春运时候还是非常紧张,铁路起码比民航高一个数量级,这么短时间根本不可能构建出可靠的系统,系统五年能完善算是有效率,看评论大家都喜欢喷啊


深有同感
0 请登录后投票
   发表时间:2012-01-05  
Mirima 写道
查询不需要完全实时
查询和订票可以分开
可以按线路切分
进入订票流程后方考虑一致性
保证支付的有效性
......


不知道硬体支撑如何,不过使用友好度可以提升



就第一条,你说的就已经是扯淡了
2 请登录后投票
   发表时间:2012-01-05  
jokiye 写道
hipx 写道
啥架构不架构的,民航的订票是跑在单台过亿的大型机上,春运时候还是非常紧张,铁路起码比民航高一个数量级,这么短时间根本不可能构建出可靠的系统,系统五年能完善算是有效率,看评论大家都喜欢喷啊


深有同感


应该上超级计算机,股票交易这个数量级应该差不多了吧,没见过有什么问题
2 请登录后投票
论坛首页 Java企业应用版

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