免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
51 [报告]
发表于 2012-01-17 20:17 |只看该作者
yanyangtian4502 发表于 2012-01-17 16:13
说道优化,其实话题说不完!
当是12306扛不住了,就上了很多的服务器,也采用了群架等技术,这确实可以很快 ...


据网上的报道,铁道部还是缺钱的,并且缺口还很大.

论坛徽章:
0
52 [报告]
发表于 2012-01-17 20:45 |只看该作者
回复 31# yahoon


    其实高并发的来源还是他自己的定时放票,只有这么几个时段,买不到票的当然往死里刷了。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
53 [报告]
发表于 2012-01-17 21:06 |只看该作者
本帖最后由 chenyx 于 2012-01-17 21:07 编辑
gotolinux 发表于 2012-01-17 20:45
回复 31# yahoon

同意,认为造成流量集中.流程还是有很大改进空间的

论坛徽章:
0
54 [报告]
发表于 2012-01-17 22:50 |只看该作者
觉得后台的数据库没有把各个车次分开,或者说订单没有分开,导致太多的系统资源争用,所以在点击订票的时候一直订不上

论坛徽章:
0
55 [报告]
发表于 2012-01-17 23:01 |只看该作者
本帖最后由 yanyangtian4502 于 2012-01-17 23:07 编辑

基本可以从以下几个方面进行考虑:
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
56 [报告]
发表于 2012-01-17 23:05 |只看该作者
其实仔细想想,编写程序很容易!
但是编程好的程序,真是不容易!
考虑的问题,涉及到的知识广度,深度

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


非常赞同。现在的程序员跟C时代的程序员简直没法比。以为有了垃圾回收就不用管内存了,太注重应用本身的功能性,而忽视了程序的细节处理、资源利用。

论坛徽章:
0
58 [报告]
发表于 2012-01-18 00:02 |只看该作者
村口老柳树 发表于 2012-01-17 22:50
觉得后台的数据库没有把各个车次分开,或者说订单没有分开,导致太多的系统资源争用,所以在点击订票的时候 ...


嗯,这个也不错。还有一点,很多购票者都是临时注册,临时购票,而且会多次注册,利用多个ID来抢票。这一方面也会增加系统的负载。
用户注册和用户购票可以进行应用分割,后端数据同步。这就是我前面提到的用户信息(数据库)和票务信息(数据库)分离。

论坛徽章:
0
59 [报告]
发表于 2012-01-18 09:18 |只看该作者
yanyangtian4502 发表于 2012-01-17 16:06
说实在的,我之前没有使用过12306,最近也是看到很多朋友放映12306不给力,我就看了下!
首先不说别的,页 ...


这个是问题,但不是目前的瓶颈,因为它也是有做cdn的,目前的瓶颈不在这块,打开1230**的首页还是很快的,只是打开动态页面时才慢,明显是服务器问题。

当然他们做cdn也有问题,动态内容也走cdn了,并不是一个很好的方式,个人认为动态内容也走cdn会导致更慢,虽然cdn厂商不这样认为。

论坛徽章:
0
60 [报告]
发表于 2012-01-18 09:19 |只看该作者
gotolinux 发表于 2012-01-17 19:04
我认为这篇讨论大部分地方可以参考:http://bbs.chinaunix.net/thread-3626937-7-1.html

主要值得提出来 ...

顶一记,分省部属分流确实不错!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP