《淘宝技术这十年》读书笔记

来源:互联网 发布:淘宝网卖面膜 编辑:程序博客网 时间:2024/05/30 13:42

很有价值又很好玩的一本书,可以全面的了解淘宝的技术升级路线。

豆瓣读书

从工程师的角度讲述了淘宝的成长历程,还有几次技术变革的前因后果。

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。

IOE分别是IBM、Oracle、EMC,更确切地说是IBM小型机、Oracle数据库与EMC存储设备的组合。这三驾马车构成了一个从软件到硬件的完整商用数据库系统,可以说是同类产品中的最佳组合。
OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统。OSGi服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选环境。Java提供在多个平台支持产品的可移植性。OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语。

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/