节后大整改!CU网友热议12306网站改进互联网

2012-02-02    来源:it168    编辑:唐蓉
在经历了2012年春运的考验之后,12306在线售票系统已经成为史上最牛的电商:日逾10亿次的点击量、最高达到166万笔的日交易量最、没有做一分钱广告,短短数日全球ALEXA排名260,日订单

  在经历了2012年春运的考验之后,12306在线售票系统已经成为史上“最牛”的电商:日逾10亿次的点击量、最高达到166万笔的日交易量最、没有做一分钱广告,短短数日全球ALEXA排名260,日订单量排名第一……

  ▲

  12306网站,一夜间成为中国最大的电子商务网站的同时,其不佳的用户体验也引来了骂声无数。相信经过了一番口水的轰炸之后,铁道部也在急于寻求系统优化的最佳途径。并且通过这么长时间的运行,系统的流量也已经比较精确地掌握。

  究竟如何才能让12306网站提供良好的用户体验?如何才能让网上订票不再是“天方夜谭”?此前,有不少人对12306网站的优化提出了建议,但终究没有一个完整的优化方案。为此,本文将根据近期ChinaUnix上发起的讨论【讨论帖:http://bbs.chinaunix.net/thread-3663925-1-1.html】,从网站改进的需求分析入手,整合网友的建议,从各个层面提出一个较为全面的优化方案,以供参考。

  1、系统优化需求分析

  优化需求一:互联网接入带宽明显不足,造成网络拥塞。

  优化需求二:每秒几千万的并发量导致系统无法招架。日逾10亿的访问量,交易量最高达166万笔,大大超出了之前预估的4亿访问量和100万笔交易。

  优化需求三:数据一致性和安全性不足。采用明文通道“分发根证书”存有安全隐患,有多种数据不一致现象,有时能访问到其他账号的信息等问题(由于牵涉到票务系统的身份认证,所以安全方面不容忽视)。

  优化需求四:12306未能在技术上有效预防自动刷票软件。

  2、业务流程优化:摇号买票惹非议?

  在讨论中,有不少网友提到要对业务流程进行优化。

  网友sania9 建议通过抽取中签的办法进行流程优化。其建议如下:分段放票造成“秒杀”型的压力,无形中创造了很多个高峰。在实名制的情况下,业务流程可以这样:注册后提前1个月(或更长时间)提交行程信息,针对席位、日期分批多次抽取中签,并降低退票者的中签概率,分散购票高峰。

  但是笔者认为,业务流程的优化固然重要,但是如果卖票也要靠运气的话,这貌似有些让人啼笑皆非。

  也有网友建议去掉锁定机制,以防出现票还没有售完,但在火车站就是买不到票的情况。

  也有网友认为摇号总比这样哄抢好,但要摇号的话,必须是第三方机构负责摇号。

  3、前端优化:站点程序的纰漏被无限放大?

  对于12306网站的页面设计,网友yanyangtian4502表示,最大的问题就是把CSS样式嵌入在页面中。这其实就加大了页面的大小,消耗了带宽。如果每个页面大小70k,其中 这样的css嵌入假设是1k。因为每次访问,浏览器需要下载页面,那么每次都要去下载这多余的1k的css样式,试想:上千万的pv去访问的时候,那么产生的流量就是1k*100,000,000。也就说明:要多消耗服务器的这么多网络带宽!很要命,一点点的问题,就立刻被放大!

  网友gotolinux 认为,具体可以从页面缓存、嵌套CSS与页面框架分离、使用CDN等三个方面入手。“网站上有大量图片,所以图片、CSS、JS等页面元素做好缓存是必须的;

  网站上有大量的嵌套CSS,这个完全可以与页面框架分离,缓解网站前端访问压力;

  这些页面元素可以根据不同城市的访问量而使用CDN,使用CDN有个好处,部署快,稳定,可靠性高。”

  lltlk 还建议,“用户登录”可以对用户进行分区,认证模块用内存+文件的cache。用户登录时利用索引路由到分区的认证模块。session可以用专门的session server管理,而不是web app管理。

  4、CDN及负载均衡系统

  事实上,12306网站已经上了CDN。有网友推荐,前端的负载均衡采用Nginx/HAProxy+Keepalived。

  5、应用部署:省级部署模式

  网友chenyx认为12306问题的根结在于没有使用分布式处理。网友gotolinux建议,通过省级部署的方式可以分散系统的压力。分别用二级域名来引导进入不同地域进行购票。比如:广东就用gd.12306.com,湖南就用hn.12306.com,把整个系统划分为多个小系统,并在后端集中。

  但网友老男孩认为,找几个核心骨干的售票系统对接更好。按地域分域名思路很不错,不过这个不同地点购票可能难做,这个要和现有的不同地区的铁路售票系统节点对接(资金太大),找几个核心骨干的售票系统对接就好。此外,系统还需要使用分布式数据库(如下图所示)。

  ▲

  6、数据库:NoSQL尚未成熟

  12306的数据库主要涉及两方面:用户信息和票务信息。这两方面的数据必须进行分离,既减轻系统负载,也加快系统响应速度。

  对数据流程进行优化,减少不必要的查询。

  对于日前吵得很火的NoSQL,大部分网友都认为NoSQL技术目前在国内尚未成熟,存在赶时髦的风气,对于实时性或许可以满足,但是不能满足数据一致性的要求,所以不推荐使用。

  7、其他出路:打破票务垄断

  打破垄断,同为票务分配,经过十多年改革,航空客票体制打破垄断,在与市场上的电商网站分享客票、信息资源的同时,亦让后者分担相应的流量压力,成为票务分配的先行者。目前,铁道部已经启动了新一代客票系统的规划和设计,而下一步如何,仍将取决于铁道部乃至更高层面的态度。

1
3