2012的双11已然在众多网友的抢购声偃旗息鼓,那国内众多的商家都想紧紧抓牢这次绝佳的促销机会,京东,苏宁易购,当当以及众多一二线的电商纷纷推出促销活动。那么根据阿里系的最新数据显示,本次双11支付宝的总额达到191亿,淘宝和tamll(天猫)各自都有不俗的斩获。
那对于阿里系最重要的电商平台之一的淘宝和天猫,此次可谓是大放异彩,再次验证了自己的实力,这次也成了淘宝的双11华尔兹,本次双11活动一共支撑了超过2亿网民的购买行动。那么淘宝到底牛叉在哪里,我们权且偷看一眼。
我相信最近搞的火热的小米手机抢购应该博足了大家的眼球,但是有很多的网友一直抱怨小米的抢购太坑爹,一到抢购时间就会卡死。当然小米的web工程师也和大家解释说一直在改善,我们可以大体估计一下,小米的抢购最大在线可能会达到几百万甚至千万,那么对于一个web架构不算很强大的小米来说,仅凭单机server或者分布式数据库也许不够。
有的同学会说了,几百万甚至千万的访问级别这么大,网站崩溃掉也算是正常了,那么我们看一下淘宝的访问级别,淘宝每天平均的访问量达到百亿级别,为了显示醒目我给大家列一下数字10,000,000,000。那么淘宝是如何应对这么大的访问量而不至于崩溃的呢。首先在淘宝有无数顶尖的web工程师每天都在不断的努力和钻研,他们对于技术的应用和创新不断刷新着淘宝的技术金字塔。不含糊的说,淘宝的web技术架构在国内已然处于领先地位,他每天处理着中国最大量的图片和相关数据展示。在此,我们也可以稍微的敬佩一下那些拿高薪技术牛人们,这也再次印证了一个道理,丰厚的物质回报永远是给创造最大价值的人。
好,废话不多说了,首先我们从几个方面来阐述淘宝的复杂架构。
1、web server
淘宝的server之一使用的是Tengine,他们主要用这个服务器来处理静态页面,php动态页面,做方向代理和负载均衡。这可以说是Nginx的一个变种,但这是淘宝的工程师改良过的版本。本身Nginx就是一个处理高并发具有很好表现的反向代理服务器,淘宝又针对自己的业务需求增加和改良了很多模块,比如动态加载模块,浏览器和爬虫的判断优化,Lua模块的优化等。针对运维的易维护性,Tengine也做了很多改进,例如编译方式Tengine变为核心模块静态编译,功能模块各自编译,动态加载,摒弃了Nginx的每次静态编译。还有Tengine对后台连接数进行了优化可以针对后端服务器进行配置,除此之外还有一些例如CPU亲缘性,过载保护、健康型检查等友好的功能。
Tengine与2011年12月正式开源,目前有专门小组负责维护和开发,当然Tengine有如此好的性能是因为有了Nginx这个巨人。目前一些中等企业级别以上的web应用很多也在开始使用Nginx替代apache作为展示静态页和php动态页的后端服务器。
2、搜索引擎
百度的搜索引擎应该都很受大家的称道,那其实呢,淘宝的搜索从技术架构层面完全不逊于百度,通过淘宝最初的搜索引擎架构到目前,淘宝已然经过了浴火重生的华丽转变。
如果你有一个商品数据库,有成千上万条数据,那么你完全可以”select * from table where name like %keywords%”这样的数据或者全文的match索引来查出你要的数据,可是哦我们刚才提过,淘宝的商品会达到百亿级别(10,000,000,000)哦,这么大的数据量,数据库存放都已经成为问题,如何在使用那条坑爹的sql语句呢。
这里我们就会使用到分布式数据存储,这里我们可能会使用到一些很地层的东西来实现搜索引擎的架构,因为我们知道越接近应用层,效率会会越低。搜索引擎的作用会避免我们直接搜索数据库,它们会为数据建立IR索引系统,这样就可以快速的搜索出商品了。那这样是否可以了呢,答案是否定的,当我们在搜索时,谁的商品会显示在第一页呢,这个问题的答案可以让一群顶尖的算法工程师奋斗终生了。
3、页面展示
当你打开一个页面的时候,如果让你等上个30秒钟,你是否会觉得不能忍受呢,我想大多数人是不能的。当我们打开淘宝的时候,网页响应速度在你肉眼不能察觉的瞬间已经打开了(当然你的网速处于正常),在淘宝单个页面的每天的访问展示此时达到50亿以上的时候,如何做到呢。
首先这些请求决不能直接请求到数据库和web服务器上,如果这样做你的web应用瞬间崩塌,那单机服务器和简单的分布式数据库是不行的。之前我们提过的Tengine是一个好的解决方案之一,它是做反向代理和负载均衡的利器。那除此之外,squid和varnish等一些web端的缓存也是必需的。同时,大规模文件的分布式存储也是要的,你从你的商品页面看到的大量信息甚至是浏览记录这么小的东西,都可能是从缓存中取得。
4、文件存储和传输
假设淘宝的单个页面的商品页面与10个图片,那么50亿的商品页面会有多少图片需要存储和传输呢。如何从这么多的图片找到你需要的一张呢。假设仅仅是硬盘读取,你需要多久,在亿级网民访问的情况下。那淘宝和其他的电商大鳄一样有自己的文件存储系统,类似以google的GFS和腾讯的TFS。
5、运维体系
这么大的web系统,需要多少台服务器呢,上万台?no,这是个零头,在摆满各种服务器和布满各种数据线的数据中心中,服务器已成为一个个小的节点,支撑着整个web系统。在这里,我们会对没一个节点的健康状况,包括os内核优化,java虚拟机和动态模块的优化等。
Okay,除了这些,支撑整个阿里系的web模块举不胜数,运维这样一个系统,需要无数顶尖的开发工程师和默默工作的开发者,当然,我们并不是说这些技术有多么的高不可攀,只是当你的应用规模和数据量达到一定层次之后,任何小的问题甚至是你曾经认为琐碎和可以忽略的问题都会要你花时间和经理去解决部署,在这样一个庞大的系统下,你需要对每一个小问题进行改进。
好了,时间关系,先到这里。