从12306看性能测试
今天看了下51关于性能测试的视频,由于太卡了,做了下笔记。感觉还是蛮有意思的,share给大家,聊以娱乐。以下内容如果侵犯了51的知识产权,请联系我删除帖子。:L:L:L
很多人将12306跟淘宝做比较,认为淘宝双十一堪比春运订票,但从来没说过淘宝出问题。而作为国家做出来的一套系统确在春运订票高峰时不尽如人意。
其实这么看是不全面的。首先理论上说任何性能问题都能通过添加配置来解决,服务器处理不了这么多请求,我们整N台来集群,我们负载均衡不就好了吗?但是作为一个性能测试工程师来说,首先考虑问题必须是投资回报率的问题。12306一年的订票高峰期,顶多不过两个月,60天,其余300天处于空闲状态,如果为了这60天,花几亿,十几亿未免不值。但是,阿里巴巴就这么干了,作为国内最大的与服务提供商,阿里云不仅解决了双十一等高峰期处理大量高并发数据的问题,还在空余时间提供云服务,一举两得。但是12306显然不适合,难道要铁道部也成立一个铁道云?
12306与淘宝的处理模式也显然不能等同的,对于淘宝,它的商品的库存是卖家可以控制的,即使没货也敢卖出100件,但是12306就不能了。每提交一个请求都需要同步到数据库,都要进行查询,这就使得系统复杂性大大增加。
那么12306面临怎样的难题呢?作为一个B/S架构的系统,它的前端太大了,其首页的源代码达到了800~900kb,而且外部文件过多,用户一个请求需要用到70个子连接。据初略估算,12306高峰的PV(页面访问)量达到14亿,1秒请求数约210万。而世界上最先进的前端服务器只能达到10万。换成带宽需要240Gb
才能完成需要的吞吐量。现目前不知道北京的主干网能不能达到,即使能达到也不可能都给你12306吧,其他人还要不要上网了,还能不能愉快的玩耍了;P(开个玩笑了)
而解决的办法,12306采用了一种叫CND(我也不懂)的机制,页面需要加载的flash、javascript、CSS都分给服务商,而且根据用户最近的节点选择。其次,还用了缓存的技术,一定时间内发送的重复请求不会提交到服务器,比如30秒内重复刷新是不会提交到服务器的,内容都是在本地缓存的数据。
而在后端现在12306也做了异步处理,即接到请求后,不马上将之传到后台服务器,而是做一个排队的处理,当人数达到一定时,在将这些请求一起发送给服务器,做批量处理。
当然视频老师也提出了自己的意见,不知道12306是否已经使用了。那就是对数据库进行处理。第一点用性能界的话叫做空间与时间是可以互换的,传统的关系型数据库(原谅我读书少,只知道Oracle)牺牲了时间换取空间,现在反过来行之,用空间换取时间。第二点做分页处理(不懂啊,求大神详解)。第三点做镜像(依然茫然中,大神求教),镜像的另一作用还能进行故障转移。
最后总结一下吧,任何一个性能问题的根源都在于需求定位不好。如12306,其后台的票务系统是铁道部与IBM在上世纪80年代做出来的,到了21世纪,需求大大变化了,那时坐火车的人与现在坐火车的人,大家想一下就能明白。而解决的最根本办法就是根据现有的需求重新做票务系统。
:'(:'(好吧这些都是看视频来的,然后我口述一下。希望大家多交流指教。
:L第一次发帖,小白求罩 双十一期间阿里巴巴的云服务就不好使了么?
页:
[1]