【IT168 专稿】2012年春节,为方便广大回家旅客买票,铁道部首次开通了12306网上订票系统。然而短短几天内, 12306网站访问用户已占全球互联网用户的0.902%,每天点击量高达10亿人次,系统一度显得有些“支撑不住”。为此,铁道部已启动了新一代客票系统的规划和设计。考虑采用云计算架构,对现有的客票系统进行全面的优化和改造。
“整体系统来看,12306订票系统本身在设计上具备相当大的挑战性,出现一些问题其实是在意料之中的。”一位曾参与竞标的厂商技术人员告诉IT168编辑:“以淘宝、京东为例,这些电商类网站都经历了从小到大、然后发展至超大规模的渐进式发展道路,在一代一代设计架构构建与升级过程中,技术积累本身比较成熟,业务上线也有较充足的测试、调试时间。”
“在技术原因之外,12306最大的问题其实就是上线时间紧。”这位技术人员表示,在他记忆中,12306网站虽然早已存在,但是只能担负一些查询的应用,铁道部首次公开招标,将网上订票系统提上日程是在今年4月份,到年底,系统就匆匆上马开始应用,对于12396这样一个超大规模的电子交易平台来说,整体项目的工期不可谓不紧张。
不过戴尔下一代计算解决方案和网络事业部高级经理徐海则告诉IT168编辑,就戴尔目前了解到的情况,目前铁道部正在业内广泛征询意见,集中了戴尔等一些厂商专家、还邀请淘宝网、京东等互联网企业的首席架构师一起,就12306目前的问题给予咨询和问诊,希望从业界广泛听取意见,对12306订票系统进行全面的优化和升级。
12306订票网站四大需求特征
根据IT168编辑了解到的情况,目前12306订票系统包括200多台刀片系统(HP公司),用于支撑前端访问应用,另有少量小型机用于后台数据库服务器,此外,还部署了赛门铁克公司的负载均衡软件,订票系统软件则是铁道部科研院开发的。目前的主要问题是,系统高峰期响应时间过长,实际交易量无法满足预期设计目标。例如以前设计规划的每天100万交易量,实际上只能完成40-50万笔交易量。而这些问题体现给终端订票网友的直观感受,就是登陆慢、订票难。
谈到12306网站的需求特点,戴尔徐海总结了有四点:第一点是高并发,从12306的订票需求来看,春运几天,承担了全国各地的订票需求,网站承担的并发访问与计算压力可以想见。其次是高可用,和大多数企业应用系统一样,订票网站也需要保障其高可用、业务不中断。
此外,如果和新浪、淘宝等大型网站相比,12306还存在一些自身的特点,传统的新浪、淘宝等网站相对而言,访问量较为平稳,尽管也存在高峰和低谷的差异,但大体来说,访问压力差异并不十分巨大,而12306的访问则存在严重的不均匀特性,平时访问量可能较小,但高峰时段,例如春运阶段、以及每天放票时段,访问量可能激增至平时的数百倍以上。
以数据库为核心优化系统
有人说:“春运,是世界范围内规模最大的一年一度的人口迁徙运动”,小小的一张火车票,使得12306订票网站在节前成为各方关注的焦点。“前访问用户过多,请稍后重试!”这是大量用户会碰上的无法登录;还有不少用户登录之后,却无法打开二级、三级页面,只有在不停地刷新;一些幸运的用户登录后成功付款,但却功亏一篑,却无法买票了。
根据徐海的分析,12306订票网站因为没有太多的图片、视频等呈现,更多的是后端的订票计算,因此在技术上最大的可能性是数据库压力大,因为订票操作本身涉及到系统的实时交易,对数据库读写操作压力会比较大。徐海认为,从12306反映的问题,例如登录受限、访问速度慢、订票无响应等问题,可能都涉及到数据库部署优化问题,因此,数据库优化应该是下一步改进12306的需要重点考虑的一个方面。具体可以从多库数据库部署、多层数据库访问、读写分离等多个方面来进行优化。
首先,从数据库的选择部署来说,徐海推荐采用成熟的LAMP开源架构(Linux+Apache+Mysql+PHP),考虑到数据库性能提升的需要,可以考虑采用多库的形式,根据数据的级别、类型不同,将MySQL与Oracle数据库配合使用。
“一般如果要构架一个系统,通常来说是一个数据库支撑后端,但是对于超大型的网站来说,可以考虑把数据库切割成几个部分,可以考虑不同的切割方式,例如按地域划分是一种方式,北京用户来访问的时候可以访问一个数据库,上海用户访问的时候则访问另一个库。另外也可以考虑按车票类型来划分,订票的时候T字头的可以在一个库,Z字头的可以在另一个哭,这样通过多个数据库来保证整体系统的应用性能更好。”徐海认为。
和前面的多库数据库部署相关联,铁道部还可以借鉴一些网站的多层次数据中心设计。目前整个订票系统都是集中在铁道部的数据中心中,全国所有的订票压力都用这一个数据中心来应付,是一个典型的集中式系统。当集中式数据中心在无法应付的时候,就可以向分层数据中心演变。打个比方可以分成2层, 第一层可用来接收用户请求,判断用户请求的来源,将工作流分配到不同的数据中心,同时在全国各地构建数据中心,多个数据中心之间做定期的数据同步和容灾,构成一种分层次的数据中心。
另外,就12306的访问特性来说,很可能的一种情况是存在大量的读操作,写操作在其中只占较小的部分,针对这类型访问特性,可以考虑的是读写分离技术。“在大部分应用状况下,通常数据库的读、写都是一起的,就是说,一台服务器或者一个服务器组同时承担数据库读写操作,但对于订票的用户来说,很可能开始的时候需要多番查询车次而未必订票,对于一个用户来说,很可能多次的查询才会涉及到一次订票的行为,整体系统中粗略估计读操作占80%,写操作占20%,对于这种情况,为了系统扩展性更好,也可以考虑读写分离。用单独的服务器组支撑读操作,写的时候,交易的时候写到另外的服务器中,这种架构现在已经在很多网站中应用,例如淘宝也是这种模式。”
此外徐海还谈到,订票系统80%都是查询和检索,今天已经有一些比较适用于云计算检索的技术,例如Hadoop、mapreduse等,目前google和百度都应用了这种查询技术,12306订票系统中也可以引进这些技术。
LAMP是超大型网站构架首选
实际上,数据库经常会造成大型网站的性能瓶颈。徐海以淘宝为例,介绍了淘宝网站架构升级变迁的发展路线图。
最早淘宝规模较小,应用的就是X86服务器+MySQL数据库,这也是很多小规模互联网公司的常见架构。
随着淘宝业务发展到了第二个阶段,用户量增加了一个规模,原有系统难以支撑增长的访问量,内部架构也从X86系统迁移到了小型机,采用了小型机+Oracle的典型架构。
到了第三个阶段,随着访问量进一步增加,淘宝已经逐步发展成为了一个超大型电子交易网站,小型机+Oracle组合也不再适合了,因此到了第三个阶段,服务器又由小型机回归到X86平台上。数据库也从Oracle回到了MySQL。“Oracle的优势在于功能性强,稳定性好,成熟,中型的企业用户用这种架构非常合适,瓶颈则在于,对于大型的数据库应用来说,Oracle购买Lience是十分昂贵的,而且Oracle本身也存在着扩展上限,当访问人次超过一定程度后,oracle本身也力不从心。”
徐海总结小型机和X86平台在互联网应用中的差异时谈到:小型机+Oracle的组合适合于中等规模的企业用户,而超大规模互联网站则首选LAMP架构(Linux +Apache+Mysql+PHP)。徐海认为,小型机单机处理能力是非常强劲的,但如果在大量并发访问量的压力下,一般用户受限于成本很难购买大量的小型机,而且小型机的内存扩展也是一个限制。
“实际上对于大型网站来说,与网站访问并发数紧密相关的一个关键指标就是内存。”徐海谈到:“通常我们在网站设计阶段,需要考虑一台服务器支持多少并发数,每个并发数需要多少字节,然后大概的计算内存配置,因此当并发量变的非常大的时候,内存的需求量是非常巨大的。应用大量X86服务器进行集群和负载均衡,就能够解决超大型网站高并发访问量的需求。”
LAMP网站架构图
徐海介绍的LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。
此外,徐海透露,淘宝目前大部分应用都已经过度到MySQL上,但一些核心的关键应用仍然建立在Oracle架构上。采用多种数据库结合协作,也可降低数据库成本。
CDN并非12306优化关键
在针对12306网站的讨论中,CDN也是网友关注的一个关键点,很多网友认为CDN对大型高并发网站的优化起着至关重要的作用。对此,徐海显然有自己的观点:“CDN对于淘宝、京东、新浪等大型网站来说的确有非常大的意义,但CDN并非12306的优化关键。”
徐海认为,12306订票系统和传统网站的需求特点还存在一点区别,一般来说,新浪、淘宝等网站除了IOPS压力大,同时还伴随流量大的特点,因为这些网站不同程度都涉及到一些图片、视频等文件应用。12306订票系统尽管并发IOPS压力极大,但数据只是一些车次、时间、金额等交易数据,每个数据块大小并不大,整体数据流相对传统网站而言也更小。
“CDN起到的作用实际上是缓存的作用,适用的情况是单一的数据源被重复访问的情况。” 徐海解释:“CDN要起作用,可能包括2个前提条件:第一是确实有大量的重复请求,第二是被访问数据必须字节数较大才有意义,比如淘宝、京东等电子商务网站,一个图片100K,那么100件商品就是10M。但订票网站字节数很少,而且访问特征本身又比较离散,因此,CDN对12306订票系统很难说能起到多大的优化意义。”
此外,徐海认为12306订票系统还需考虑工作负载动态分配的问题。12306订票网站访问需求存在较大的波动,存在十分明显的峰值和低谷期,因此在设计之初,也需要考虑如何利用动态基础架构,构建一个具备弹性的、灵活、动态的基础架构,实现工作负载动态分配。徐海谈到,戴尔也有相应的软件解决方案来实现工作负载的动态分配,例如戴尔的ARM解决方案,就可以根据工作负载的变化趋势,动态的分配服务器资源。