从工程师的角度讲述了淘宝的成长历程,还有几次技术变革的前因后果。
1.淘宝的技术升级
淘宝建立之初对外是以个人网站作宣传,第一版一个月上线,采用LAMP架构。是修改了国外的一个拍卖系统源码,主要对数据库进行分库,读写分离(存储容量增加,备份,安全性增加,读写效率提升—写要比读更加消耗资源,分开后互不干扰);
最初只有一台服务器,随着访问量的增加,将数据库服务器独立出来,同时,增加一台Email服务器;商品检索功能最初的实现就是使用sql中的like搜索,对数据库资源消耗严重,于是使用阿里巴巴的iSearch模块替换like方式;
2003 年底,MySQL升级,采用 Oracle进行技术替代,Oracle的性能和并发访问能力
强大,关键性的设计——连接池;
2004 年上半年,淘宝决定更换开发语言,将PHP更改为JAVA,特意请来SUN公司的技术人员,开始采用EJB系统,打造了一个阿里巴巴的MVC框架WebX,易于扩展,方
便组件化开发,它的页面模板支持JSP和Velocity等,持久层支持ibatis和hibernate等,控制层可以用EJB和Spring(Spring是后来才有的) ;
在接下来的几年,围绕着提高容量、提高性能、节约成本,淘宝逐渐完成了对数据分库、放弃EJB、引入Spring、加入缓存、加入CDN等工作。并且开始创造自己的技术;
07年之前,图片存储使用的是NetAPP的文件存储系统,但未对小文件存储进行有针对的优化 ,且扩容成本高昂,网络连接数经常达到极限;在这种背景下,淘宝研发了TFS(淘宝文件系统);TFS文件系统在核心设计上改变,传统的集群系统中元数据只有1份,由管理节点容易成为瓶颈。TFS在设计规划上考虑在图片的保存文件名上赋予一些元数据信息,实际的元数据上,保存的信息很少,元数据结构非常简单。整个系统完全抛弃了传统的目录树结构。2007年6月,TFS正式上线运营。
商品分类改革,由树状节点划分创新为属性标签,是类似Tags的一个概念,并独立出相关的搜索等服务供前后台调用。
淘宝系统日渐庞大,日常修改的回归测试繁重。系统肢解和重构,用户信息模块UIC的拆分。
淘宝旅行和淘宝彩票上线,全新的业务系统开发。
2008年初,主站系统容量达到瓶颈,继续拆分底层基础服务(Trade Center,TC),千岛湖和五彩石项目,对系统架构做了很大的更改。
拆分之后的每个系统可以单独部署,业务简单,方便扩容;有大量可重用的模块便于开发新的业务;能够做到专人专事,让技术人员更加专注于某一个领域。
拆分之后的系统通信需要两种中间件系统,一种是实时调用的中间件(淘宝的HSF,高性能服务框架),一种是异步消息通知的中间件(淘宝的Notify)。还需要解决跨系统登陆保存用户信息的Session框架和整个系统的测试需求。
HSF解决了服务调用的问题,HSF是一个分布式的标准Service方式的RPC(Remote Procedure Call Protocol,远程过程调用协议)框架,Service的定义基于OSGI的方式,通讯层采用TCP/IP协议。
Notify是一个分布式的消息中间件系统,支持消息的订阅、发送和消费。
TDDL 对数据进行多库的操作、数据的整合,让上层系统像操作一个数据库一样操作多个库,还涉及数据的备份、复制、主备切换等功能。
Tbsession框架 解决集群Session共享的问题,通常有以下两种办法:
硬件负载,将用户请求分发到特定的服务器。
Session复制,就是将用户的Session复制到集群内所有的服说务器。但是性能和成本都不佳。
Tbsession框架可以集中管理服务端Session和客户端Cookie的使用情况,对Cookie的使用做有效的监管。
2.技术名词备忘录
在Oracle中,创建连接代价高昂.倾向于使用连接池来最小化登陆的开销.
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。
3.淘宝的技术创新
TFS
淘宝文件系统;
Tair:淘宝KV缓存系统
04年多隆基于BerkeleyDB开发了TBstore,一个key-value的缓存系统;
07年,多隆参考memcache内存结构,为UIC开发了TDBM,另一个缓存系统;
之后合并这两个缓存,并在此基础上进一步扩展,开发出Tair,底层支持5种存储引擎(BerkeleyDB、Redis,TT、fDB、memcache)
目前,Tair已开源;
HSF:高性能服务框架
一个分布式PRC框架,用于系统间调用
service定于基于OSGI方式,通讯层采用TCP/IP协议
Notify:消息中间件
分布式消息中间件,用于替代MQ
支持消息订阅、发布和消费
TDDL:淘宝分布式数据访问层
数据访问路由,使得数据访问对应用层的开发透明,一个表的数据可以分布在多台结点上,而应用的编码同操作单节点DB一样;
支持一次写入,多点读取
数据存储的自由扩展, 不再受限单机容量和速度瓶颈
TbSession框架
Session客户端存储,session存到cookie中
实现分布式环境下的session服务器端存储
session配置统一管理
支持动态更新
4.从大牛那里学到的
任何牛B的人物,都有一段苦B的经历。
PS:翻BlueDavy的博客时找到了他的豆瓣,还看到了大神云风,哈哈。
5.可以学到更多
淘宝JVM:http://jvm.taobao.org/
淘宝Code系统:http://code.taobao.org/
淘宝技术部:http://rdc.taobao.org/