http://articles.csdn.net/plus/view.php?aid=312029
2月18日,CSDN在北京举行了TUP第19期活动:大数据系列研讨会——从12306谈起。本次研讨会汇集了来自百度、豆瓣网、搜狗、淘宝、土豆、凡客诚品、新浪微博、IBM等公司的众多业内技术高管,就大数据及海量并发用户网络的需求分析、架构设计、产品研发、系统运维等话题和与会者进行了深度探讨。与会者包括来自互联网/IT公司技术高管、研发精英、运维管理、对高并发网站解决方案有研究的技术人员,共计三百人参与了此次研讨会。本次研讨会分为上下午两部分,上午为高端讨论,下午为集中讲座。
在下午的讲座上,针对网站在突发高负载和高增长的情况下,如何承载巨大访问量,来自百度(移动·云)的首席架构师林仕鼎、来自淘宝产品技术交易平台部的双11技术保障负责人唐勇、来自美国卡内基梅隆计算机机器人专业博士——面向移动云计算创业人邓侃,三位业内技术精英分别阐述了自己的观点并带来了相应解决方案和技术讲解。
淘宝产品技术交易平台部的双11技术保障负责人 唐勇
以下是 淘宝产品技术交易平台部的双11技术保障负责人唐勇的演讲实录(仅供参考):
大家好,我是淘宝伏威。因为从“12306”事件开始,看到了很多评论,也有很多想法。今天下午讲一点什么?还是从淘宝自身开始说起,后面自己提了一个“12306”解决成分。首先感谢一下林仕鼎,他前面那个PPT,里面很多点可以告诉你在淘宝里面的经验教训,当时怎么考虑?他归纳总结非常详细,非常有体系。后面说如果慢慢发现这个里面,基本上可以解决很多问题,原则、思想、理论可能都在这个里面。
我的主题是实践和实战,这是2011年双11的数据,我们官方有报道,也不是什么内部东西。零点刚过的一分钟内,有342万用户跑到淘宝商城,零点8分淘宝商城支付宝交易额突破1亿元。双11他们说有什么特点?没有什么特别,就是淘宝商城全场搞了一个5折大促销,这么一个活动,所以说这个诱惑力还是很大。其实双11零点那一秒,它承受的压力,和“12306”,凌晨7、8点卖某一个时间段的票是一样的道理,所有人蜂拥而至。
双11,我们窗口一开,我们自己人都进不去了,确实全国人民的热情太疯狂,主系统几千台服务器已经没有办法接待他的流量。最后得出淘宝的经验,你系统做的是否好,在这个时候你死得比别人快,恢复的比别人慢。
09年的时候,我们是开发源不知道有双11活动,造成一个雪崩的效应。2010年准备了一下,公司广告费用都投进去了,就成立了一个指挥中心,只有7个人。我们做各种降权措施,把一些不重要的系统下线,保证主交易流程整个看商品,你的付款,你的交易能做成功,这就是我们的原则,其他该停就停。运营部人跑上来你怎么把我这个业务停掉了。
2011年开始认真准备了,整个双11和双12保障加在一起,将近80个人。把这80个人可以再造半个淘宝的交易,那个水平没有任何问题。其实我们是认真对待,那天我们也享受了,出了一些小问题,这个享受过程是技术人员那种骄傲和自豪感。
2010年和2009年是无知者无畏,到了2011年这个品牌被大多数人接受的时候,这个时候有点疯狂了。其实就是整年技术优化的考试,对系统极限压力的真实测试。我们有一个曲线,到了一个临界点的时候,就会崩溃。这个发展阶段时候,我们会对系统容灾降级措施的检验,也是一个见证奇迹的时刻,基本上哪一天,基本天天都有高潮,因为我们整个指挥部里面有10个人。还有就是开心购物的时刻,如果你技术准备好,可以去购物。
但是,工作在平时,你平时技术特好情况下,我们称之为等死的一天。2010年的时候我们准备不够充分,那一整年我们做了很多措施,也幸好有那些。但是到晚上那个时刻,我们给老大说,就这样了,崩了就崩了,我们做了任何事情了。对于双11来说,我们保障肯定有一些手段,在哪一天我们真正作战时刻,你需要去有哪些事情。我们包括对促销方案review,你随机访问页面,页面就会出现100块钱的现金,晚上8点的时候很多人会去抢,系统压力就会很大。整个评估下来,这个方案不能做,但是最后我们发现后悔了,我们还是有余地做这些事情的。
还有系统体检,系统稳定性,还有系统review,会不会对生态环境造成影响,还有应急容灾计划,在你出问题的时候,先关闭哪些业务。还有安全上一些问题,这些东西我们都要考虑到,用户出问题的时候,我们怎么办?我们都有措施。还有容灾演练,选一个凌晨的时候,做自我攻击一个测试,做自己一个机房宕掉。
在淘宝4年待的时间,你想到发生的,它肯定会发生的。从运维到数据库,到开发,到运营这个层面他们所有事情我们都去看。在这个指挥部里面,做这个事情就是一个运营相关,跟技术作战式,系统运维方面的一些东西。这两个里面有两个成为常态的东西,一个是系统体检,一个是容灾演练,特别是对于电子商务网站,其实我们是系统宕掉损失前,自己做的B2C网站,少卖一个东西就少赚一分钱。这个系统体检和容灾演练非常简单,平时都做。
下面就是我们讲了战时,淘宝为何变成今天的样子,因为我吃饭的时候,跟姚博士,他因为08年去过淘宝,他说了一句话,08年的时候没感觉淘宝有多大技术含量。实际我自己也说,淘宝我们并不是有很聪明的人,让我们技术能够成体系,能够有一些亮点,解决一些问题,其实还是一些因素造成。我们先抛开运气不说,其实重要两个点是业务,和业务规模,这个对技术推动最大。其实在淘宝前几年,我们基本都是以2倍速度超前跑,你技术每半年不做一次革新,这个系统肯定会出问题。
比如我们用户系统,从刚开始上线的时候,他整个访问量是几个亿,到了一年以后涨到30几个亿,一年以后我们突然有一天整个崩溃,最后我们发现什么都没改,这个系统他本身到一个瓶颈。很多你平时不管你做压力测试,他都测试不出来一些,他有一个筛段,不知道什么时候会出现?在平时低压的情况下不会出问题,一旦超过这个点会出问题。我们每半年对主要系统体检,对下半年进行业务发展。
有了一些特殊业务,业务规模成长那个程度以后,必须提升你的技术。你能堆积其也是一种能力,京东说我们要加3倍机器,其实3倍性能3倍业务能力我觉得已经很牛逼了,这里面牵扯内容很多。对核心系统余量一个预估,你加机器以后,他整个性能的变化,你都需要有一个很清晰的认识,否则你做不了这个事情。
最后是时间,淘宝是伴随着电子商务长大,其实我们现在技术建设,包括支付,包括物流体系,还有包括用户人群对电子商务一个认识,还有认可度,都是跟淘宝有关系。其实我们培养市场的过程,市场反过来给了我们一个时间,让我们做充足的准备。时间对我们也是很重要,对于现在要去获取电子商务红利的公司,反过来这个点,可能就是一个不利的点,时间对他们来说是不利,因为我们有这么大市场规模,你要做一些网站,做热点,全国人民疯了,你的技术体系能不能支撑住,这是一个大的问题。
反过来大家看社交网络,也是同样的道理,社交网络他从一个学校扩展到另外一个学校,扩展到国外,里面有一个点我觉得很理解,就是他不仅仅说他是逐步走一个过程,而是他技术准备一个过程。如果他没有办法记他流量,他开放也没有用。所以时间也是一个比较重要因素,剩下就是人了,其实我后面会说到我想获取电子商务红利公司一个建议,人比技术重要,这是你的团队,比你采用什么技术重要。为什么?因为技术去是人做的,你就算出了问题,也是人需要解决,如果没有这人,没有这个团队,你很难解决这些问题。
另外一个就是成本,成本也是推动技术成长一个很大的原因。人还有一点,就是你的技术心,做一些不同的东西出来,这个业务给你挑战,自我给你的挑战,成本是另外一个问题,我们原来淘宝是大型机,IBM200多万,每年我们光维护费用几百万给出来,还有EMC存储体系。我们最后发现,假设我们发展上5年,我们在当时业务水平上扩展到5倍,我们赚钱已经投入不了成本,我们纯粹给IBM、EMC打工了。这个时候你会发现你必须通过一些廉价PC体系解决问题,这个时候发现对你技术挑战很大。
这个成本也是很重要的因素,最后归结在一起,就是运气了。这就是照旧淘宝一个主要的因素,我们也是从小公司过来,因为淘宝还不算太缺钱,上面还有一个B2C。当时有一句话,钱能解决的问题都不是问题,你要在技术说做很深储备,这个过程当中,其实我觉得我和林仕鼎也是一样,林仕鼎也是一个以解决问题为首要目标的人,他是在解决问题比较多情况下,能不能从中间抽取出来很多共性的问题,才去借套体系。首先说业务,业务导致规模增长,这个时候才是技术提升,才能业务循环。
我们发展到现在有很多图画,第一个就是享受简单、拥抱粗暴。互联网最大一个东西要保持简单,就是不要去做过于复杂,避免过度设计。甚至我们要求绝不会半年后做设计,其实你们解决当前的问题。你的业务增长了,到时候再解决都可以;如果你业务不增长也没有必要解决这个问题。一个水平的扩展,两个扩展,但是我们更强调机器的水平扩展器,而不是你的业务,做很多接口插件,这个做扩展其实没有意义。一定是先解决问题,遇到问题先解决问题,查原因,甚至弥补做解决方案。Facebook标语,比完美更重要的是完成代码赢得争论,快速行动,破除陈规保持专注,持续发布。还有容灾、报警、数据监控要在设计时考虑,魔鬼都在细节里,系统做得好就是死得比别人晚,恢复比别人快。死的比别人晚,恢复比别人快也是一种能力。你如何保持在极限之下运行,你如何做,当时我们也想过很多办法,包括从源头用户的访问开始做起,告诉他系统压力过大,直接把他屏蔽掉,不会对后面产生压力。
所以这些都是有些丑陋,我们也没有用过。因为我们现在有很多开源软件,淘宝也做了一些自己的软件。但是不管用什么开源,还是自己做一点很重要,就是你能不能控制住他,当你出问题的时候,你知不知道哪里出问题,当你出问题的时候,有没有人很快解决他。我在开源软件的时候,要求把整个源代码读掉。
你在做业务系统的时候,刚开始定制比较好,第一个满足你的业务需求,第二个你自己可以控制,你知道下一步如何改进,甚至出问题的时候怎么弥补,这些都是经验。
拥抱粗暴这个解释一下,我们在做容灾的时候,在做系统一些非关键系统隔离的时候,这时候有些事情就是很丑陋,你首先解决问题,你不要管他是否优雅,当时解决掉你不要写一套代码,因为你写一套代码可能问题会更大。
对一个电子商务企业,我们解决这4个问题,高稳定性,高数据安全性,高可用性,还有高容量、高性能,高并发处理能力。比如双11零点的时候,并发能不能坚持下来,能不能做到很快恢复。其实后台服务器都可以用,只是说我们让他范围处于极限自下运行,有些人就会被排除在外。然后你的高存储容量,低响应时间,我们单系统访问在2个毫秒以下,一次请求不要超过100个毫秒。另外一个低成本,包括硬件成本,还有人力成本,硬件成本避免使用一些高端东西,你能不能用最简单PC自己定制服务器解决。在人力成本上,你能不能找你最好招人的技术。
另外一个,你在使用开源软件的时候,这个软件社区是否足够强大。为什么我们用HDF,这就是在人力一些要求。然后还有可水平扩容,还有加机器也是一种能力。其实他解决两个问题,一个是读和写的问题,在你高并发的情况下,你怎么区别对待。我们考虑读写分明,写的问题可能最后就是落在数据库上,不管用什么?他都有一系列瓶颈存在。你在加机器对原有资源消耗,不会说消耗一些空余的资源。
我们最后解决的问题,都是这样,所以说这个跟林仕鼎匹配比较好。这是要解决问题,而他那个要解决问题中间一些原则。
而淘宝做了哪些?其实要做这些事情不是一开始要做,因为每个公司发展阶段不一样,你在不同阶段的事情,要去干你应该干的事情,而且一定要控制你的欲望。比如你你3、4个人小公司,你要支持100万订单访问量,这个时候你优化uix也没有太大意义。我们一般说1比20个市盈率,我们去年一年整个技术改造,在成本这一块降低,就是不用一些高端设备,基本上为整个公司节省了4千万成本。这4千万成本乘以20倍市盈率多少?是8个亿。
所以说我们应该该做的事情做该做的事情,要控制欲望,不要让技术那颗星太过于发芽。Mysql我们现在做的很好,我们现在保证他平稳不出问题,其实对于一个数据库来说,他挂起远远比他死掉危险性来得更高。唯一办法我们想就是重启服务器,远远比他放在那里带的危险性越小。这个里面也会讲到资源隔离的问题,你怎么保证出问题的时候,虽然并发你可以考虑前后加锁,放特定一些数量连接进去,其他连接就直接屏蔽掉。
还有我们的Tair,就是缓存,他可以做到缓存加存储两个实现。还有notify、TDDL,我们现在本身可以做到主库备库延迟在10毫秒以下。刚才我们说到在做数据复制的时候,还有一个在这个过程中,还有一个重新做垂直化分片过程。比如说我们对商品,肯定有时候按照内幕快源,在地域中又是不一样。还有服务注册、发布和调度,一个分布式集群需要提供帮助,服务注册发现里面服务还是分等级,这个时候我们服务注册发布调度,我们会定制意见,我们会探索索引,内存,磁盘缓存。你可能底下硬件体系不一样,用随机读这种可能好一些。其实很多时候,因为我觉得我们是使用主义者,我们是为了解决问题而存在,不会平白无故开发一个系统。对做业务系统人一个要求。
这个是一个技术历程,淘宝用架构是什么?你会发现相当简单。中心化时代,就是F5+Apache+Jboss+Webapp应用,数据库,最后服务化时代,垂直、横向水平拆分,其实这就是对你业务数据做垂直,做一些拆分的工作,去IOE主要是成本的问题。其实现在X时代,就是规划上来,很多就要考虑,如何降低运维成本,如何做数据监控,如何做大规模数据分析处理,还有云计算,云部署。
比如说我们现在有上万台机器,我们交易都会发生在白天,白天购买人很多,对于这些机器来说,晚上是空余的。我们可以考虑关掉一部分机器,你关掉一部分机器危险性远远比他放在这不用要高。我的经验是故障率会提高,而且你对一个系统启动成本也会提高,你能不能不重启,你可以隔离一部分机器做纯运算的事情。这样你的机器会被充分使用,这个时候你自动化运维很重要。
这是大致架构,这个是标准体系,这个里面有很多东西没有体现出来。包括你这个服务之间一些发现和处理,你如何做到多个机房之间交互等等,这些都还是没有说到。我提出这个只是想说明,当你确认一个架构的时候,只要他不太离谱,你的业务都是能走下去,当你业务扩展到需要的时候,你需要找到对的人,你这个团队在这个过程中也会成长起来。
这是享受电子商务的红利,电子商务基础建设完善,包括从渠道、物流、支付,网络购物人群。现在供应商,麦包包,他可以给京东供货,也可以给当当供货,为电商存在的渠道商,包括做运维、TT这些,这种代运营公司都很多,都可以找到。而且网络购物人群,包括从他的认可程度,支付手段都已经非常完善。这个案例就是京东和当当,还有“12306”,“12306”是刚性需求,他不是创造需求,我们做B2C网站还是在创造需求,我们开商店用户来买是他觉得可以买,但是对“12306”来说,是人们必须买,他是一个卖方市场,不是一个买方市场。
你要去享受电子商务红利,现在整个电子商务购物环境已经比较成熟,购物人群也是在那里。消费一个需求也是很刚性,这个刚性都是人们需要,这个时候你怎么去做?其实对大家来说是技术团队,大家都知道豆瓣,豆瓣服务器他可以支持上百万一个PV访问,他用什么技术?是用Pais技术。你用任何一种技术,重点是你那个团队能够把他用好,并不是说他彻底之间有什么差异?这个我觉得都不存在。我们重视技术,团队取胜。
然后业务驱动,我们首先是解决业务问题,其实生存是第一位,这个跟技术有点违背。因为我以前自己创业,在创业之前我都是骂老板,工资给的比较低,自己当老板以后觉得生存才是第一位。因为我之前在曼所科技(音译)跟李锐一起做,半年我们就倒下去了。业务需求先解决业务,生存下来,尤其业务发展壮大都是一个契机,这个过程中其实你业务成功了,你才能通过技术解决问题,在淘宝也是这样。我们业务发展很快,我发现技术必须改,到一定的时候发现技术已经改得很快了。
控制技术欲望,解决问题保持简单,你去处理业务问题的时候,你思维方式不一样,你从另外一个层面学习了技术,不太一样。因为纯技术和你为业务解决问题,还是有所差异。在没有准备好之前,不要触发热点。因为购物人群是在,你要去搞大规模促销,这是赤裸裸的金钱,用户的吸引力会很高,他会来访问,访问你能不能承受这个压力。因为这个压力宕掉,远远比你不做这件事情来的影响要大。如果要触发热点,真的要做了,千万别在钱上犯错。
比如淘宝写错价格,我买完以后,发现本人10块钱的东西,他是100块钱,别人不发火了,这里经验就是我们不在钱上犯错。包括你修改价格我们也不接受,这都是商家自己去做。
其实这是一个比较好的时代,现在电子商务行业还是一个朝阳行业。它确实还是一个朝阳行业,他还是有很多事情要做,不管从平台层面,还是从细分市场层面,还是有很多事情要做,所以创业还是比较好。在这个过程中,首先大家要记住,现在技术很重要,要在这个上面做好准备。
最后就是对“12306”分析,大家记住这个不是真的解决方案,这是一个可以解决的技术问题,而且可以被解决很好。我们看了一下,这是我在网上找到一份资料,归结下来就是通过互联网销售997万张,每天约100万张,我们都知道铁道部用了很多小型机,用小型机就可以消掉这个量,我们淘宝来做。这是我一个解决方案,基于几个假设,第一个假设是我尽量不去对他原有体系更改。第二个假设,他一部分票可以被彻底独立出来,如果这两个未基础,其实要解决这个问题,还是比较方便。
第一个就是他原数据库不管,他有电话出票系统,窗口出票系统,我也不管,但是有一个票务分配、同步、管理系统,有一部分跟互联网的票独立出来。在这个里面,我分成几个系统,我们要解决两个问题,就是读和写的问题,对于写的问题,是把所有票全部放到内存里面,而且我也计算过,我们以卖10天的票,有1千万张票全部把他所有信息放到内存缓存,我们需要一台,不超过24G台的服务器,就能把他全存完,我们为了容灾,为了保证他能够不会出现特别大的热点,这个我们可以在内存缓存里面做一些垂直分片。比如按照上海、深圳、乌鲁木齐,以他起始站点列车号来做分片,把热点非热点都放在一起,这里有划分一个过程。
因为写还是要写到数据库里面,这个我也同类似做水平性柴隔阂划分,把他做成数据库集群。比如我用4台小型机存他,最后我会把用户交易查询系统把他分开,对于查询全部他其实来查我有哪些空余的票。交易的系统会写内存缓存,这有一个带版本过程,因为我在买票的时候有一个站票过程,就是这张票占住了不能再卖,我真的交易完成以后,我会把内存缓存数据刷到网络数据服务器。还有用户、交易、查询,千万不要把很多业务放在同一个里面。
我这里还做了一个排队、抽签、应用服务器集群。云峰(音译)写了一个专门排队,这个问题解决网络黄牛,因为这是一个猫鼠的游戏。所以说你最后还是考虑如何打击黄牛,他通过技术手段,通过身份证处理掉,这是一个很大的手段。这里有一个防作弊的体系,就是排队、抽签、应用服务器集群,这也是一个比较卑劣的手段。
这张页面回到主题,就是实践和实战,首先我是觉得还是要感谢“12306”,其实作为一个铁老大,是中国最大垄断系统,他能走出这一步我觉得值得肯定。我觉得我们是在喷气他这个系统,还是要感谢他有便利让我们去买票。整个铁路还是发展比较快,恭喜他们开发团队,他们会成为一家比较牛逼的开发团队,他们有这个机会。
其实重点是去做,有些东西是研究不出来,虽然现在有很多成熟的经验和理论,不需要你研究的,你真正需要把这个系统实现掉。坐着空谈的人是实现不了这套系统,真正动手去做这套系统的人,才能做出来。谢谢大家。