如果我是铁道部架构师,我会

大东哥 发布于 2012/01/08 13:58
阅读 3K+
收藏 6

道先说,我认为,这个业务需求是无解的,根本就是票少人多,而开通网上订票,把这一问题更加放大了。

如果把问题简化成:1张票10000人抢。那必然有9999人会骂铁道部垃圾。之所以不能用淘宝交易,秒杀什么的方案类比,是因为:

秒杀的并发不在一级别,响应慢点也行,抢不到也不会骂淘宝,因为说好了是秒杀,可以在到达数据库这一层用各种手段排除掉很多人,数据库的压力并不大,并且商品的数量也不严格限制,多抢几个,大不了多送几件。

火车票不行!!

把问题简化成1张票10000人抢,只有一人成功,就决定了,分布式,nosql什么的“云”,缓存什么的都是浮云,这些外围搞得再好,并发再高,到最后,也只有一个人订到票,那必然还会9999人骂铁道部。

个人认为其实铁道部做成这样,抛开页面好不好看什么的,其实真不错了,至少保证了一些勤劳的网民利益。

这几天公司也有人网上订票,我们公司的网速是非常慢的,这几天基本都不工作,都在整网上订票,也都在骂,但最后都订到了。

我发现,订不到票,会有提示说系统繁忙,这说明在web层,是处理得过来的嘛。

那么,要保证网民们如果一直不停的在订票,最终可以订到票,可以:

由于票是与身份证绑定的,那么在业务层,我会给每个身份证一个Token对象,将此Token放入一Map里,键值是身份证号,value是token,这个token还包含订购的次数与时间戳。订购到达一定次才成功。

算法:

    此身份证第一次请求,将生成一个token,次数初始化为0。

    然后每次请求只是简单增加,与记录时间戳。

    增加到一定次数,将此身份证放入就绪队列。一个后台进程(线程)去处理这个队列,就也是,加入到就绪队列的用户,一定会订购成功。数据库只负责处理这一队列。

    以上都是内存操作,没有大的压力。

    这里面还可以做文章,判断时间戳,如果时间间隔过小,就算次数够,也不加入就绪队列。

    也可以多搞几个队列,优先级队列之类的来处理。

这么设计为了保证,那些一直在网上订票的网民,一定时间后,一定成功,也可以排除一些刷票的人。

    其中一些人一两次订购不成功,可能就不会再登录,骂一句,垃圾,闪人。

    一些网速快的人,一直刷票,发现不成功,骂一句,垃圾,闪人。

                --------- 排除掉这些人,订票系统的压力降低不少

    一些有其它交通方式回家的或者不那么狂热的,隔几小时订一次的,两天过后,刷,订票成功了!欣喜弱狂,像冲了彩票一样,闪人。

    一些在网吧订票不成功的,回到公司,碰碰运气,刷成功了,欣喜若狂,闪人。

    一些疯子,一直刷,一直刷,一直不停的刷,刷了两天,发现还是不成功,垃圾,闪人。

      -----------------

如果:10000人有10000张票,再谈什么NOSQL,缓存,分布式什么的。用缓存不是不可以,数据库本身也有缓存,数据库事务,日志文件之类的在写入磁盘前,也是在缓冲区中,每隔1秒或者更少的时间,批量写入磁盘。把这些机制放大了,也差不多这道理,不过放大了,出错几率就会大,麻烦事就更多了。

最后这么设计后,被万千民众骂,所以,最好是生病了,不用啃这种需求。                                                                        

加载中
0
Jason_CC
Jason_CC
前排围观之
0
李永波
李永波

谈了这么多 意思是说他们的web 压力不大 但是数据库压力很大 

不拿 淘吧来比  用 股市 来比 会是什么样呢?

大东哥
大东哥
不熟悉。
0
Z
ZYud
各地区经济发展均匀,也就不用每年都要大迁移.
Z
ZYud
@ExtremeTalk : 好地方.
ExtremeTalk
ExtremeTalk
@justintung : 新加坡
justintung
justintung
全球哪个国家各地发展均匀的???
vikey
vikey
+1
0
鉴客
鉴客
这样的系统,前所未有,就算是再有经验的人来做,也要经过几轮的不断优化才能最终满足需要。
0
chuangyu
chuangyu

讨论架构这样的系统可以写本专著了。

所以在这里讨论的每个人都只可能讨论某一方面的问题,这就给一些拍砖的人提供了话题;

你说硬件,他给你说软件;你说前端,他给你说后端;

你说分布式,他给你说数据库。。。。。。

0
zxr1001
zxr1001

引用来自“ZYud”的答案

各地区经济发展均匀,也就不用每年都要大迁移.
同意,有些复杂度是自身造成的。发展高铁的钱多拓宽一下现有的铁路运力,就不会出现现在的问题;多藏富于民,也就会少了很多群体事件
林纳斯脱袜子_官方人员
林纳斯脱袜子_官方人员
在这个国富民穷的时代。。。看看刘志军富成什么样了。。。背后,应该是天大一窟窿吧。。。如果全搞出来,应该能再建一条京九线。
0
yak
yak
怎么没人说户口呢,如果解决户口还有这个问题吗?
ExtremeTalk
ExtremeTalk
@CheckStyle : 取消户口确实不会解决这个问题,但是户口加重了这个问题
justintung
justintung
同意 CheckStyle的
CheckStyle
CheckStyle
别傻了,取消了户口,在外的人也得回家过年。在美国,感恩节前夕州际公路塞车也很正常,更何况中国人这么多
0
liujb88
liujb88
只是纯粹地路过
0
CheckStyle
CheckStyle
楼主说得没错,人多票少,无解
0
benlee
benlee
技术问题都很简单,难就难在里面有其他的考量。
返回顶部
顶部