让你设计12306网站

从12306上线给广大网民带来了福音,我们足不出户就可以买到火车票了,而且实名制购票让票贩子失去了生存的土壤(至少是很大一批票贩子),但也引来了不少争议,一方面温州农民工上书国务院表示农民工网络购票难;另一方面网络购票推广到所有车次后,刚好赶上2012元旦高峰期,导致系统频繁宕机。关于网络购票的公平性问题已经引起了广泛的讨论, 作为互联网的技术从业人员,我这里想谈一下12306网站架构的问题,细数一下如果让我来设计,如何扛住元旦、甚至春节高峰期。

最新消息12306在全球的Alexa排名已经升至106位,在国内电子商务网站内排名11位,更有新闻报道1月1日-7日的日平均点击高达10亿次。

“本报讯 昨天是春运第一天,国务院新闻办公室举行新闻发布会,邀请国家发展改革委、铁道部、交通运输部、民用航空局等部门相关负责人介绍2012年春运形势。铁道部副部长胡亚东介绍,网络售票和电话订票每天已经达到了200万张,从1月1日至8日,网上订票“12306”网站日均点击次数超过10亿。”

2012年1月10日补充:12306网站硬件投资1685万

太极股份2011年中报披露,上半年公司签订了铁道部互联网售票系统等一批重要的行业信息化应用与服务项目。截至目前,公司只有12306网站这一个合同与铁道部有关,这1685.89万元就是该合同一期的金额。”太极股份董秘办人士向记者证实。

http://tech.sina.com.cn/i/2012-01-10/00266619782.shtml

面对这样的互联网需求,你会怎样做出设计决策呢?

一、需求分析

  1. 投资方:铁道部
  2. 承建单位:铁道部科学研究院
  3. 建设周期: 2011年6月1日正式上线,在高铁和动车购票上进行试运行;2011年12月上旬,全面推行网络售票,C字头城际、D字头动车、G字头高铁、Z字头直达、T字头特快以及K字头所有列车均可购买。
  4. 遗留系统问题:开放互联网售票之前,铁道部已经在全国范围内代售点和火车站联网售票;其他第三方系统接口(有网友提到网络购票系统实名制需要接入公安系统做接口进行身份认证)公安系统、网银支付系统等;
  5. 功能需求:用户注册、余票查询、车票预订、网络支付、取票;
  6. 非功能需求:注册用户数(1000万-1亿-10亿);每天发售车票(100万-200万,铁路每天的客运能力384万);可用性(购票期间稳定运行);安全性(保障用户资金安全);
  7. 客户特点:运力不足的现状导致:用户饥饿抢票,登陆不见去,我就不断地刷新页面,直到发现票已售完,一个人登陆不进去,就会发动10个亲朋好友一起帮助点击抢票,不怕买多了,就怕买不到;

如果不看最后一条的话,就是一个普通的电子商务网站,200万的日成交量充其量也就算是中型规模;但要是考虑最后一条需求的话,这个系统简直就是一个秒杀系统(日成交量200万的秒杀系统)。

面对这样的需求,你会做出怎样的架构决策呢?

二、分析设计

先来说说第三方接口:

1、公安系统接口

     需求:用户在购买火车票时需要调用公安系统的接口,进行身份信息验证,屏蔽不合法的身份信息(如身份证和用户名不匹配),同时还能够帮助公安系统通缉犯罪分子,维护列车的治安。

     这个接口调用会带来多大的压力?关键取决于调用的策略。

     如果用户在提交订单时进行身份验证,压力如何?

     考虑接口调用平均耗时1秒,公安系统能够支撑1次并发接口调用(仅仅为支持网络购票系统,需要隔离其他业务,避免购票系呕吐能够压力过大影响正常公安业务系统),那么公安系统可以为购票系统提供每秒1万次的身份验证请求。整体系统的最大处理能力将会限制的公安系统的处理能力。

     如果订单处理的平均耗时也是1秒,那么每次订单提交耗时2秒,时间延长的一倍;

     考虑到通过互联网订票的用户,身份信息99.9%以上都是正确的,那么为了识别不到0.1%的非法用户信息,需要系统增加一倍的处理能力。

     如果在本地对公安系统的数据进行短期缓存,每次接口调用都直接查询本地缓存,避免跨系统接口调用,2台PC服务器每秒支撑20万接口调用不是问题。

     如果将身份信息验证放到“添加常用联系人”呢?购票时根本不需要调用公安系统接口。

     真的有必要调用公安接口么? 退一万步,如果用户采用非法的信息定到了票,他能在线下换到票么?考虑到逐步实行的实名制验票,他进得了火车站么?

2、网银支付接口

     进入支付流程后,和网络购物并无太大差别,相信各大银行对自己的网银都很有信心。而且经过淘宝等电子商务企业多年的培养,尤其是双11等促销活动,网银支付系统支撑12306每天几百万的订单完全没有问题。

再来说说遗留系统的问题:

做软件的人都明白维护别人的代码要比重新写代码难得多;做系统解决方案的都明白,重新构建一套系统要比改造升级一套系统省心得多。这也正是个人比较担心的地方。

需求分析中提到,铁道部已经建立在全国范围建立了超过5万个代售点(660个城市,平均每个城市设立80个代售点), 全国联网售票系统已经运行多年。

那么互联网订票系统会不会是在原有系统上做了一次“封装 ”,就推向了公众呢?我不敢说是,因为12306网站的压力和访问方式在全国电子商务网站中是独一无二的,能在短短几个月的时间站在全球Alex排名106名,这个在世界范围内都是独一无二的;也很难说不是,因为面对网友的质疑:“你们做个系统的性能评估么?  你们做过系统的压力测试么?”,如果是系统化重构的系统,对每个环节面临的新的挑战和压力也会比较清楚,也就不会认为经过了动车组、高铁售票试运行后,就能自然而然地所有车次开放;就不会认为平时正常运行的系统,在元旦、春节全国客流高峰期能够扛住压力。

2012年1月13日更新:

清华王津的一篇《今天你买到票了吗?——从铁道部12306.cn网站漫谈电子商务网站的“海量事务高速处理”系统》http://blog.csdn.net/m13666368773/article/details/7191736,一石激起千层浪,现在sina微博上讨论热火朝天,除去不必要的谩骂,我还是看到很多业界大佬对系统设计的看法。

风云的bolog:《铁路订票系统的简单设计》提成ticket的排队思路,跟放翁在微博中提成的思路类似。

http://blog.codingnow.com/2012/01/ticket_queue.html#more

caoz的和谐blog:《铁路订票网站个人的设计浅见》

http://hi.baidu.com/caoz/blog/item/f4f1d7caee09b558f21fe780.html

摘:“很多人被10亿请求数吓到了,其实这里水分很大,最多的是重复刷新和外挂工具,那么如果你做到基于2的查询结果缓存化,这一步就简单了;直接参见这个文章 http://blog.sina.com.cn/s/blog_466c66400100bi2y.html 大量的用户重复刷新根本不是问题。 想知道实际效果,看这里 http://blog.sina.com.cn/s/blog_466c66400100cfrj.html 1小时20亿的刷新都不怕,还怕你一天10亿刷新? ”

这些都是干货,收下了,也看到自己设计的一些差距。加油!

猜你喜欢

转载自yexingren23.iteye.com/blog/1336844