免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9655 | 回复: 17
打印 上一主题 下一主题

12306如何可以平安度过,架构师们讨论下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-21 13:11 |只看该作者 |倒序浏览
需求:
1)面向全国人口,13亿。13岁以下小孩应该不会买上网买票,去掉2个亿?长年不出门的有2个亿没?不管怎么去除,并发量绝对大.
2)特性,非内容管理系统,与钱息息相关,事务处理要求严格.
3)数据量大,小型数据库无法支持.
部署:
1)这个系统关键在部署,服务器windows 平台应该是肯定放弃的.
2)数据量大,需要将数据分库,由多个数据库实例来完成数据的存储; 
3)应用服务器,需要多个应用服务器,同时每个服务器启动多个JVM实例.每个JVM线程数配置500服务线程以上.
4)代理服务器或硬件负载平衡,将来自全国各地的IP按地址段转向不同的应用服务器.
并发量初步计算,如果是20个JVM,500个线程,如果数据存储不慢的话可以支持同时的并发量为 20*500*1.5=15000个.

这个并发量有可能还是太小了.代理的硬件不知能够响应这个访问不.当然如果增加到40个JVM,将访问量是30000的并发.
但由于访问量大大超过30000,而每个人购票停留的时间较长,同时活动的会话数估计远超30000.即使增加到100个JVM也是有限的.
这里可能要处理的是,业务逻辑要尽可能的看,用户操作要尽可能的简单,让购票者尽早下线将会话放出来.
而由于该系统还支持银行系统转帐.这块的功能如果集成在一起,占用SESSION的时间就长.如果能将支付与购票分开效果可能会好一些.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-09-22 19:56 |只看该作者
极限一点:

13亿人同时买同1张火车票, 也就是13亿个for update事务锁, 怎么办?

你允许这个问题发生吗?  能接得住吗?

接不住怎么挡? (比如, 现在搞出了个排队中, 30分钟后才能看结果付款)

论坛徽章:
0
3 [报告]
发表于 2012-09-24 09:20 |只看该作者
12306的日均PV为1694万,网站发生瘫痪主要因为过多的http请求导致的服务器过载。所以update 不会达到13亿这个数目。当然其中绝大部分仍为查询。
购票系统的后台业务逻辑并不是特别复杂。行锁的释放时间应该会很快。这种系统事务处理时间显然要 <1s.如果超过这个数,相关的事务处理则要另走后台处理。
曾经采用20个事务处理的服务,用1000个并发(同时UPDATE),用tuxedo 的排队机制,并未引起update行锁的问题。只要不发生表锁。

发生问题集中在春节或国庆。我们铁道部总共有多少客票?这个也决定了事务量的大小。

其实系统的性能问题,是在并发较小的时候,系统就不能正常处理。而这种情况一发生,导致用户集中登陆,灾难就不可避免了。即使反复重启也是无济于事。
一个人买不到,叫其朋友一起登录买导致本来一个人的访问变成了几个或上十个。网站的压力就骤然上升。这时候不灾难也不行了。

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
4 [报告]
发表于 2012-09-24 10:37 |只看该作者
支持同时的并发量为 20*500*1.5=15000个,其中*1.5是什么意思?回复 1# netxay


   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2012-09-24 11:35 |只看该作者
本帖最后由 goldenfort 于 2012-09-24 11:50 编辑

回复 1# netxay


   这个数据量不大, 由不同服务器 处理不同车次的 车票, 绝对不会出现重票现象。
   如果 不是 现场打票, 而是通过身份证 验票, 需要将已经出的票提交的中心服务器,或相关车站的服务器。
   但是 这个 只对当天出发的车票有实时的要求,数量并不多,其它可以等到系统闲时,再同步数据。
    比如说, 当前时间点可订的票 有一亿张, 由1000台 pc 性能的服务器来处理,每个一个个冗余,每个处理20w个票的查询和订购,
   应该很充足了吧。
1000台买高档的,5000RMB一个, 500w, 足够了。
   

     这个想的多了,如果要验票,直接连接到相关车次服务器就可以了,根本不用同步数据。

        

   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2012-09-24 11:39 |只看该作者
回复 2# linux_c_py_php

为什么 13亿个人会买一张火车票?
都从一个地方出发, 都往一个地方去吗?
就是都往一个地方去,一次车少也有1000个座位吗? 都选一个座位吗?
   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2012-09-24 11:47 |只看该作者
回复 3# netxay


    人们想买票, 先等到首页 查询,查询是不需要写的, 查询得到车次信息时, 直接转到相关车次服务器, 有什么复杂的。

论坛徽章:
0
8 [报告]
发表于 2012-09-27 14:42 |只看该作者
本帖最后由 netxay 于 2012-09-27 14:43 编辑

回复 4# kernel69


    1.5乐观系数。个人经验值。

论坛徽章:
0
9 [报告]
发表于 2012-09-27 14:45 |只看该作者
回复 7# goldenfort


    首页并不容易,这个出问题首页就有很大的原因,同时访问的用户数并发可能是达到近百万。查询余票的并发都是异常的大。而且购票同时提交的事务也是异常的大。
不可小看和轻看。不信你部署个简单应用,用loadrunner5台机器,启一100个并发事务看看。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2012-09-27 17:38 |只看该作者
回复 9# netxay


    首页  只是有查询 车次 的功能, 没有查询车票的功能,
   查询车次,都在车次服务器上
    首页 这个可以搞200台pc , 搞同样的程序。没有必要搞在一个电脑上
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP