淘宝技术这十年(子柳著)读书笔记

来源:互联网 发布:都玩网络手游 编辑:程序博客网 时间:2024/05/20 06:27

我在2013年6月15日买了《淘宝技术这十年》这本书。由于一直亲睐淘宝强大的技术,所以当我在亚马逊看到这本书就毫不犹豫的买下了。花了一周的时间看完了这本书。以下为

我在2013615买了《淘宝技术这十年》这本书。由于一直亲睐淘宝强大的技术,所以当我在亚马逊看到这本书就毫不犹豫的买下了。花了一周的时间看完了这本书。以下为自己看书做个笔记,以方便以后查看。

1,至2011年年底,淘宝网拥有全国最大的Hadoop分布式计算机集群之一。

2.淘宝的搜索引擎能够对数十亿的商品数据进行实时搜索,另外,还拥有自主研发的文件存储系统和缓存系统,以及java中间件和消息中间件系统

3一些简称:PVPage View页面访问量)、UVUniqueVisitor,用户访问)、LVSLinux Virtual Server,世界上最流行的负载均衡系统之一)CDNConnetDelivery Network,即内容分发网络的作用)、分布式稳健性it欧诺个TFSTaoBao File System)、NASNetwork Attached Storage,网络附属存储)

4 用户在淘宝上买东西,搜索时常常有如下几类意图:

浏览型、查询型、对比型、确定型

5,淘宝研发了TimeTunnel,用于进行实时的数据传输,然后交给后端系统进行计算报表等操作。

6.淘宝使用框架:

6.1 淘宝是在2003510上线的,LAMPLinux+Apache+MySQL+PHP),这个知道现在还是一个

6.2 很常用的网站架构模型,其优点是:无须编译,发布快速,PHP语言功能强大。能做从页面渲染到数据访问所有的事情。而且用到的技术都是开源、免费的。

http://www.phpauction.net

