专家探寻12306出路:建自己的公有云
- +1 你赞过了
12306网站的“瞬间巨大流量”的特性,要求IT系统能够根据负载自动进行IT资源的配置,这让很多人联想到云计算。然而,目前成熟的云计算厂商基本都来自国外,“实名制”这一特性又注定了无法将数据放到国外厂商的数据中心……究竟如何才能解决这个问题?以12306为代表的实名制高并发交易型网站的唯一出路在哪?IT168邀请到了来自微软云计算创新中心的专家邱爵荣解答这一问题。
需求分析——不同于世界任何一家网站
首先,我们有必要分析对12306网站的需求和特点进行分析。无论是从运营模式和规模来看,12306网站都不同于世界上的任何一个网站,其实质是一个电子商务网站,然而又不同任何一家电子商务网站……
主持人:您认为12306订票网站的需求和特点有哪些?最大的问题在哪?
邱爵荣: 12306网站实质提供的是网络订购的服务,它具有很鲜明的特点:1、一定要求有实名制——就是很清楚知道每一个人,因为我们不希望人家买了这个票,拿去转卖;2、牵扯到了资金流——在网上定票都要付钱的,因为它同时这个区间还很大,很集中;3、它在短期时间会达到相当大的访问量——这段时间大家抢车票,在那几天内,要完成这件事情,所以在短时间里面,这个的确数量会冲得太高;4、区域请求不均匀——如果去购物网站的话,购物网站可能对不同的城市之间就有所谓的覆盖面,可是12306的用户,要去哪里,是很难进行预测的,所以区域请求均匀是一个非常大的挑战。
我个人觉得在它网站运行的过程中,数据库是最主要的问题,回应时间太长造成用户等得不耐烦了,就会重复地要求连线,从而导致了大量的无用的Web数据量。
主持人:国内的大型网站还包括淘宝、京东、新浪等,您认为12306的访问模式和淘宝、京东存在哪些异同?
邱爵荣:与淘宝相比,虽然都是电子商务网站,并且淘宝从某种程度上来说也可以说是实名制,但是也有很大的区别:第一、销售行为有所不同。淘宝会遇到类似12月12号特定的销售计划,这个小计划瞬间的量也会冲大,但是它不会造成在这一瞬间里面,用户如果没有完成在网络上的订购动作,就觉得很不高兴、很不耐烦,后期还可能会买到想要的东西。但是车票是唯一性的,票被人买走了就不会再有了,所以,这是销售行为上一个很大的不同。
第二,访问地域性方面,购物网站里面可以依照你所在城市很快的看到这个城市可以买到的东西,车票的概念就没有了地域性了。
第三,业务流程方面。在做实名制跟金流的时候,每一个阶段的动作都必须要基于前一个行为。比如说要确认这个人的身份,确认完以后,还要确认他的信用卡或者说他的这个银行存款是不是足额,甚至要完成转帐以后,才能够确定出票。而在淘宝网上,我们可以先把东西买好了,事后再去做转帐,所以它的流程不见得是单一项的,它可以中间暂停,跳到另外的计划再回来,所以它的数据类型也是在这个地方。
与新浪这样的网站相比,第一,新浪并不是一定要做到实名制;第二,新浪也不需要很大的数据库来支持说要去整合金流、物流等等这些东西,所以它虽然访问压力差不多大小,但对于回应的结果并不要求那么及时,数据类型也会有很大的不同。
主持人:淘宝在其光棍节促销期间,TMall也曾经遭遇宕机事件,京东也曾经遭遇宕机事件,您认为这些宕机事件和12306网站崩溃有何异同?
邱爵荣:这些事件的共同点是都没能满足用户对于服务水平的需求。但是这些时间不一定都是宕机造成的,当然有可能背后实际上真的是宕机,可能是服务器处理太多的工作,导致它整个服务终止;可能是前端的Web它的访问数量,同一个时间访问数量太多,导致它的Web没有办法连进去;也可能是我登陆进去了,我已经连线上去了,但是我想登陆的时候,我把自己本人的身份输入进去,它跟我说时间超过、繁忙,可能是应用的问题或者后端数据库的问题。
我们从量的角度来看,不管是淘宝、12306、Tmall,都是一种终端用户的感觉。我们从后面技术角度来看,不管是哪个网站,就算是访问量不大的,它的网站服务器处理速度不快,或者是很单纯的网站连线的带宽不够,也会有这样类似的终端用户的感觉。
优化建议:用户体验为核心 互动式运营
在分析完需求和特点之后,我们需要了解现有的系统存在哪些问题?要解决这些问题的核心思路是什么?邱爵荣表示,目前最大的问题在于瞬间流量过大,他建议以用户的体验为中心,通过互动式运营不断改进,这也是任何一个网站建设所需要遵从的思路。
主持人:您认为目前的12306订票网站在哪些方面可能存在问题?您的优化建议是什么?
邱爵荣: 12306存在哪些存在的问题?它最主要造成问题的核心原因就是它的瞬间流量,流量太大是一个症状,症状产生的原因就是我们现在要讨论的细节——服务器的部署、带宽、负载均衡、数据架构、应用程序等等。
从终端用户的动作来去分析每一个阶段发生的问题,第一个问题是是否有足够的带宽和服务器来承载Web的瞬间流量?早上六点开放定票,六点到六点零五分之间,它的瞬间流量一定是最大的。以前我有处理过类似的火车定票系统,服务的IT人员告诉我他们遇到的问题:在一瞬间,系统有十万张票要卖,放票的前面五分钟就全部卖完,所以算一下,每秒钟的连线数量是相当惊人的。
负载均衡的系统肯定要去计算一次这样的连线需求量有多少,然后再去加减一些编译器,比如说前一分钟里面有10000个连线,可是实际上前端服务Web的服务器连线容许值有15000个连线,加了15%。
12306订票网站,我个人认为并不是一种问题,而是一种经验学习。在服务器准备、带宽、负载平衡这些东西,一开始做的一个假设,就是总量计算的假设,预期从第二年、第三年甚至到第四年、第五年,这样不断地优化,让它的服务慢慢到位,能够达到在开放的时候,所有用户都可以得到想要的服务质量。
主持人:那么究竟如何才能让用户基本满意呢?
邱爵荣:如何让用户满意,也就是说每一步的响应时间要能让用户接受。首先,在页面呈现的时候,当用户连到12306的时候,可以接受的页面呈现时间是3秒。我们架设把整个Webpage的传输量是300KB,那每秒钟就需要为每个连线传输100KB数据,如果一秒钟有10万个同时连线,用一秒钟100K乘以10万个,就得到每一秒钟所需要传输的数据量。当然,终端用户也知道,过年时间订票的难度要高,所以可以容忍本来预期三秒钟更长的时间,我可以容忍到二十秒,二十秒传完我也可以接受。也就是说20秒钟之内传完网页可以让用户基本满意。所以,从技术上来说,如果不能二十秒还未传完,一个数据都没有呈现出来,就不能让用户满意了,至少是慢慢呈现,图片、广告稍微慢一点。
其次,要让用户看到计算的进程。等到画面出来的时候,用户开始填资料的时候。把名字、身份填进去以后,这时候送进去,通常一个包送进去,就接到后面去处理,后面的应用跟数据库要去检查中间的包里面资料,而且这个资料可能通常还有加密,做了检查了以后,还要到其他的数据库去核对,核对完以后才能送出来。假设在一分钟之内完成,其实等一分钟是可以接受的,但是中间一定要跟他说你的身份正在验证中等等,不能让呆呆的等,可以用一个横杆,慢慢的变长。所以在网站设计上,要有一些额外的东西,让用户不会觉得等不及,因为一旦用户等不及,就有可能进行另外一个连线,导致多余的流量。
后端的数据库,在三十秒内或者一分钟内他可以算完十万个人进来的包,十万个连接送进来的包里面的身份,但是万一现在的总量就不是一分钟内完成十万个,而是要一分钟内完成一百万个,那怎么办?这个时候就是第一个,先从数据运营上面的优化;第二个要加硬件配置,或者说要采用分散式的方式来做——使用者身份验证是一个数据库,身份验证以后,他要查哪一个火车的时候,他这个需求要送到另外一个数据库,在数据库的方向、架构上面要去做分层,并不是所有数据库都是在一块。当然我们相信12306他们当时设计的数据库也一定有做这样的事情,万一还没有办法满足使用者的期望,就回到刚才前一个问题,就是要学习,使用者要得更快,一分钟等不了,三十秒就要得到,这时候依照使用者给的反馈,进行数据库上的优化或者加强硬件配置,这是一种互动式的运营。
其实不管是12306还是很小的千人网站,其实优化的程序都是差不多的,首先,在我们后端还没有完成工作之前,要不让前端使用者觉得停下来,那至于说使用者多久会等多久,那就是互动,当然不可能在第一年提供服务的时候,在这么大的压力下就可以做得很好。
那您觉得经过这样的这种不断的优化和改进之后,在目前现在现有的技术之上,有没有办法达到用户的体验需求?
邱爵荣: 12306是新网站,很多人在上面还没有建立自己的帐号,所以他从建立帐号开始,然后开始去查询车票,车票查询完了以后,他决定要坐哪一班车,接下来控制多少钱,然后连线资金流,连线银行,确定信用卡或者说其它付款,都完成以后,才会把票在系统里面登记完已经给他了,然后再通知这个使用者到车站去拿票等等。
这些动作一共有三十几个步骤,也就是说在数据库上面,如果说现在不是单一数据库,还要整合身份的数据库、车票的数据库、银行的数据库,再加上所有的操作的数据库,数据库就应该会有好几个有关联的,不是单一的。
所以,如果说要提供的服务等级是可以满足终端用户,让他不会觉得慢或者崩溃,数据库都应该放在本地,而不用去等待其他的系统处理完。可是事实上这个东西又不见得可以放在本地,比如说检查信用卡是不是有效的,信用卡资料在银行,不在本地。所以在整个优化上面,除非12306也学习类似支付宝这个动作,可以事先在我这儿存一些款,然后下次要买票的时候,就直接从你存到我这儿的钱去扣,这样就可以确保这个数据都在我这儿,在处理上面就不需要等,不会因为银行的反馈太慢,导致没有办法提供给终端用户一个满意的服务质量。
12306的未来:联合电信公司搭建公有云
网络无国界,但数据不是,数据可不能随便乱放。12306网站最大的特点之一就是实名制,无法想象一下这些数据如果都放到国外的服务器上会发生什么样的情况。不能放到国外的服务器上,也就意味着不能使用国外厂商的云服务。那到底该怎么办?怎么才能实现动态扩展?怎么才能实现服务器分散?答案是:联合电信公司搭建自己的公有云。邱爵荣认为,这样的模式是在当前政治、经济基础上衍生出来的全新的运营模式。
主持人:12306网站未来究竟有哪些可行的改进方案?你能否根据您的经验谈一谈?
邱爵荣:首先,在部署上实现动态扩充。当流量增大的时候,怎么样在短时间扩充它的服务的可用资源,比如说带宽或者说服务器等。一个应用部署在一个服务器里面,当服务器工作不堪负荷的时候,有没有办法把应用的计算工作分给其它的服务器硬件?这其实就是分布式运算,分布式运算可以通过类似平台的方式来做。
这也是微软在所谓的Windows Azure上一直想要做的技术,就是开发人员把应用写好,上传上来,在这样的Azure上提供这个一个应用,放在微软的服务器上面运行,当该应用负载变重的时候,自动把应用分到别的服务器硬件,也就是说数据送进来运算的时候,通过负载均衡把运算的工作交给两个或多个服务器里来。
但是很多时候处于安全方面的考虑,客户他不会、也不方便把他的服务放在Windows Azure上面,把他的数据放到厂商的数据中心。所以微软在尝试把Azure的技术开放出来,帮助用户架设自己的公有云对外提供服务,这样就可以实现数据安全性和自动扩展等功能了,并且通过与电信公司进行合作,可以实现IT资源的自动伸缩,一旦高并发的事情要发生的时候,就把连线的要求分散到电信公司的服务器上,一旦过了年了,需求变小了,那些服务器就不再用了,电信公司可以把服务器又交给其它的再来用。
所以,我觉得应该架设一个12306的公有云。但是第一步是我们跟电信公司已经谈好了这样的合作方法,首先尝试一些规模稍微小一点的项目,比如说淘宝的促销活动,然后请铁道部这边看看这个运营的方式,是不是可以采用这样的方式来做。
最新资讯
热门视频
新品评测
+1 你赞过了