淘宝技术这十年(子柳著)读书笔记
我在2013年6月15日买了《淘宝技术这十年》这本书。由于一直亲睐淘宝强大的技术,所以当我在亚马逊看到这本书就毫不犹豫的买下了。花了一周的时间看完了这本书。以下为
我在2013年6月15日买了《淘宝技术这十年》这本书。由于一直亲睐淘宝强大的技术,所以当我在亚马逊看到这本书就毫不犹豫的买下了。花了一周的时间看完了这本书。以下为自己看书做个笔记,以方便以后查看。
1,至2011年年底,淘宝网拥有全国最大的Hadoop分布式计算机集群之一。
2.淘宝的搜索引擎能够对数十亿的商品数据进行实时搜索,另外,还拥有自主研发的文件存储系统和缓存系统,以及java中间件和消息中间件系统
3一些简称:PV(Page View 页面访问量)、UV(UniqueVisitor,用户访问)、LVS(Linux Virtual Server,世界上最流行的负载均衡系统之一) 、CDN(Con特netDelivery Network,即内容分发网络的作用)、分布式稳健性it欧诺个TFS(TaoBao File System)、NAS(Network Attached Storage,网络附属存储)
4, 用户在淘宝上买东西,搜索时常常有如下几类意图:
浏览型、查询型、对比型、确定型
5,淘宝研发了TimeTunnel,用于进行实时的数据传输,然后交给后端系统进行计算报表等操作。
6.淘宝使用框架:
6.1 淘宝是在2003年5月10日上线的,LAMP(Linux+Apache+MySQL+PHP),这个知道现在还是一个
6.2 很常用的网站架构模型,其优点是:无须编译,发布快速,PHP语言功能强大。能做从页面渲染到数据访问所有的事情。而且用到的技术都是开源、免费的。
http://www.phpauction.net
6.3 数据库的改进:现在把它拆分成一个主库、两个从库,并且读写分离。这么做的好处有几点:存储容量增加了,有了备份,使用的安全性增加了,读写分离时的读写效率得以提升(写要比读更加消耗资源,分开后互不干扰。
6.4 开源的论坛系统PHPBB(http://www.phpbbchina.com)
6.5 MySQL默认的存储引擎MyISA,这种存储引擎在写数据的时候会把表锁住。
6.6 淘宝网在2004年就从PHP语言转换成了Java语言。
6.7 阿里巴巴自己用的MVC框架WebX(http://www.openwebx.org/docs/Webx3_Guide_Book.html),这个框架易于扩展,方便组件化开发,他的页面模板支持JSP和Velocity等,持久层支持ibatis和hibernate等,控制层可以用EJB和Spring。
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命中率,因为ImageServer和TFS位于同一个数据中心,读盘效率还是非常高的。
目前淘宝网的TFS已经开源(见code.taobao.org)
6.12 淘宝KV缓存系统——Tair
一般的缓存策略是不支持实时更新的。淘宝技术人员在Apache上面写了一个模块,这个数字根本不经过下层的WebApp容器(只经过Apache)就写入一个集中式的缓存区了,这个缓存区的数据再异步更新到数据库。
在2004年的时候,淘宝使用了一个叫做ESI(Edge SideIncludes)的缓存(Cache)。Oracle Web Cache也支持ESI。ESI是一种数据缓冲、缓存服务器,它提供将web网页的部分(这里指页面的片段)进行缓冲、缓存的技术及服务。在ESI是部分的缓冲网页,使用基于XML的标记语言,制定想要缓冲的页面部分。由此,页面内分为动态地变更部分和静态的不变更部分,只将静态的部分有效地发送到服务器中。淘宝网的数据虽然大部分都是动态产生的,但页面中的静态片段也有很多,如页面的头、尾,商品详情页面的卖家信息等。
TBstore的分布式算法实现:根据保存的Key(关键字),对key进行Hash算法,取得Hash值,再对Hash值与总Cache服务器数据取模。然后根据取模后的值,找到服务器列表中下标为此值的Cache服务器。由Java Client API封装实现,应用无需关心。
Tair(TaoBao Pair的意思,Pair即Key-Value数据对)。Tair包括缓存和持久化两种存储功能。Tair包括缓存和持久化两种存储功能。Tair作为一个分布式系统,由一个中心控制节点和一系列的服务节点组成,我们称中心控制节点为Config Server,服务节点是Data Server。Config Server负责管理所有的Data Server,维护Data Server的状态信息。Data Server对外提供各种数据服务,并以心跳的形式将自身的状况汇报给Config Serve。Config Server是控制点,而且是单点,目前采用一主一备的形式保证其可靠性。所有的Data Server地位都是等价的..
Tair已开源,地址为code.taobao.org
6.13
TC :交易中心(TradeCenter)、IC:商品中心(Item Center)、SC:店铺中心(ShopCenter)、TM:交易业务(Trade Manager)、IM:商品业务(Item Manager)、SM:店铺业务(ShopManager,后来改名为SS,shop System)、Detail(商品详情)
需要两种中间件:实时调用的中间件(淘宝的HSF,High-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)
消息中间件Notify,Notify是一个分布式的消息中间件系统,支持消息的订阅、发送和消费。
分布式数据访问层TDDL:三个主要的特性,数据访问路由、数据的多向非对称复制、数据存储的自由扩展。
6.14 Session框架:
会话保持有效,默认状况下,直到浏览器关闭,会话才结束。
Session中存储的内容包括用户信息:昵称、用户ID、登录状态等。
集中式的缓存区的Session方式。
6.15开放平台
http://blog.csdn.net/cenwenchu79
服务路由其实就是写一个高效的HttpAgent,服务接口标准化就是对象文本化(JSON,XML)
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和很多新的JS的API都合并起来统称为HTML5。首先HTML5标签的变化是让它更具有语义化,然后CSS3把很多展现型的东西做了加强,最重要的是新增的哪些JS的API,现在可以在浏览器本地连接数据库、使用Socket、使用本地存储、获取地理位置等。很多我们以前开发过程中需要从后台取得的信息,现在都可以在本地浏览器中做。
淘宝是国内应用HTML5最早的网站之一。
Facebook是把体验和技术结合的最完美的公司。
淘宝技术这十年(子柳著)读书笔记相关推荐
- 《淘宝技术这十年》读书摘记
淘宝技术这十年 子柳 ◆ 第0章 引言:光棍节的狂欢 UV(Unique Visitor,用户访问 其中最关键的便是LVS(Linux Virtual Server,世界上最流行的负载均衡系统之一, ...
- 《淘宝技术这十年》读书笔记 (二).Java时代的脱胎换骨和坚若磐石
马云说过"一个好的东西往往是是说不清楚的",姑且不论这句话的对与错.但我真的很佩服<淘宝技术这十年>这本书的作者子柳,能够通过淘宝的一些故事,按照时间顺序和IT发展的各 ...
- 淘宝从小到大的发展 - 从呱呱坠地的婴儿到出类拔萃的青年-重读《淘宝技术这十年》
一:前言 <淘宝技术这十年> –子柳著,北京.电子工业出版社. 我又把这本书重新读了一遍. 为什么重读? 因为以前读的时候,囫囵吞枣,只是看看而已,看过了就过了,了无痕,一点思考也没有留下 ...
- 《淘宝技术这十年》使用LAMP架构开发的网站
摘要:不论什么站点的发展都不是一蹴而就的.它在发展过程中会遇到各种各样的问题和业务带来的压力.作者子柳从工程师的角度讲述淘宝这个超大规模互联网系统的成长历程,及其全部主动和被动的技术变革的前因后果. ...
- 读书《淘宝技术这十年》
书中有很多值得品味思考的内容,这里分享给大家. 说在前面 我之前的文章有个抽奖活动,奖品是微信读书的<淘宝技术这十年>,中奖者是air9,请加我微信,书分享给你,另外会拉你进我的微信群. ...
- 《淘宝技术这十年》 之读书杂谈
1 引言 1.1 互联网企业 一家互联网企业要发展,可能需要这么几个要素(排名不分先后):市场契机,好的产品,优秀员工,互联网文化. 阿里巴巴,在淘宝没有成长起来之前,并没有特别出彩的地方.随着网购的 ...
- 《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件
前面两篇文章介绍了淘宝的发展历程.Java时代的变迁和淘宝开始创新技术: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 &l ...
- 书影 | 管中窥豹,读《淘宝技术这十年》上
这本书断断续续,竟然读过了一个新年的时间跨度.并非是要找借口,但自己的感觉:这种书其实读起来蛮累的,碎片化的时间加上作者东一耙,西一铲的叙述,还有以下两点: * 首先如果你把它当一本励志故事书来看的话 ...
- 《淘宝技术这十年》读书笔记 (三). 创造技术TFS和Tair
前面两篇文章介绍了淘宝的发展历程和Java时代的变迁: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 <淘宝技术这十年&g ...
- 淘宝技术这十年——互联网技术大全!
淘宝技术--探究寻秘 前言 这其实是<淘宝技术这十年>的读书笔记,该书以时间为脉络讲述了淘宝这十年来的技术迭代,是一本了解互联网名词.技术的好书. 本文从书的第0章开始将遇到的计算机.互联 ...
最新文章
- 6.微信小程序的如何使用全局属性
- ubuntu16.04装MatConvNet
- Matlab出现On Startup: Error using eval undefined function 'workspacefunc' for input arguments of type
- 【操作系统复习】操作系统的发展与分类
- php字符串分割tp模板,ThinkPHP 模板substr的截取字符串函数详解
- Python-非关键字参数和关键字参数(*args **kw)
- 九个PHP很有用的功能
- Unity脚本运行时更新带来了什么?
- Eclipse用法和技巧十八:减少不必要的输入
- [渝粤教育] 广东-国家-开放大学 21秋期末考试财务会计(二)10165k2
- Linux O(1)调度器
- 线性同余法求伪随机数序列
- 精简版XP安装IIS
- seaweedfs学习
- 学习 Java全栈工程师6.0 初学者笔记3— 流程控制 2021-08-11
- Bootstrap学习(五)navbar、nav、media、panel、list-group
- 【论文阅读ACL2020】Leveraging Graph to Improve Abstractive Multi-Document Summarization
- java 电商锁库存实现_电商项目扣减库存方案
- 如何向Google提交网站?(转)
- pip升级到最新版本