6.3 数据库的改进:现在把它拆分成一个主库、两个从库,并且读写分离。这么做的好处有几点:存储容量增加了,有了备份,使用的安全性增加了,读写分离时的读写效率得以提升(写要比读更加消耗资源,分开后互不干扰。

6.4 开源的论坛系统PHPBBhttp://www.phpbbchina.com

6.5 MySQL默认的存储引擎MyISA,这种存储引擎在写数据的时候会把表锁住。

6.6 淘宝网在2004年就从PHP语言转换成了Java语言。

6.7 阿里巴巴自己用的MVC框架WebXhttp://www.openwebx.org/docs/Webx3_Guide_Book.html),这个框架易于扩展,方便组件化开发,他的页面模板支持JSPVelocity等,持久层支持ibatishibernate等,控制层可以用EJBSpring

MVC框架是阿里的WebXXX,控制层用了EJB,持久层是ibatis。后来在控制层用Spring替换掉了EJB,给整个系统精简了很多代码。

6.8 iSearch搜索引擎的原理,就是把数据库里的数据dump(倾倒)成结构化的文本文件后,放在硬盘上,提供web应用以约定的参数和语法来查询这些数据。

6.9 数据库路由的框架DBRoute,统一处理了数据的合并、排序、分页等操作。

6.10 淘宝从2006年开始决定自己开发一套针对海量小文件存储的文件系统。

6.11 淘宝自己开发了适合淘宝使用的文件存储系统(TaoBao File System

     淘宝网将图片处理与缓存编写成基于Nginx的模块,淘宝认为Nginx是目前性能最高的HTTP服务器,代码清晰,模块化非常好。淘宝网使用GraphicsMagick记性图片处理,采用了面向小对象的缓存文件系统,前端有LVS+Haproxy将原图和其所有的缩略图请求都调度到同一台Image Server(图片服务器)。

       在文件定位上,内存用Hash算法做索引,做多一次读盘。另外会有很多相同的图片重复上传上来,去除重复文件也是采用Hash算法来做的。写盘方式则采用Append方式写,并次采用了淘汰策略FIFO,主要考虑降低硬盘的写操作,没有必要进一步提高Cache命中率,因为ImageServerTFS位于同一个数据中心,读盘效率还是非常高的。

       目前淘宝网的TFS已经开源(见code.taobao.org

6.12 淘宝KV缓存系统——Tair

一般的缓存策略是不支持实时更新的。淘宝技术人员在Apache上面写了一个模块,这个数字根本不经过下层的WebApp容器(只经过Apache)就写入一个集中式的缓存区了,这个缓存区的数据再异步更新到数据库。

       2004年的时候,淘宝使用了一个叫做ESIEdge SideIncludes)的缓存(Cache)。Oracle Web Cache也支持ESIESI是一种数据缓冲、缓存服务器,它提供将web网页的部分(这里指页面的片段)进行缓冲、缓存的技术及服务。在ESI是部分的缓冲网页,使用基于XML的标记语言,制定想要缓冲的页面部分。由此,页面内分为动态地变更部分和静态的不变更部分,只将静态的部分有效地发送到服务器中。淘宝网的数据虽然大部分都是动态产生的,但页面中的静态片段也有很多,如页面的头、尾,商品详情页面的卖家信息等。

TBstore的分布式算法实现:根据保存的Key(关键字),对key进行Hash算法,取得Hash值,再对Hash值与总Cache服务器数据取模。然后根据取模后的值,找到服务器列表中下标为此值的Cache服务器。由Java Client API封装实现,应用无需关心。

       TairTaoBao Pair的意思,PairKey-Value数据对)。Tair包括缓存和持久化两种存储功能。Tair包括缓存和持久化两种存储功能。Tair作为一个分布式系统,由一个中心控制节点和一系列的服务节点组成,我们称中心控制节点为Config Server,服务节点是Data ServerConfig Server负责管理所有的Data Server,维护Data Server的状态信息。Data Server对外提供各种数据服务,并以心跳的形式将自身的状况汇报给Config ServeConfig Server是控制点,而且是单点,目前采用一主一备的形式保证其可靠性。所有的Data Server地位都是等价的..

Tair已开源,地址为code.taobao.org

6.13

TC :交易中心(TradeCenter)、IC:商品中心(Item Center)、SC:店铺中心(ShopCenter)、TM:交易业务(Trade Manager)、IM:商品业务(Item Manager)、SM:店铺业务(ShopManager,后来改名为SSshop System)、Detail(商品详情)

需要两种中间件:实时调用的中间件(淘宝的HSFHigh-SpeedService Framework,高性能服务框架)、异步消息通知的中间件(淘宝的Notify

       关于分布式的服务框架的理论基础,HSF的作者毕玄写了一篇博文(http://www.blogjava.net/BlueDavy/archive/2008/01/24/177533.html

       关于基于OSGI的分布式服务框架,一系列的博文(http://www.blogjava.net/BlueDavy/archive/2008/01/14/175054.html

       消息中间件NotifyNotify是一个分布式的消息中间件系统,支持消息的订阅、发送和消费。

       分布式数据访问层TDDL:三个主要的特性,数据访问路由、数据的多向非对称复制、数据存储的自由扩展。

6.14 Session框架:

会话保持有效,默认状况下,直到浏览器关闭,会话才结束。

Session中存储的内容包括用户信息:昵称、用户ID、登录状态等。

集中式的缓存区的Session方式。

6.15开放平台

       http://blog.csdn.net/cenwenchu79

       服务路由其实就是写一个高效的HttpAgent,服务接口标准化就是对象文本化(JSONXML

 

7.1 Oracle的性能和并发访问能力之所以如此强大,有一个关键性的设计——连接池,连接池中放的是长连接,是进程级别的,在创建进程的时候,它就要独占一个部分内存空间。也就是说,这些连接数在固定内存的Oracle Server上是有限的,任何一个请求只需要从连接池中取得一个连接即可,用完后释放,这不需要频繁地创建和断开连接,而连接的创建和断开的开销是非常大的。

7.2 PHP对数据库的访问是很直接的,每一个请求都要一个连接

7.3 开源的连接池代理服务SQL Relay(http://sqlrelay.sourceforge.net)

8 Structs1.x在多人协作方面有很多致命的弱点,由于没有一个轻量框架作为基础,因此很难扩展,这样架构师对于基础功能和全局功能的控制就很难做到。

9.题目:

抽奖系统,要求在抽奖人数能估计的情况下,系统能够即时开奖,发奖数量要均匀分布在一天的时间内,发出去的奖品不能超过预设的值,也不能有奖品没发出。

解决:

用随机数来做抽奖的种子,数字在某一个区间的时候算中了某个等级的奖,每个小时发几个奖有限额,发完之后,在这个小时内的数字即便在中奖区间也不算中,如果前面一个小时很快就有人中奖,则减小后面一个小时的中奖区间。

10.推荐书籍

《接口测试白皮书》、《玩法变了》、《触动人心》、

毕玄:《OSGi实践》、《OSGi进阶》、《OSGi原理与最佳实践》、《分布式Java应用:基础与实践》

吴翰清《白帽子讲Web安全》

赵泽欣《JavaScript语言精粹》

 

11.SIP协议实际上是解决了两个Peer(多等端)之间通信的问题,借助一个Session能够找到对方。

数据库本质上是一个单击系统,即使是做了分库分表,这些也没有改变的是单机系统的本质。单击系统导致它的数据规模和处理能力都会有一定的限制。

关系数据库的数据规模受限的根本原因是目前的关系数据库尽管有各种方式的扩展,但本质上是单机系统。

OceanBase(海量数据)做好的地方是具备事务,数据一致性很好。

12推送方式:淘宝使用的是长连接方式。

13 HTML5:除了有HTML4增加的一些语义性的标签之外,通常,我们把CSS3和很多新的JSAPI都合并起来统称为HTML5。首先HTML5标签的变化是让它更具有语义化,然后CSS3把很多展现型的东西做了加强,最重要的是新增的哪些JSAPI,现在可以在浏览器本地连接数据库、使用Socket、使用本地存储、获取地理位置等。很多我们以前开发过程中需要从后台取得的信息,现在都可以在本地浏览器中做。

淘宝是国内应用HTML5最早的网站之一。

Facebook是把体验和技术结合的最完美的公司。

 

原创粉丝点击