12306系统高性能高并发架构设计遐想初稿
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9
© 2012 IBM
12306 互联网售票系统的最大特点 4、通过公开数据可以看到铁路在春运期间是2.3亿人次,再按照出行高峰期来看 也就是20天,也就是说每天的火车票数量可以近似的认为是近1000万张。如果 我们的12306 系统是非常强悍(快、高效、稳定)的话,12306系统将会售出的 票数为大部分(例如700万张),这样的话700万张票如果一放出来会被在几分 钟内全部被抢完(如果按照人的习惯的话买一张票最好所费的时间是10分钟)。 也就是说12306系统的处理能力是每秒能处理卖出(700万/(10 分钟*60) =1.17万)张票,反映到事务的话更加恐怖。这种XTP(极限事务处理)处理能 力如果按照一天八小时高峰运转的话就是(1.17*3600*8)=3.36亿笔/天 5、通过上面的一些内容分析我们可以很容易看出12306 互联网售票系统的最大 特点就是几个: 1、如果我们的12306 系统是非常强悍(快、高效、稳定)的话,放出几百 万张票的话,几分钟就会被上千万头“恶狼”甚至更多给抢完,但是卖完后 12306系统在这一天剩余时间就没有啥价值没啥人去访问了。如果他的处理能力 按照每天全速运转的话所体现的笔/天 这种单位的话将会是银行的上百倍甚至上 万倍。 2、峰值的时刻并发量太大了,可能会有上千万头“恶狼”甚至更多会同时 访问。这个是很多银行系统的上千上万倍。
登录请求和应答队列集群查询余票请求和应答队列集群预定请求和应答队列集预定订单确认请求和应答队列集群预定订单支付成功处理请求和应答队列集群消息队列系统集群余票查询服务集群车票预定服务集群支付确认服务集群登录服务集群获取请求处理消息分布式高速内存缓冲集群memcache用户session数据数据库多个数据库集群和多个单个数据库实例本地内存缓冲本地内存缓冲本地内存缓冲本地内存缓冲其它服务集群本地内存缓冲处理结果消息分布式高速内存缓冲集群memcache2012ibm53腾讯淘宝新浪微博互联网售票web应用系统应用架构登录请求和应答队列集群查询余票请求和应答队列集群预定请求和应答队列集预定订单确认请求和应答队列集群预定订单支付成功处理请求和应答队列集群消息队列系统集群大量互联网用户cdn静态内容请求动态内容请求请求均衡负载设施互联网售票web应用集群分布式高速内存缓冲集群memcache用户session数据发送请求处理消息获取处理结果消息2012ibm54我们假设几个解决方案2012ibm5512306互联网售票数据服务系统集群12306互联网售票web应用用户信息服务余票查询服务预定交易服务等数据服务这些服务接口为restjson二进制协议服务接口禁止使用soapxmlrestjson二进制协议服务接口用户直接访问我们12306由我们平台解决cdn超大量等用户访问的一些问题
18
© 2012 IBM
现有12306 互联网售票系统的问题根源 就是由于功能逻辑上简单让很多实现人员对它比较轻视,使用传统的设计理念去 应对,却没有预料到他在春运高峰期间所面临的并发压力是如此吓人,这种并发 压力如此吓人到让应用系统性能急剧退化,导致现有的12306系统的问题。
19
© 2012 IBM
12
© 2012 IBM
12306 互联网售票系统的最大特点 6、然而幸运地是12306 互联网售票系统的功能模块很少,也就是下面动画所示 的几个而已。
13
© 2012 IBM
12306 互联网售票系统的最大特点 6、然而幸运地是12306 互联网售票系统的功能模块很少,也就是下面动画所示 的几个而已。
14
© 2012 IBM
12306 互联网售票系统的最大特点 7、但是由于功能逻辑上简单,却让解决如此吓人的并发压力确实可行的。
15
© 2012 IBM
12306 互联网售票系统将来会遇到的问题还是压力 1、12306 互联网售票系统是一个互联网的应用,是要让广大普通老百姓能够很 方便、很快速地进行使用就能够完成购票。而现在很多广大的在35岁以上的离乡 背井的打工一族,是不太会使用互联网售票系统进行购票的,他们听说通过网络 买票很方便以省去寒冬中彻夜排队的痛苦,都立志要好好学习下准备在2013年 买票,这是一个很大的群体如果都学会了那2013年春节 12306互联网售票系统 的压力将更大。
6
© 2012 IBM
12306 互联网售票系统现状描述—现有系统的能力和问题 1、此系统在平时运行的表现是正常的,但是在现在春运的时候由于大量的用户 想通过互联网售票系统方便地进行订票。导致此系统的峰值的并发用户太高,导 致一系列的问题: 1.1、用户基本上很难登录成功,总是提示当前用户数过多。让人非常的懊 恼和恨,没有运气和耐心是很难登录进去的。 1.2、即使用户登录进去后,进行查询余票和订票交易也是让人奔溃的,一 个字就是“慢”。 1.3、用户完成订票后,内心中充满着激动;然后去进行支付票款以让自己 能够享受春节坐火车回家的喜悦,但是发现要在规定的时间内(例如45分钟)完 成支付,又开始新一轮的煎熬。并且即时系统提示支付成功后,也发现还是有问 题无法获取火车票。大多数用户都要开始骂娘了。 1.4、如果登录成功进入进行查询余票和进行订票的时候如果出现一些问题 (例如自己在浏览器点错按钮(例如点击刷新按钮))的话,那又要重新登录登 录,煎熬啊! 用一句粗俗的话概括此系统就是“你这个系统真TMD的慢和烂” 2、当然此系统也不是一无是处,仅仅是在峰值时刻表现太差,但是系统在平时 运行的表现是正常的,如果把此系统放在绝大部分应用场景上的话是成功的。其 实很多技术人员都知道此系统在一定负载量(不是峰值时刻)的表现还是比很多 很多所谓的企业级应用在性能方面的表现还是强不少的。
8
© 2012 IBM
12306 互联网售票系统的最大特点 1、在春运的时候,由于火车票的超高性价比和相应的方便性(对广大的贫苦老 百姓来说),每一张火车票都是稀缺资源和紧俏商品。所以几百万、上千万甚至 更多的人像恶狼一样等着12306互联网售票系统放出的余票进行开售的时候,疯 狂地涌入系统中进行点击以买到票。 2、就是上点所说的事由, 当12306每天开门迎客的时候突然涌上几百万、上千 万甚至跟多压到12306系统上进行抢票,但是由于12306现有应用的问题导致很 多人根本登录不进入,并且登录进去的人查询余票和订票、支付的时候也奇慢无 比。而登录不进去的人就在网页上徘徊不断的点击以等待到登录成功所带来的喜 悦、甚至很多人通过机器人来进行登录、查询余票、订票等操作;这样其实就更 加增加了无谓的压力导致PV量疯狂上升,一整天(凌晨六点到晚上22点)都是 高峰期。很多问题都是由于12306现有应用的问题才产生的。 3、通过公开数据上来看,12306 系统最高一天的卖出火车票的数据是188 万张, 这个乍一看好像压力是不大,但是通过上面2点的内容看, 如果12306 系统的 XTP(极限事务处理)非常强悍的话让用户操作非常快的话, 188万张票基本上 几分钟就能卖完,然后12306系统在这一天剩余时间就没有啥价值没啥人去访问 了。
7
© 2012 IBM
12306 互联网售票系统现状描述—现有系统的能力和问题 3、由于现在12306 互联网售票系统的慢,导致网络上出现了很多程序机器人刷 票,导致12306互联网售票系统更慢。 4、我们都可以通过公开数据可以看到这个系统的访问量都超过了14亿次PV,但 是这么大量的PV很大一部分来源于系统慢,导致很多人不断在上面通过手工刷 和通过机器人程序自动刷产生很大一部分流量(到底有多少流量是这个问题导致 的没有统计数据可查)。例如正如公开资料的信息显示由于现有系统的处理能力 有限所以采用相应的机制,让用户经常看到““当前访问用户过多,请稍候重 试”、“对不起,当前提交订单用户过多,请稍候重试”或“系统忙”等提示” 这种信息,这种信息的出现更让用户焦虑,不多刷几次简直对不起自己 5、当然如果12306互联网售票系统做的好的话,可以减少现在遇到的问题所导 致产生的无谓的流量和所需要消耗的资源;这样的话压力会更加平稳。
17
© 2012 IBM
12306 互联网售票系统所能够带来的社会效益 1、让广大的普通民众享受互联网技术所带来方便性、让各种群体(特别是广大 年龄段的背景离乡的打工群体)能够很方便地买到春节回家的票,以省去寒冬中 彻夜排队的痛苦和降低很多的焦虑感。 2、大大地打击票贩子,看到票贩子就让人痛恨。 3、让社会和谐、大大改善铁道传统设计理念-现在12306系统部署架构猜想
很有可能是这样的,很可能使用的是一个数据库集群系统。
21
© 2012 IBM
传统设计理念所带来的致命问题 1、这种架构的应用系统,如果使用好的硬件设施(大内存、SSD、高速网络 (例如万兆网/Infiniband网络),代码质量优良的话、调优(例如数据库调优, 硬件调整,操作系统调优,中间件调优)做的好的话,以及有较好的技术人力资 源的话,应对几十万级别的并发用户应该还是能够应对自如的。但是现在12306 系统在2012春运和将来的春运时期所面临的挑战是几百万级别的并发甚至上千 万的并发(个人所产生的压力和大量机器人模拟产生的压力),不对这种传统的 应用架构和数据架构进行优化的话将无法应对。
10
© 2012 IBM
12306 互联网售票系统的最大特点 6、然而幸运地是12306 互联网售票系统的功能模块很少,也就是下面动画所示 的几个而已。
11
© 2012 IBM
12306 互联网售票系统的最大特点 6、然而幸运地是12306 互联网售票系统的功能模块很少,也就是下面动画所示 的几个而已。
5
© 2012 IBM
12306 互联网售票系统现状描述–用户数 1. 根据现有的公开数据,在12306互联网售票系统 中注册的互联网用户数为1400万。 这个用户数看起来并不大,跟QQ、淘宝、微博等互联网系统的用户数相比是很小的。 2. 这个用户数的群体主要集中在能够熟练使用电脑和互联网的群体,例如工资领了 等于白领的白领一族o(∩_∩)o 、学生一族、出门在外打工的部分年轻一代。 3.根据相应的统计数据,中国的流动人口为2个亿,这些流动人口是春运期间通过互 联网售票系统享受所带来便利的最大群体,而现在这部分人是有很多人是没有成为 12306互联网售票系统 中注册的互联网用户。 4.如果12306互联网售票系统 做得非常强劲的话, 12306互联网售票系统 中注册的 互联网用户将非常快速地增长,增长到亿级规模的机率非常之大。
16
© 2012 IBM
12306 互联网售票系统应该具有的能力 1、但是12306 互联网售票系统是一个互联网的应用,是要让广大普通老百姓能 够很方便、很快速地进行使用就能够完成购票。他至少要有以下几个特点: 1.1、 12306 互联网售票系统应该是一个具有良好用户体验的系统,粗俗点 说就是UI 具有美感、操作方便。 1.2、12306 互联网售票系统应该非常好的支持智能手机,让用户能够通过智 能手机(andorid、iPhone)、平板电脑上的本地应用很方便的进行使用完成购 票,而不是现在通过wap或者手机上的浏览器进行完成。 1.3、 12306 互联网售票系统应该是一个高性能、高伸缩性、高可靠性的系 统,可以在高峰期(例如春运时刻)增加机器能够应对高峰期的峰值用户群,粗 俗点的说法就是“在春运时候,你可以比平时慢点但是不能像2012年春运时候 这么慢啊”;在非高峰期减少机器,从而降低没有必要的能耗、空间、运维等成 本 2、让12306 互联网售票系统承担更多火车票销售的任务,让传统的渠道(例如 车站和代售点)窗口和电话预定中心的压力大大地降低。根据统计数据现在 12306 互联网售票系统的售票比例只有11%,如果能够提高到占50%以上甚至 更高例如70%的话,那将对老百姓是一大好事。 3、一定要控制住不要让机器人自动登录、查询、刷票,以阻止大量的请求产生 浪费资源和拖垮我们的系统
4
© 2012 IBM
12306 互联网售票系统业务功能猜想 由于没有正式详细的业务需求文档,只能从购票网站后其它渠道猜想出12306 系统 的互联网售票的业务功能模块分类如下图所示: 用户中心 1、登录 2、查询余票 3、完成订票 4、进行支付 票款支付 5、通知用户 订票成功 订票通知 余票信息查 询 订票交易
12306系统高性能高并发设计遐想
软件架构师 Weibo:@景文童 童景文
© 2011 IBM
Agenda
12306 互联网售票系统为什么会这么慢
应对之策遐想
2
© 2012 IBM
12306互联网售票系统业务流程
3
© 2012 IBM
12306互联网售票系统业务流程 1.从用户操作角度来看,这个业务流程是非常清晰的。主要几个功能点就是:注册用 户、查询余票信息、确认订票、支付票款、安全控制、取票。除了取票操作由用户 到售票点/取票机器完成的话,其它的功能都在12306 互联网售票系统中实现。
传统设计理念 在建设企业级应用绝大部分的设计者的一个理念就是: 1、对于高并发、高性能的系统的固话思维就是我用一大堆好机器堆起来,用这 些机器做数据库集群(Oracle RAC/DB2 PureScale)、应用服务器集群(WAS Cluster/Weblogic Cluster)。 2、用J2EE架构中一些传统的模式例如SSH(Structs、Spring、Hibernate)把功 能给做出来,部署到数据库集群和应用服务器集群上去。把很多的压力都压到数 据库上面去 3、12306 系统不是互联网应用吗?我加一个CDN 设施让用户能够更快地访问 系统。 4、并不特别关注高性能、高可靠性、高伸缩性的应用架构设计、数据架构的设 计和相应的代码质量。