免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

如何设计高并发高流量的12306在线票务系统 [复制链接]

论坛徽章:
0
111 [报告]
发表于 2012-01-19 12:09 |只看该作者
本帖最后由 老男孩linux培训 于 2012-01-19 12:09 编辑
yahoon 发表于 2012-01-17 17:46
此业务的地域特征(北上广,加上几个大的中转站), 高峰时间段(每年也就那么几个节日), 实时要求特征明显

个人觉得没必要在一个机房,一组服务器来承担全国的量
让每个铁路局负责自己站点的票? 用户数据都是从统一的数据源的一份拷贝

就比如运营商各个地方都有分站,办理业务只用上对应的分站,而不是一个portal

而且数据查询还是可以优化的,并不是每次点击查询都要去数据库
现在最突出的是查到了有票,但是提交不进去,因为全国的写操作都对一个库在操作
可想而知了

...

老男孩点评:
各自为战不统一,不好管理。用户也不知道去哪买票,类似赶集,58的 二及分类是可以的。主要还要和售票系统对接,这个是难点。

论坛徽章:
0
112 [报告]
发表于 2012-01-19 12:51 |只看该作者
老男孩linux培训 发表于 2012-01-19 12:07
回复 29# yahoon
另 关于投入的问题, 仅仅为了应付有限的几个热点时间段,就采购大量的服务器和带宽放在那 ...


说到成本问题,应付突发的大流量,增加硬件设施也是难免的。国内还没有成熟的云服务提供商,类似Amazon EC2、GAE之类。当然了,Amazon EC2和GAE的局限性这里就不谈。

论坛徽章:
0
113 [报告]
发表于 2012-01-19 12:52 |只看该作者
老男孩linux培训 发表于 2012-01-19 12:09
老男孩点评:
各自为战不统一,不好管理。用户也不知道去哪买票,类似赶集,58的 二及分类是可以的。主要 ...


不知道原有的购票系统是怎么一种架构。如果原有的系统是区域划分的,可以考虑对接,分担业务处理给原有系统。

论坛徽章:
0
114 [报告]
发表于 2012-01-19 13:03 |只看该作者
其实现在很多公司都在试用、研发,不少了。
yanyangtian4502 发表于 2012-01-17 16:50
其实有关nosql的一些东西,我个人发现:国内炒的火,真正用的少,存在“赶时髦”的风气

当然,个人愚见! ...

论坛徽章:
0
115 [报告]
发表于 2012-01-19 13:11 |只看该作者
大家好 我是中科希望软件股份有限公司的李秀娟 我们公司是rose  ca  acornis的中国区总代 希望有机会多沟通合作。李秀娟 13671343160  010-82626272  给大家拜年了

论坛徽章:
0
116 [报告]
发表于 2012-01-19 13:21 |只看该作者
Gray1982 发表于 2012-01-18 11:21
都说的那么多,老男孩的一个几本结构也给出来了
都考虑的是前面CDN,WEB代码,后台数据库等
有没有想过队 ...



都少不了。

论坛徽章:
0
117 [报告]
发表于 2012-01-19 13:24 |只看该作者
yanyangtian4502 发表于 2012-01-17 23:01
基本可以从以下几个方面进行考虑:
1.如何使得服务器更快的处理请求
2.如何使得响应更快的发送到客户端
3 减少不必要的请求

首先我们从站点本身的设计来看:
1.如何使得服务器更快的处理请求:那么就要充分的利用服务器的每一点资源:内存,CPU,缓存,线程,数据库
   对于内存:因为程序是用Java写的,那么就需要注意:
            a. java对象的回收与释放,不要认为这不是问题,一般站点,常常有很多的对象提供功能,加上10000个对象,不多吧,现在假设,每次请求,都需要产生1000个新的临时对象处理这个请求(其余的9000个对象是所有请求都要使用的),假设每个对象占1k,1000个就约等于1M,也就说,每次请求,需要产生1M的对象内存,如果访问量就是千万级别,想想看,吓人吧。很多人认为java有垃圾回收机制,不用管,能不管吗?
            b. 注意系统资源的使用。站点免不了要去操作文件,线程等系统的一些资源,那么,使用完之后,要注意释放,一是为了避免其他请求等待,也是使得内存快速回收。
            c. 在使用cookie和session之前,要算笔账:性能和安全的。如果真要使用session,就要考虑很多的问题,举个数据,大家就明白了:一般session的有效时间是20mins(可以自己设置了),假设每个用户在站点停留10min,不过分吧,买票嘛,总的看看,输入信息吧。那么用户的session存活期就是30min了。

              假设每秒100个请求访问站点,而每个用户发送5个请求,这个时候,站点就是100/5,每秒20个用户访问站点。假设那么,在session存活期内(30min),站点的session个数就是:60*30*20=36000个,想想看,即使每session只保存1k的数据,也是36M,这还是只有100请求的情况,如果请求是千万级别,想想看。

   对于CPU:不要认为服务器CPU牛X,就随便搞。注意的请求很多:
             a. 考虑多线程的使用,不要没事就开线程。线程开启需要CPU分配,调度,管理啊!
             b.不要没事就try..catch到处搞。异常捕捉需要遍历调用堆栈的,那个效率~~~。
             c.加密解密要注意个度,因为这些算法消耗内存和CPU,也需要CPU大量的计算
             d.不要频繁读模板,该缓存的就缓,不要总是拼接,替换,要注意缓冲池的使用。
             e.正则表达式要注意使用,要使用编译后的,最好是编译后缓存起来,下次直接使用。正则表达式也是一种语言,需要分法,词法分析,很复杂的,懂编译原理应该明白这个道理。
             f. 注意CPU喜欢减法操作,考虑用位操作替换浮点操作,不要认为是小事,千万级别问题就大了。
     

...
然后我们从运维方面看:。



老男孩点评:
    赞!介绍的很细。从讨论中,让大家可以学到更多的东西,才是帖子的目的。实际的架构复杂度 可想而知,而我们连最基本的需求还没拿到。

论坛徽章:
0
118 [报告]
发表于 2012-01-19 13:26 |只看该作者
gotolinux 发表于 2012-01-18 09:48
网上有个订票流程,大家可以看看。



老男孩点评:
    你这图发的非常好。了解业务,了解需求,才是解决问题的根本,否则,就无地放矢了。

论坛徽章:
0
119 [报告]
发表于 2012-01-19 13:30 |只看该作者
gotolinux 发表于 2012-01-18 16:34
除了前面说的,有朋友也指出了队列的问题,我认为队列处理也是一个非常重要的问题。
在线订票和在窗口买票 ...


老男孩点评:
赞,good!

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
120 [报告]
发表于 2012-01-19 15:24 |只看该作者
zhangyudong1987 发表于 2012-01-19 10:13
我觉得可以考虑oracle的exdata的这个机型。。。硬件数据库一体机。。。
就其前端网站来讲觉得还是开发的太 ...


后端的数据库服务器一点也不忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP