淘宝技术这十年

淘宝网拥有全国最大的Hadoop分布式计算集群之一(2000多个节点,CPU:24000 core,Memory:48000GB,Disk:
24000块),日新增数据50TB,有40PB海量数据存储,分布在全国各地80多个节点的CDN网络,支撑的流量超过800Gbps。淘宝的搜索引擎能够对数十亿的商品数据进行实时搜索,另外,还拥有自主研发的文件存储系统和缓存系统,以及Java中间件和消息中间件系统,这一切组成了一个庞大的电子商务操作系统

PV Page View  页面访问量 点击量 PV之于网站,就像收视率之于电视
淘宝网全网在平日(非促销期间)的PV大概是16~25亿个之间
UV Unique Visitor  用户访问  访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。

TB PB

好的架构是进化来的,不是设计来的好的功能也是进化来的,不是设计来的

MVC框架是阿里的WebX,控制层用了Spring,持久层是ibatis。

IOE  IBM的小型机、Oracle的数据库、EMC的存储   日均4千多万个PV

除了搜索引擎、分库分表,还有什么办法能提升系统的性能?一定还有
招数可以用,这就是缓存和CDN(内容分发网络)

ChinaCache是中国第一的专业CDN服务提供商,向客户提供全方位网络内容快速分布解决方案。作为首家获信产部许可的CDN服务提供商,目前ChinaCache在全国50多个大中城市拥有近300个节点,全网处理能力超过500Gbps,其
CDN网络覆盖中国电信、中国网通、中国移动、中国联通、中国铁通和中国教育科研网等各大运营商

又在研究低功耗的服务器

我们对数据分库、放弃EJB、引入Spring、加入缓存、加入CDN等工作


Google走在了前面,2007年,他们公布了GFS(Google FileSystem)的设计论文,这给我们带来了很多借鉴的思路。随后我们开发出了适合淘宝使用的图片存储系统(TaoBao File System,TFS)
2007年6月,TFS正式上线运营。在生产环境中应用的集群规模达到了200台PC Server(146GB×6 SAS 15KB Raid5),文件数量达到上亿级别;系统部署存储容量为140TB;实际使用存储容量为50TB;单台支持随机IOPS 200+,流量为3MB/s。

Nginx是目前性能最高的HTTP服务器(用户空间)

memcached 分布式缓存

TFS

Tair支撑了淘宝几乎所有系统的缓存信息。Tair已开
源,地址为code.taobao.org。


把淘宝所有的业务都模块化,这是继2004年从LAMP架构到Java架构之后的第二次脱胎换骨。我们对这个项目取了一个很霸气的名字——“五彩石”(女娲炼石补天用的石头)。这个系统重构的工作非常惊险,有人称为“给一架高速飞行的飞机换发动机”。


拆分之后的系统如何通信?这里需要两种中间件系统,一种是实时调用的中间件(淘宝的HSF,高性能服务框架),一种是异步消息通知的中间件(淘宝的Notify)。另外,一个需要解决的问题是用户在A系统登录后,到B系统的时候,用户的登录信息怎么保存?这又涉及一个Session框架。再者,还有一个软件工程方面的问题,这么多层的一套系统,怎么去测试它?

集群、分工、负载均衡、根据QoS分配资源等。

集群:所有的收银员提供的都是收银功能,无论顾客到哪一个收银员面前,都可完成付款,可以认为所有的收银员
就构成了一个集群,都希望能做到顾客增加的时候只需增加收银员就行。在现实生活中有场地的限制,而在互联网
应用中,能否集群化还受限于应用在水平伸缩上的支撑程度,而集群的规模通常会受限于调度、数据库、机房等。

分工:收银员和打扫卫生的人分开,这种分工容易解决,而这种分工在互联网中是一项重要而复杂的技术,没有现
实生活中这么简单,涉及的主要有按功能和数据库的不同拆分系统等,如何拆分以及拆分后如何交互是需要面临的
两个挑战。因此,会有高性能通信框架、SOA平台、消息中间件、分布式数据层等基础产品的诞生。

负载均衡:让每个收银台排队差不多长,设立小件通道、团购通道、VIP通道等,这些可以认为都是集群带来的负载均衡的问题,从技术层面上说,实现起来自然比生活中复杂很多。

根据QoS分配资源:部分员工仅在晚上上班的机制要在现实生活中做到不难,而对互联网应用而言,就是一件复杂而且极具挑战的事。


HSF系统
Notify

Session框架
解决集群Session共享的问题,通常有以下两种办法。
1> 硬件负载,将用户请求分发到特定的服务器。
2> Session复制,就是将用户的Session复制到集群内所有的服务器。
这两种方法的弊端也很明显:
1> 成本较高。
2> 性能差。当访问量增大的时候,带宽增大,而且随着机器数量的增加,网络负担成指数级上升,不具备高度可扩展
性,性能随着服务器数量的增加急剧下降,而且容易引起广播风暴。

简单地说,就是要么用客户端Cookie来解决问题,要不用服务端的集中缓存区(Tair)的Session来解决登录问题。Tair已在前文介绍过,Session对它的使用就不再描述了。
为什么这里还要提到用Cookie这种比较“落伍”的方式呢?
其实是因为在淘宝3.0版本以前,我们一直都用Cookie来识别用户,Cookie是放在客户端的,每一次HTTP请求都要提交到服务端,在访问量比较小的时候,采用Cookie避免了Session复制、硬件负载等高成本的情况。但随着用户访问规模的提高,我们可以折算一下,一个Cookie大概是2KB的数据,也就是说,一次请求要提交到服务器的数据是网页请求数据,再加上2KB的Cookie,当有上亿个请求的时候,Cookie所带来的流量已经非常可观了,
而且网络流量的成本也越来越高。于是在3.0版本中,我们采用了集中式的缓存区的Session方式。



开放平台

普通工程师跟着业务跑,来啥需求做啥事;文艺工程师专注于自己的领域,研究得非常精深;2B工程师跳来跳去,啥都干,啥都浅尝辄止;还有一种工程师叫牛B工程师,啥都能干,啥都精通(这种人在工程师心中叫“神”)








你可能感兴趣的:(技术)